librapi/templates/templates.go
2025-01-03 13:54:35 +01:00

111 lines
2.2 KiB
Go

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
})