pyc-website
main website for pyc inc.
git clone https://9o.is/git/pyc-website.git
USStateField.scala
(1710B)
1 package inc.pyc
2 package model
3 package field
4
5 import net.liftweb._
6 import http._
7 import SHtml._
8 import util._, Helpers._
9 import record._
10 import field._
11 import json.JsonAST._
12 import common._
13
14 object USStates extends Enumeration {
15
16 val Alabama, Alaska, Arizona, Arkansas, California, Colorado, Connecticut, Delaware, Florida, Georgia,
17 Hawaii, Idaho, Illinois, Indiana, Iowa, Kansas, Kentucky, Louisiana, Maine, Maryland,
18 Massachusetts, Michigan, Minnesota, Mississippi, Missouri, Montana, Nebraska, Nevada, New_Hampshire, New_Jersey,
19 New_Mexico, New_York, North_Carolina, North_Dakota, Ohio, Oklahoma, Oregon, Pennsylvania, Rhode_Island, South_Carolina,
20 South_Dakota, Tennessee, Texas, Utah, Vermont, Virginia, Washington, West_Virginia, Wisconsin, Wyoming = USState
21
22 def USState = new USState
23
24 class USState extends Val {
25 override def toString = super.toString.replace("_", " ")
26 }
27
28 def options: List[(String, String)] =
29 USStates.values.map(i => (i.toString, i.toString)).toList
30
31 def stateSelect(s: String) = tryo(USStates.withName(s))
32 }
33
34
35 class USStatesField[OwnerType <: Record[OwnerType]](rec: OwnerType) extends EnumField(rec, USStates) {
36 override def setFromJValue(jvalue: JValue): Box[USStatesField.this.MyType] = {
37 val stringToInt = jvalue transform {
38 case JString(s) =>
39 val value: Box[Int] = USStates.stateSelect(s).map(_.id)
40 value.map(JInt(_)).openOr(JNothing)
41 case _ => JNothing
42 }
43 super.setFromJValue(stringToInt)
44 }
45 }
46
47 trait USStatesSelector {
48 def states: CssSel =
49 "@state" #> select(USStates.options, Empty, USStates.stateSelect, "name" -> "state")
50 }
51