diff options
Diffstat (limited to 'src/templates.go')
-rw-r--r-- | src/templates.go | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/templates.go b/src/templates.go index 94d1acb..e3a0465 100644 --- a/src/templates.go +++ b/src/templates.go @@ -1,6 +1,7 @@ package app import ( + "bytes" "html/template" "io/fs" "log" @@ -75,10 +76,9 @@ func buildTemplate(dir fs.FS, name string) *template.Template { for i, s := range names { names[i] = s + ".html.tmpl" } - return template.Must(template. - New("-base.html.tmpl"). - Funcs(funcmap). - ParseFS(dir, names[:]...)) + t := template.New("-base.html.tmpl").Funcs(funcmap) + t = t.Funcs(includeIfExists(t)) + return template.Must(t.ParseFS(dir, names[:]...)) } func asHTML(s string) template.HTML { @@ -106,6 +106,20 @@ func templateMakeMap(args ...any) map[string]any { return m } +func includeIfExists(tmpl *template.Template) template.FuncMap { + return template.FuncMap{ + "includeIfExists": func(name string, data any) (template.HTML, error) { + t := tmpl.Lookup(name) + if t == nil { + return "", nil + } + var buf bytes.Buffer + err := t.Execute(&buf, data) + return template.HTML(buf.String()), err + }, + } +} + func (td templateData) Get(fmt string, args ...map[string]any) template.HTML { return template.HTML(td.Printer.Get(fmt, args...)) } |