From e9641231313f0606af8069f3833762c8d5b7bb57 Mon Sep 17 00:00:00 2001 From: Brandon Dyck Date: Mon, 13 Apr 2020 23:00:37 -0600 Subject: [PATCH] Make checkboxes for variable dates --- front/server.go | 40 +++++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/front/server.go b/front/server.go index 5a3a826..e88e1c3 100644 --- a/front/server.go +++ b/front/server.go @@ -84,23 +84,27 @@ func disableIf(cond bool, input hm.Term) hm.Term { } type voteState struct { - name string + name string + earliestDate, latestDate time.Time } func voteForm(disabled bool, st voteState) hm.Term { - 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")), - ), + var dates []time.Time + for curr := st.earliestDate; curr.Before(st.latestDate.Add(time.Hour)); curr = curr.AddDate(0, 0, 1) { + dates = append(dates, curr) } - for slot := 0; slot < 24; slot++ { + + var ths = hm.Terms{e.Th()()} + for _, date := range dates { + ths = append(ths, e.Th()(hm.Text(date.Format("Jan 2")))) + } + + var rows = hm.Terms{e.Thead()(ths)} + for hour := 0; hour < 24; hour++ { var row = hm.Terms{ - e.Td()(hm.Text(timeLabels[slot])), + e.Td()(hm.Text(timeLabels[hour])), } - for day := 0; day < 3; day++ { + for day := 0; day < len(dates); day++ { row = append(row, e.Td()(disableIf(disabled, e.Input(a.Type("checkbox"))))) } rows = append(rows, e.Tr()(row)) @@ -119,16 +123,26 @@ func voteForm(disabled bool, st voteState) hm.Term { func (h *handler) handleVote(w http.ResponseWriter, r *http.Request) { // TODO use actual data + state := voteState{ + name: "Suzie Q", + earliestDate: time.Date(2006, time.May, 3, 0, 0, 0, 0, time.UTC), + latestDate: time.Date(2006, time.May, 8, 0, 0, 0, 0, time.UTC), + } 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{}), + voteForm(false, state), } _ = h.writePage(w, body) } func (h *handler) handleDoVote(w http.ResponseWriter, r *http.Request) { // TODO use actual data + state := voteState{ + name: "Suzie Q", + earliestDate: time.Date(2006, time.May, 3, 0, 0, 0, 0, time.UTC), + latestDate: time.Date(2006, time.May, 8, 0, 0, 0, 0, time.UTC), + } body := hm.Terms{ e.H2()(hm.Text("Billy's birthday party")), e.P()(hm.Text("At Billy's house. Bring presents. Eat cake.")), @@ -138,7 +152,7 @@ func (h *handler) handleDoVote(w http.ResponseWriter, r *http.Request) { e.A(a.Href("#"))(hm.Text("this link")), hm.Text("."), ), - voteForm(true, voteState{name: "Suzie Q"}), + voteForm(true, state), } _ = h.writePage(w, body) }