Migration This is my new public git source viewer. Source coming soon. Please contact with concerns/bugs. Contact me

internal/core/templates.go

caching_trials · 949 B · 39 lines raw

1 package core
2
3 import (
4 "fmt"
5 "html/template"
6 "io/fs"
7 "path"
8 )
9
10 // LoadTemplates parses each views/*.html into its own tree alongside every
11 // layouts/*.html. Returns a set keyed by view filename.
12 //
13 // Placeholder funcs are installed at parse time; the real ones are bound
14 // per render, when a Ctx exists to close over.
15 func LoadTemplates(fsys fs.FS) (TemplateSet, error) {
16 layouts, err := fs.Glob(fsys, "layouts/*.html")
17 if err != nil {
18 return nil, err
19 }
20 views, err := fs.Glob(fsys, "views/*.html")
21 if err != nil {
22 return nil, err
23 }
24 if len(views) == 0 {
25 return nil, fmt.Errorf("no templates under views/")
26 }
27
28 set := TemplateSet{}
29 for _, v := range views {
30 name := path.Base(v)
31 t := template.New(name).Funcs(FuncMap(&Ctx{}))
32 files := append(append([]string{}, layouts...), v)
33 if t, err = t.ParseFS(fsys, files...); err != nil {
34 return nil, fmt.Errorf("parse %s: %w", v, err)
35 }
36 set[name] = t
37 }
38 return set, nil
39 }