package e00_basics // @snippet_begin(FormHandlingSample) import ( "fmt" "io" "mime/multipart" "github.com/qor5/docs/docsrc/utils" "github.com/qor5/web" . "github.com/theplant/htmlgo" ) type MyData struct { Text1 string Checkbox1 string Color1 string Email1 string Radio1 string Range1 int Url1 string Tel1 string Month1 string Time1 string Week1 string DatetimeLocal1 string File1 []*multipart.FileHeader HiddenValue1 string } func FormHandlingPage(ctx *web.EventContext) (pr web.PageResponse, err error) { var fv MyData err = ctx.UnmarshalForm(&fv) if fv.Text1 == "" { fv.Text1 = `Hello '1 World` } if err != nil { panic(err) } pr.Body = Div( H1("Form Handling"), H3("Form Content"), utils.PrettyFormAsJSON(ctx), H3("File1 Content"), Pre(fv.File1Bytes()).Style("width: 400px; white-space: pre-wrap;"), Div( Label("Text1"), Input("").Type("text").Value(fv.Text1).Attr(web.VFieldName("Text1")...), ), Div( Label("Checkbox1"), Input("").Type("checkbox").Value("1").Checked(fv.Checkbox1 == "1").Attr(web.VFieldName("Checkbox1")...), ), web.Scope( Fieldset( Legend("Nested Form"), Div( Label("Color1"), Input("").Type("color"). Value(fv.Color1). Attr(web.VFieldName("Color1")...), ), Div( Label("Email1"), Input("").Type("email").Value(fv.Email1).Attr(web.VFieldName("Email1")...), ), Input("").Type("checkbox"). Attr("v-model", "locals.checked"). Attr(web.VFieldName("Checked123")...), Button("Uncheck it").Attr("@click", "locals.checked = false"), Hr(), Button("Send").Attr("@click", web.POST(). EventFunc("checkvalue"). Query("id", 123). FieldValue("name", "azuma"). Go()), ), ).VSlot("{ plaidForm, locals }").Init("{checked: true}"), web.Scope( Fieldset( Legend("Nested Form 2"), Div( Label("Email1"), Input("").Type("email").Value(fv.Email1).Attr(web.VFieldName("Email1")...), ), Button("Send").Attr("@click", web.POST(). EventFunc("checkvalue"). Go()), ), ).VSlot("{ plaidForm, locals }").Init("{checked: true}"), Div( Fieldset( Legend("Radio"), Label("Radio Value 1"), Input("Radio1").Type("radio"). Value("1").Checked(fv.Radio1 == "1").Attr(web.VFieldName("Radio1")...), Label("Radio Value 2"), Input("Radio1").Type("radio"). Value("2").Checked(fv.Radio1 == "2").Attr(web.VFieldName("Radio1")...), ), ), Div( Label("Range1"), Input("").Type("range").Value(fmt.Sprint(fv.Range1)).Attr(web.VFieldName("Range1")...), ), web.Scope( Div( Label("Url1"), Input("").Type("url").Value(fv.Url1).Attr(web.VFieldName("Url1")...), ), Div( Label("Tel1"), Input("").Type("tel").Value(fv.Tel1).Attr(web.VFieldName("Tel1")...), ), Div( Label("Month1"), Input("").Type("month").Value(fv.Month1).Attr(web.VFieldName("Month1")...), ), ).VSlot("{ locals }"), Div( Label("Time1"), Input("").Type("time").Value(fv.Time1).Attr(web.VFieldName("Time1")...), ), Div( Label("Week1"), Input("").Type("week").Value(fv.Week1).Attr(web.VFieldName("Week1")...), ), Div( Label("DatetimeLocal1"), Input("").Type("datetime-local").Value(fv.DatetimeLocal1).Attr(web.VFieldName("DatetimeLocal1")...), ), Div( Label("File1"), Input("").Type("file").Value("").Attr(web.VFieldName("File1")...), ), Div( Label("Hidden values with default"), Input("").Type("hidden").Value(`hidden value '123`).Attr(web.VFieldName("HiddenValue1")...), ), Div( Button("Submit").Attr("@click", web.POST().EventFunc("checkvalue").Go()), ), ) return } func checkvalue(ctx *web.EventContext) (er web.EventResponse, err error) { er.Reload = true return } func (m *MyData) File1Bytes() string { if m.File1 == nil || len(m.File1) == 0 { return "" } f, err := m.File1[0].Open() if err != nil { panic(err) } var b = make([]byte, 200) _, err = io.ReadFull(f, b) if err != nil { panic(err) } return fmt.Sprintf("%+v ...", b) } var FormHandlingPagePB = web.Page(FormHandlingPage). EventFunc("checkvalue", checkvalue) const FormHandlingPagePath = "/samples/form_handling" // @snippet_end