package templates import ( _ "embed" "html/template" "mime/multipart" "strconv" "strings" "sync" "github.com/rs/zerolog/log" ) //go:embed base.html.tpl var base string //go:embed login/login_form.html.tpl var loginForm string //go:embed login/login_success.html.tpl var loginSuccess string //go:embed upload_form.html.tpl var uploadForm string //go:embed home.html.tpl var home string var funcMap = template.FuncMap{ "year": func(s int) string { if s == 0 { return "" } return strconv.Itoa(s) }, "join": func(s []string) string { if len(s) == 0 { return "" } else { return strings.Join(s, ",") } }, "filename": func(h *multipart.FileHeader) string { if h != nil { return h.Filename } return "" }, "errStr": func(err error) string { if err != nil { return err.Error() } return "" }, } var homeTmpl = sync.OnceValue[*template.Template](func() *template.Template { baseTmpl, err := template.New("base").Parse(base) if err != nil { log.Fatal().Err(err).Msg("unable to parse base tmpl") } if _, err := baseTmpl.New("home").Parse(home); err != nil { log.Fatal().Err(err).Msg("unable to parse home tmpl") } return baseTmpl })() var uploadFormTmpl = sync.OnceValue[*template.Template](func() *template.Template { baseTmpl, err := template.New("base").Parse(base) if err != nil { log.Fatal().Err(err).Msg("unable to parse base tmpl") } if _, err := baseTmpl.New("uploadForm").Funcs(funcMap).Parse(uploadForm); err != nil { log.Fatal().Err(err).Msg("unable to parse upload tmpl") } return baseTmpl })() var loginFormTmpl = sync.OnceValue[*template.Template](func() *template.Template { baseTmpl, err := template.New("base").Parse(base) if err != nil { log.Fatal().Err(err).Msg("unable to parse base tmpl") } if _, err := baseTmpl.New("loginForm").Funcs(funcMap).Parse(loginForm); err != nil { log.Fatal().Err(err).Msg("unable to parse login tmpl") } return baseTmpl })() var loginSuccessTmpl = sync.OnceValue[*template.Template](func() *template.Template { baseTmpl, err := template.New("base").Parse(base) if err != nil { log.Fatal().Err(err).Msg("unable to parse base tmpl") } if _, err := baseTmpl.New("loginSuccess").Funcs(funcMap).Parse(loginSuccess); err != nil { log.Fatal().Err(err).Msg("unable to parse login success tmpl") } return baseTmpl })() func GetHome() *template.Template { return homeTmpl } func GetLoginForm() *template.Template { return loginFormTmpl } func GetLoginSuccess() *template.Template { return loginSuccessTmpl } func GetUploadForm() *template.Template { return uploadFormTmpl }