1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
| package demo.helloworld.snippet
import net.liftweb.http._
import js.jquery.JqJsCmds.DisplayMessage
import js.JsCmds.SetHtml
import S._
import SHtml._
import net.liftweb.util._
import Helpers._
import scala.xml._
import net.liftweb.http.js._
import net.liftweb.common.{Empty, Logger, Full}
import java.lang.String
/**
*/
class RentingForm extends StatefulSnippet {
var dispatch: DispatchIt = {
case "rent" => rentForm _
}
var (name, address, email, movieType, dateOfHire, numberOfDays, discount)= ("", "", "", "", "", "", "")
var movieMap = Seq("" -> "Select Movie Type", "Sci-fi" -> "Sci-fi","Horror" -> "Horror", "Comedy" -> "Comedy", "Suspense" -> "Suspense","Romance" -> "Romance")
var discountMap = Map("Regular Customer" -> "Regular Customer", "New Customer" -> "New Customer")
val discounts = radio(discountMap.keys.toList, Full(discount), discount =_, "class" -> "required")
var fieldClass = Map.empty[String, String]
var requiredFields = List("name", "email")
def bindFormFields(xhtml: NodeSeq, discounts: SHtml.ChoiceHolder[String],submitLabel: String): NodeSeq = {
val requiredClass: String = "required"
bind("v", xhtml,
"name" -> text(name, name = _, "class" -> fieldClass.getOrElse("name",requiredClass), "accesskey" -> "N"),
"address" -> textarea(address, address = _, "rows" -> "5", "class" ->fieldClass.getOrElse("address", requiredClass)),
"email" -> text(email, email = _, "class" ->{fieldClass.getOrElse("email", requiredClass) + " email"}),
"movie" -> select(movieMap, Empty, movieType = _, "class" ->fieldClass.getOrElse("movieMap", requiredClass)),
"date" -> text(dateOfHire, dateOfHire = _, "class" ->{fieldClass.getOrElse("dateOfHire", requiredClass) + " date"}, "id" -> "datePicker"),
"numberOfDays" -> text(numberOfDays, numberOfDays = _, "class" ->fieldClass.getOrElse("numberOfDays", requiredClass), "onkeypress" ->"checkNumerics(event)"),
"regular" -> discounts(0),
"new" -> discounts(1),
"rtxt1" -> (discountMap.getOrElse("Regular Customer", "No Key!")),
"rtxt2" -> (discountMap.getOrElse("New Customer", "No Key!")),
"submit" -> submit(submitLabel, () => {}, "id" -> "submit"))
}
def rentForm(xhtml: NodeSeq): NodeSeq = {
dispatch = {
case name if name != "" => showDetails _
}
bindFormFields(xhtml, discounts, "Confirm")
}
def validateFields = {
requiredFields.foreach(field => {
var f = getClass.getDeclaredField(field)
if (f != null) {
f.setAccessible(true)
if (f.get(this) == "") {
S.error(field + "Field", "You need to provide a " + field)
fieldClass += field -> "error"
} else {
fieldClass -= field
}
}
})
}
def showDetails(xhtml: NodeSeq): NodeSeq = {
validateFields
bindFormFields(xhtml, discounts, "Edit")
}
def thankYou(xhtml: NodeSeq): NodeSeq = {
Log.info(name, address, email, movieType, dateOfHire, numberOfDays,discount)
bind("v", xhtml,
"name" -> (name))
}
}
|