pyc-website

main website for pyc inc.

git clone https://9o.is/git/pyc-website.git

commit 14417dbd8c3ce652f3a2e29676e06c42d6cb139a
parent ea3df3a89ce012267e6fb5ad8c6513bfb402492d
Author: Jul <jul@9o.is>
Date:   Thu,  6 Mar 2014 06:28:18 -0500

implmented atm application form

Diffstat:
Msrc/main/scala/com/pyd/config/Site.scala | 4+++-
Asrc/main/scala/com/pyd/model/AtmApplication.scala | 94+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/main/scala/com/pyd/model/field/USStateField.scala | 30++++++++++++++++++++++++++++++
Asrc/main/scala/com/pyd/snippet/ApplyAtmScreen.scala | 26++++++++++++++++++++++++++
Asrc/main/webapp/apply-atm.html | 15+++++++++++++++
Msrc/main/webapp/less/overrides.less | 8++++++++
Msrc/main/webapp/less/variables.less | 4++--
Msrc/main/webapp/templates-hidden/wizard-all.html | 2+-
8 files changed, 179 insertions(+), 4 deletions(-)

diff --git a/src/main/scala/com/pyd/config/Site.scala b/src/main/scala/com/pyd/config/Site.scala @@ -26,7 +26,8 @@ object Site extends Locs { import MenuGroups._ // locations (for top group) - val home = MenuLoc(Menu.i("Home") / "index" >> TopBarGroup) + val home = MenuLoc(Menu.i("Home") / "index" >> EarlyResponse(() => Full(RedirectResponse(applyATM.url)))) + val applyATM = MenuLoc(Menu.i("Apply for Bitcoin ATM") / "apply-atm" >> TopBarGroup) val about = MenuLoc(Menu.i("About") / "about" >> TopBarGroup) val blog = MenuLoc(Menu.i("Blog") / "blog" >> TopBarGroup >> EarlyResponse(() => Full(RedirectResponse("http://blog."+S.hostName)))) val faqs = MenuLoc(Menu.i("FAQs") / "faqs" >> TopBarGroup) @@ -47,6 +48,7 @@ object Site extends Locs { private def menus = List( home.menu, + applyATM.menu, about.menu, blog.menu, faqs.menu, diff --git a/src/main/scala/com/pyd/model/AtmApplication.scala b/src/main/scala/com/pyd/model/AtmApplication.scala @@ -0,0 +1,93 @@ +package com.pyd +package model + +import field.USStatesField +import lib.RogueMetaRecord + +import net.liftweb._ +import mongodb.record._ +import mongodb.record.field._ +import util._ +import record.field._ +import common._ + +class AtmApplication private () extends MongoRecord[AtmApplication] with ObjectIdPk[AtmApplication] { + def meta = AtmApplication + + object name extends StringField(this, 64) { + override def displayName = "Business Name" + + override def validations = + valMaxLen(64, "Business name must be 64 characters or less") _ :: + valMinLen(1, "* required") _ :: + super.validations + } + + object email extends EmailField(this, 64) { + override def displayName = "E-mail" + + override def validations = + valMaxLen(64, "Email must be 64 characters or less") _ :: + super.validations + } + + object phone extends StringField(this, 25) { + override def displayName = "Phone Number" + + override def validations = + valMaxLen(25, "Phone number must be 25 characters or less") _ :: + super.validations + } + + object timeContact extends TextareaField(this, 255) { + override def displayName = "When is the best time to reach you?" + override def helpAsHtml = Full(<em>Enter time of day and/or week you would like to be contacted.</em>) + override def textareaRows = 2 + } + + object address extends StringField(this, 255) { + override def displayName = "Business Address" + + override def validations = + valMaxLen(255, "Business address must be 255 characters or less") _ :: + valMinLen(1, "* required") _ :: + super.validations + } + + object city extends StringField(this, 64) { + override def displayName = "City" + + override def validations = + valMaxLen(64, "City must be 64 characters or less") _ :: + valMinLen(1, "* required") _ :: + super.validations + } + + object state extends USStatesField(this) { + override def displayName = "State" + } + + object website extends StringField(this, 255) { + override def displayName = "Website" + + override def validations = + valMaxLen(255, "Website must be 255 characters or less") _ :: + super.validations + } + + object industry extends StringField(this, 64) { + override def displayName = "Industry" + + override def validations = + valMaxLen(64, "Industry must be 64 characters or less") _ :: + super.validations + } + + def allScreenFields = new FieldContainer { + def allFields = List(name, email, phone, website, industry, address, city, state, timeContact) + } +} + +object AtmApplication extends AtmApplication with RogueMetaRecord[AtmApplication] { + override def collectionName = "atm.applications" +} +\ 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 @@ -0,0 +1,30 @@ +package com.pyd.model.field + +import net.liftweb.http._ +import net.liftweb.record._ +import field._ + + + +object USStates extends Enumeration(1) { + + 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 + + class States extends Val { + override def toString = super.toString.replace("_", " ") + } +} + + +class USStatesField[OwnerType <: Record[OwnerType]](rec: OwnerType) extends EnumField(rec, USStates) { +} + +class OptionalUSStatesField[OwnerType <: Record[OwnerType]](rec: OwnerType) extends OptionalEnumField(rec, USStates) { +} + diff --git a/src/main/scala/com/pyd/snippet/ApplyAtmScreen.scala b/src/main/scala/com/pyd/snippet/ApplyAtmScreen.scala @@ -0,0 +1,25 @@ +package com.pyd +package snippet + +import model.AtmApplication +import config.Site +import net.liftweb.http._ + +sealed trait BaseApplyAtmScreen extends BaseScreen { + + object applicationVar extends ScreenVar(AtmApplication.createRecord) + + override def localSetup { + Referer(Site.applyATM.url) + } +} + +object ApplyAtmScreen extends BaseApplyAtmScreen { + addFields(() => applicationVar.is.allScreenFields) + + def finish() { + applicationVar.is.save + S.notice("Your Bitcoin ATM application has been received." + + "We will review and contact you for further information. Thank you for applying.") + } +} +\ No newline at end of file diff --git a/src/main/webapp/apply-atm.html b/src/main/webapp/apply-atm.html @@ -0,0 +1,14 @@ +<div data-lift="surround?with=base-wrap;at=content"> + <div data-lift="Notices"></div> + <div class="row"> + <div class="col-xs-12 col-sm-6 col-md-8 col-lg-8"> + + </div> + + <div class="col-xs-12 col-sm-6 col-md-4 col-lg-4"> + <div class="well well-lg"> + <div data-lift="ApplyAtmScreen"></div> + </div> + </div> + </div> +</div> +\ No newline at end of file diff --git a/src/main/webapp/less/overrides.less b/src/main/webapp/less/overrides.less @@ -299,4 +299,12 @@ body { .main-content > .page-header { padding-left: 5px; padding-right: 5px; +} + +.alert ul { + .list-unstyled(); +} + +.alert-danger { + color: @white; } \ No newline at end of file diff --git a/src/main/webapp/less/variables.less b/src/main/webapp/less/variables.less @@ -190,7 +190,7 @@ @input-color: @gray; @input-border: #ccc; @input-border-radius: 0px; -@input-border-focus: #66afe9; +@input-border-focus: @brand-primary; @input-color-placeholder: @gray-light; @@ -428,7 +428,7 @@ @state-warning-bg: #ECDFB0; @state-warning-border: darken(spin(@state-warning-bg, -10), 7%); -@state-danger-text: #FFF; +@state-danger-text: @brand-danger; @state-danger-bg: #C46A69; @state-danger-border: darken(spin(@state-danger-bg, -10), 18%); diff --git a/src/main/webapp/templates-hidden/wizard-all.html b/src/main/webapp/templates-hidden/wizard-all.html @@ -10,7 +10,7 @@ <div class="controls"> <wizard:form class="form-control"></wizard:form> <wizard:field_errors> - <ul class="form-alert"> + <ul class="form-alert list-unstyled"> <wizard:error> <li class="text-danger"><wizard:bind></wizard:bind></li> </wizard:error>