pyc-website
main website for pyc inc.
git clone https://9o.is/git/pyc-website.git
commit 82acf3b7674637e72592d95db61c838a95d14acd parent 7c88ac56f66df2130d1de1df924ee02ee0c6531c Author: Jul <jul@9o.is> Date: Sun, 9 Mar 2014 01:33:21 -0500 implemented snippets and record for atm notification. included indices for mongo collections Diffstat:
| M | src/main/scala/com/pyd/model/AtmApplication.scala | | | 4 | ++++ |
| A | src/main/scala/com/pyd/model/NearAtmNotify.scala | | | 59 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| M | src/main/scala/com/pyd/model/field/USStateField.scala | | | 8 | +++----- |
| A | src/main/scala/com/pyd/snippet/NearAtmNotifySnip.scala | | | 49 | +++++++++++++++++++++++++++++++++++++++++++++++++ |
| M | src/main/scala/com/pyd/snippet/UtilSnips.scala | | | 24 | ++++++++++++++++++++++-- |
| M | src/main/webapp/apply-atm.html | | | 1 | - |
| M | src/main/webapp/less/overrides.less | | | 5 | +++-- |
| M | src/main/webapp/less/variables.less | | | 1 | + |
| M | src/main/webapp/locations.html | | | 61 | +++++-------------------------------------------------------- |
| M | src/main/webapp/templates-hidden/base-wrap.html | | | 3 | +++ |
10 files changed, 149 insertions(+), 66 deletions(-)
diff --git a/src/main/scala/com/pyd/model/AtmApplication.scala b/src/main/scala/com/pyd/model/AtmApplication.scala @@ -91,5 +91,9 @@ class AtmApplication private () extends MongoRecord[AtmApplication] with ObjectI } object AtmApplication extends AtmApplication with RogueMetaRecord[AtmApplication] { + import mongodb.BsonDSL._ + override def collectionName = "atm.applications" + + ensureIndex((name.name -> 1), true) } \ No newline at end of file diff --git a/src/main/scala/com/pyd/model/NearAtmNotify.scala b/src/main/scala/com/pyd/model/NearAtmNotify.scala @@ -0,0 +1,58 @@ +package com.pyd +package model + +import lib.RogueMetaRecord +import field.USStatesField + +import net.liftweb._ +import mongodb.record._ +import mongodb.record.field.ObjectIdPk +import record.field._ + +class NearAtmNotify private () extends MongoRecord[NearAtmNotify] with ObjectIdPk[NearAtmNotify] { + def meta = NearAtmNotify + + object fname extends StringField(this, 64) { + override def validations = + valMaxLen(64, "First name must be 64 characters or less") _ :: + valMinLen(1, "* required") _ :: + super.validations + } + + object lname extends StringField(this, 64) { + override def validations = + valMaxLen(64, "First name must be 64 characters or less") _ :: + valMinLen(1, "* required") _ :: + super.validations + } + + object email extends EmailField(this, 64) { + override def validations = + valMaxLen(64, "Email must be 64 characters or less") _ :: + super.validations + } + + + object postal extends PostalCodeField(this, meta.usa) + + object city extends StringField(this, 64) { + override def validations = + valMaxLen(64, "City must be 64 characters or less") _ :: + valMinLen(1, "* required") _ :: + super.validations + } + + object state extends USStatesField(this) +} + +object NearAtmNotify extends NearAtmNotify with RogueMetaRecord[NearAtmNotify] { + import mongodb.BsonDSL._ + + override def collectionName = "atm.nearnotify" + + ensureIndex((email.name -> 1), true) + + object usa extends CountryField(NearAtmNotify.createRecord) { + override def defaultValue = Countries.USA + } +} +\ No newline at end of file diff --git a/src/main/scala/com/pyd/model/field/USStateField.scala b/src/main/scala/com/pyd/model/field/USStateField.scala @@ -6,16 +6,14 @@ import field._ -object USStates extends Enumeration(1) { +object USStates extends Enumeration { val Alabama, Alaska, Arizona, Arkansas, California, Colorado, Connecticut, Delaware, Florida, Georgia, Hawaii, Idaho, Illinois, Indiana, Iowa, Kansas, Kentucky, Louisiana, Maine, Maryland, Massachusetts, Michigan, Minnesota, Mississippi, Missouri, Montana, Nebraska, Nevada, New_Hampshire, New_Jersey, New_Mexico, New_York, North_Carolina, North_Dakota, Ohio, Oklahoma, Oregon, Pennsylvania, Rhode_Island, South_Carolina, - South_Dakota, Tennessee, Texas, Utah, Vermont, Virginia, Washington, West_Virginia, Wisconsin, Wyoming = States - - def States = new States - + South_Dakota, Tennessee, Texas, Utah, Vermont, Virginia, Washington, West_Virginia, Wisconsin, Wyoming = Value + class States extends Val { override def toString = super.toString.replace("_", " ") } diff --git a/src/main/scala/com/pyd/snippet/NearAtmNotifySnip.scala b/src/main/scala/com/pyd/snippet/NearAtmNotifySnip.scala @@ -0,0 +1,48 @@ +package com.pyd +package snippet + +import model._ +import field._ +import net.liftweb._ +import common._ +import util._ +import Helpers._ +import http._ +import js._ +import SHtml._ + +class NearAtmNotifySnip extends BaseSnippet[NearAtmNotify] with Logger { + override val t = Full(NearAtmNotify.createRecord) + + val options: List[(String,String)] = + USStates.values.map(i => (i.toString, i.toString)).toList + + def render: CssSel = serve { + t => + + def stateSelection(id: String) : Unit = tryo { + t.state.set(USStates.withName(id)) + } + + "@fname" #> text(t.fname.get, t.fname.set _) & + "@lname" #> text(t.lname.get, t.lname.set _) & + "@email" #> email(t.email.get, t.email.set _) & + "@code" #> text(t.postal.get, t.postal.set _) & + "@city" #> text(t.city.get, t.city.set _) & + "@state" #> select(options, Empty, stateSelection) & + ":submit" #> ajaxSubmit("Notify Me", process _) + } + + private def process: JsCmd = serve { + t => + t.save + + S.notice( + <div> + <i class="fa-fw fa fa-check"></i> + <strong>{s"Hi ${t.fname.get}, your notification has been received."}</strong> + {xml.Text(s" We will notify you when there is an ATM near ${t.city.get}.")} + </div> + ) + } +} +\ No newline at end of file diff --git a/src/main/scala/com/pyd/snippet/UtilSnips.scala b/src/main/scala/com/pyd/snippet/UtilSnips.scala @@ -3,8 +3,10 @@ package snippet import scala.xml.NodeSeq import net.liftweb._ -import util.Props -import http.S +import common._ +import util._ +import http._ +import js._ import net.liftmodules.extras._ import snippet._ @@ -15,6 +17,24 @@ abstract class BaseScreen extends Bootstrap3Screen { override def defaultToAjax_? = true } +abstract class BaseSnippet[T] extends SnippetHelper { + val t: Box[T] + + protected def serve(snip: T => CssSel): CssSel = + (for { + t <- t ?~ "Data is empty" + } yield { + snip(t) + }): CssSel + + protected def serve(snip: T => JsCmd): JsCmd = + (for { + t <- t ?~ "Data is empty" + } yield { + snip(t) + }): JsCmd +} + object Assets extends AssetLoader object Notices extends BsAlerts diff --git a/src/main/webapp/apply-atm.html b/src/main/webapp/apply-atm.html @@ -1,5 +1,4 @@ <div data-lift="surround?with=default;at=content"> - <div data-lift="Notices"></div> <div id="apply-atm" class="row no-gutter"> <div class="col-xs-12 col-sm-7 col-md-8 col-lg-8"> diff --git a/src/main/webapp/less/overrides.less b/src/main/webapp/less/overrides.less @@ -262,8 +262,9 @@ body { .box-shadow(0 3px 5px 6px #ccc); } -.alert ul { - .list-unstyled(); +.alert { + z-index: @alert-zindex; + ul { .list-unstyled(); } } .alert-danger { diff --git a/src/main/webapp/less/variables.less b/src/main/webapp/less/variables.less @@ -807,3 +807,4 @@ @gmap-overlay-zindex: 500; @gmap-text-overlay-zindex: 520; +@alert-zindex: 550; diff --git a/src/main/webapp/locations.html b/src/main/webapp/locations.html @@ -5,7 +5,7 @@ </style> </lift:head> - <div data-lift="Notices"></div> + <div id="atm-locations"> <div class="outer-layer"><div class="layer"></div></div> @@ -18,7 +18,7 @@ </p> </div> - <div id="notify-form-outer" class="col-xs-12 col-sm-12 col-md-5 col-lg-4 col-lg-offset-1 right-content"> + <div data-lift="NearAtmNotifySnip" class="col-xs-12 col-sm-12 col-md-5 col-lg-4 col-lg-offset-1 right-content"> <form action="" id="notify-form" class="smart-form client-form"> <header>Notify me when there is a nearby ATM</header> @@ -58,60 +58,9 @@ placeholder="City" type="text"> </label> </section> - <section class="col col-3"> - <label class="select"> <select name="state"> - <option value="0" selected="" disabled="ST"></option> - <option value="1">AL</option> - <option value="2">AK</option> - <option value="3">AZ</option> - <option value="4">AR</option> - <option value="5">CA</option> - <option value="6">CO</option> - <option value="7">CT</option> - <option value="8">DE</option> - <option value="9">FL</option> - <option value="10">GA</option> - <option value="11">HI</option> - <option value="12">ID</option> - <option value="13">IL</option> - <option value="14">IN</option> - <option value="15">IA</option> - <option value="16">KS</option> - <option value="17">KY</option> - <option value="18">LA</option> - <option value="19">ME</option> - <option value="20">MD</option> - <option value="21">MA</option> - <option value="22">MI</option> - <option value="23">MN</option> - <option value="24">MS</option> - <option value="25">MO</option> - <option value="26">MT</option> - <option value="27">NE</option> - <option value="28">NV</option> - <option value="29">NH</option> - <option value="30">NJ</option> - <option value="31">NM</option> - <option value="32">NY</option> - <option value="33">NC</option> - <option value="34">ND</option> - <option value="35">OH</option> - <option value="36">OK</option> - <option value="37">OR</option> - <option value="38">PA</option> - <option value="39">RI</option> - <option value="40">SC</option> - <option value="41">SD</option> - <option value="42">TN</option> - <option value="43">TX</option> - <option value="44">UT</option> - <option value="45">VT</option> - <option value="46">VA</option> - <option value="47">WA</option> - <option value="48">WV</option> - <option value="49">WI</option> - <option value="50">WY</option> - </select> + <section class="col col-6"> + <label class="select"> + <select name="state"></select> </label> </section> diff --git a/src/main/webapp/templates-hidden/base-wrap.html b/src/main/webapp/templates-hidden/base-wrap.html @@ -48,6 +48,9 @@ </div> </div> + <div class="container"> + <div data-lift="Notices"></div> + </div> <div id="content" class="container"></div> <!-- /container --> <!-- javascript -->