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
}