package controller import ( "html/template" "net/http" "github.com/yassinebenaid/godump" "gitnet.fr/deblan/go-form-demo/form" "gitnet.fr/deblan/go-form/theme" ) func UsingTemplate(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "text/html; charset=utf-8") var dumped any // New instances of datas themeValue := form.NewTheme() contactValue := form.Contact{} // Theme form handler themeSelectorForm := form.CreateThemeSelectorForm() themeSelectorForm.HandleRequest(r) if themeSelectorForm.IsSubmitted() && themeSelectorForm.IsValid() { themeSelectorForm.Bind(themeValue) } // Contact form handler contactForm := form.CreateContactForm(themeValue.Value == "Bootstrap5") if r.Method == contactForm.Method { contactForm.HandleRequest(r) if contactForm.IsSubmitted() && contactForm.IsValid() { contactForm.Bind(&contactValue) // For debugging var dump godump.Dumper dump.Theme = godump.Theme{} dumped = dump.Sprint(contactValue) } } render := theme.NewRenderer(themes[themeValue.Value]) tpl, _ := template.New("page"). Funcs(render.FuncMap()). Parse(pageTemplates[themeValue.Value]) tpl.Execute(w, map[string]any{ "ContactForm": contactForm, "ThemeSelectorForm": themeSelectorForm, "IsSent": dumped != nil, "Dump": dumped, }) } var pageTemplates = map[string]string{ "Html5": ` Form
{{ if .IsSent }}

OK!

{{ .Dump }}

{{ else }} {{ form .ThemeSelectorForm }}

Contact form

{{ form .ContactForm }} {{ end }}
`, "Bootstrap5": ` Form
{{ if .IsSent }}
OK!
{{ .Dump }}
{{ else }} {{ form .ThemeSelectorForm }}

Contact form

{{ form .ContactForm }} {{ end }}
`, } var themes = map[string]map[string]theme.RenderFunc{ "Html5": theme.Html5, "Bootstrap5": theme.Bootstrap5, }