package templates import ( _ "embed" "html/template" "mime/multipart" "os" "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 GetHome = sync.OnceValue[*template.Template](func() *template.Template { baseTmpl, err := template.New("base").Parse(base) if err != nil { log.Err(err).Msg("unable to parse base tmpl") os.Exit(1) } if _, err := baseTmpl.New("home").Parse(home); err != nil { log.Err(err).Msg("unable to parse home tmpl") os.Exit(1) } return baseTmpl }) var GetUploadForm = sync.OnceValue[*template.Template](func() *template.Template { baseTmpl, err := template.New("base").Parse(base) if err != nil { log.Err(err).Msg("unable to parse base tmpl") os.Exit(1) } if _, err := baseTmpl.New("uploadForm").Funcs(funcMap).Parse(uploadForm); err != nil { log.Err(err).Msg("unable to parse upload tmpl") os.Exit(1) } return baseTmpl }) var GetLoginForm = sync.OnceValue[*template.Template](func() *template.Template { baseTmpl, err := template.New("base").Parse(base) if err != nil { log.Err(err).Msg("unable to parse base tmpl") os.Exit(1) } if _, err := baseTmpl.New("loginForm").Funcs(funcMap).Parse(loginForm); err != nil { log.Err(err).Msg("unable to parse login tmpl") os.Exit(1) } return baseTmpl }) var GetLoginSuccess = sync.OnceValue[*template.Template](func() *template.Template { tmpl, err := template.New("loginSuccess").Parse(loginSuccess) if err != nil { log.Err(err).Msg("unable to parse login success") os.Exit(1) } return tmpl })