Factor out voting form
This commit is contained in:
parent
1b823fe4f0
commit
1bfbd566fd
@ -67,8 +67,27 @@ var timeLabels = []string{
|
|||||||
"12 PM", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11",
|
"12 PM", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11",
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *handler) handleVote(w http.ResponseWriter, r *http.Request) {
|
func disableIf(cond bool, input hm.Term) hm.Term {
|
||||||
// TODO use actual data
|
if !cond {
|
||||||
|
return input
|
||||||
|
}
|
||||||
|
switch e := input.(type) {
|
||||||
|
case hm.ParentElement:
|
||||||
|
e.Attribs = append(e.Attribs, a.Disabled())
|
||||||
|
return e
|
||||||
|
case hm.VoidElement:
|
||||||
|
e.Attribs = append(e.Attribs, a.Disabled())
|
||||||
|
return e
|
||||||
|
default:
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type voteState struct {
|
||||||
|
name string
|
||||||
|
}
|
||||||
|
|
||||||
|
func voteForm(disabled bool, st voteState) hm.Term {
|
||||||
var rows = hm.Terms{
|
var rows = hm.Terms{
|
||||||
e.Thead()(
|
e.Thead()(
|
||||||
e.Th()(),
|
e.Th()(),
|
||||||
@ -82,46 +101,34 @@ func (h *handler) handleVote(w http.ResponseWriter, r *http.Request) {
|
|||||||
e.Td()(hm.Text(timeLabels[slot])),
|
e.Td()(hm.Text(timeLabels[slot])),
|
||||||
}
|
}
|
||||||
for day := 0; day < 3; day++ {
|
for day := 0; day < 3; day++ {
|
||||||
row = append(row, e.Td()(e.Input(a.Type("checkbox"))))
|
row = append(row, e.Td()(disableIf(disabled, e.Input(a.Type("checkbox")))))
|
||||||
}
|
}
|
||||||
rows = append(rows, e.Tr()(row))
|
rows = append(rows, e.Tr()(row))
|
||||||
}
|
}
|
||||||
body := hm.Terms{
|
return e.Form(a.Method(http.MethodPost), a.Action(pathDoVote))(
|
||||||
e.H2()(hm.Text("Billy's birthday party")),
|
|
||||||
e.P()(hm.Text("At Billy's house. Bring presents. Eat cake.")),
|
|
||||||
e.Form(a.Method(http.MethodPost), a.Action(pathDoVote))(
|
|
||||||
e.Label()(hm.Text("What's your name?")),
|
e.Label()(hm.Text("What's your name?")),
|
||||||
e.Br(),
|
e.Br(),
|
||||||
e.Input(a.Size(40)),
|
disableIf(disabled, e.Input(a.Size(40), a.Value(st.name))),
|
||||||
e.Fieldset()(
|
e.Fieldset()(
|
||||||
e.Legend()(hm.Text("When are you available?")),
|
e.Legend()(hm.Text("When are you available?")),
|
||||||
e.Table()(rows),
|
e.Table()(rows),
|
||||||
),
|
),
|
||||||
e.Input(a.Type("submit"), a.Value("Submit")),
|
e.Input(a.Type("submit"), a.Value("Submit")),
|
||||||
),
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *handler) handleVote(w http.ResponseWriter, r *http.Request) {
|
||||||
|
// TODO use actual data
|
||||||
|
body := hm.Terms{
|
||||||
|
e.H2()(hm.Text("Billy's birthday party")),
|
||||||
|
e.P()(hm.Text("At Billy's house. Bring presents. Eat cake.")),
|
||||||
|
voteForm(false, voteState{}),
|
||||||
}
|
}
|
||||||
_ = h.writePage(w, body)
|
_ = h.writePage(w, body)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *handler) handleDoVote(w http.ResponseWriter, r *http.Request) {
|
func (h *handler) handleDoVote(w http.ResponseWriter, r *http.Request) {
|
||||||
// TODO use actual data
|
// TODO use actual data
|
||||||
var rows = hm.Terms{
|
|
||||||
e.Thead()(
|
|
||||||
e.Th()(),
|
|
||||||
e.Th()(hm.Text("May 3")),
|
|
||||||
e.Th()(hm.Text("May 4")),
|
|
||||||
e.Th()(hm.Text("May 5")),
|
|
||||||
),
|
|
||||||
}
|
|
||||||
for slot := 0; slot < 24; slot++ {
|
|
||||||
var row = hm.Terms{
|
|
||||||
e.Td()(hm.Text(timeLabels[slot])),
|
|
||||||
}
|
|
||||||
for day := 0; day < 3; day++ {
|
|
||||||
row = append(row, e.Td()(e.Input(a.Type("checkbox"), a.Disabled())))
|
|
||||||
}
|
|
||||||
rows = append(rows, e.Tr()(row))
|
|
||||||
}
|
|
||||||
body := hm.Terms{
|
body := hm.Terms{
|
||||||
e.H2()(hm.Text("Billy's birthday party")),
|
e.H2()(hm.Text("Billy's birthday party")),
|
||||||
e.P()(hm.Text("At Billy's house. Bring presents. Eat cake.")),
|
e.P()(hm.Text("At Billy's house. Bring presents. Eat cake.")),
|
||||||
@ -131,16 +138,7 @@ func (h *handler) handleDoVote(w http.ResponseWriter, r *http.Request) {
|
|||||||
e.A(a.Href("#"))(hm.Text("this link")),
|
e.A(a.Href("#"))(hm.Text("this link")),
|
||||||
hm.Text("."),
|
hm.Text("."),
|
||||||
),
|
),
|
||||||
e.Form(a.Method(http.MethodPost), a.Action(pathDoVote))(
|
voteForm(true, voteState{name: "Suzie Q"}),
|
||||||
e.Label()(hm.Text("What's your name?")),
|
|
||||||
e.Br(),
|
|
||||||
e.Input(a.Size(40), a.Disabled(), a.Value("Suzie Q")),
|
|
||||||
e.Fieldset()(
|
|
||||||
e.Legend()(hm.Text("When are you available?")),
|
|
||||||
e.Table()(rows),
|
|
||||||
),
|
|
||||||
e.Input(a.Type("submit"), a.Value("Submit")),
|
|
||||||
),
|
|
||||||
}
|
}
|
||||||
_ = h.writePage(w, body)
|
_ = h.writePage(w, body)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user