package utils import ( "encoding/json" "html/template" "io/fs" "io/ioutil" "path" ) type TemplateMap map[string]*template.Template func Json(data interface{}) template.JS { d, err := json.Marshal(data) if err != nil { return "" } return template.JS(d) } func ToRunes(s string) (r []string) { for _, c := range []rune(s) { r = append(r, string(c)) } return r } func LoadTemplates(templateFs fs.FS, funcs template.FuncMap) (TemplateMap, error) { tpls := template.New("").Funcs(funcs) templates := make(map[string]*template.Template) files, err := fs.ReadDir(templateFs, ".") if err != nil { return nil, err } for _, file := range files { tplName := file.Name() if file.IsDir() || path.Ext(tplName) != ".html" { continue } templateFile, err := templateFs.Open(tplName) if err != nil { return nil, err } templateData, err := ioutil.ReadAll(templateFile) if err != nil { return nil, err } templateFile.Close() tpl, err := tpls.New(tplName).Parse(string(templateData)) if err != nil { return nil, err } templates[tplName] = tpl } return templates, nil }