package tpl import ( "bytes" "html/template" "path/filepath" "strings" "git.clearsky.net.au/cody/gex.git/srv" "git.clearsky.net.au/cody/gex.git/utils" ) type Props map[string]any type Funcs = template.FuncMap func include(req *srv.Req, props Props, funcs Funcs) {} var Include = include func Render(fp string, req *srv.Req, propFunc ...interface{}) string { if !strings.Contains(fp, "app/") { fp = utils.Cwd(2) + "/" + fp } fp = strings.Replace(fp, ".tpl", ".gen.tpl", 1) var props = Props{} var funcs = Funcs{} if len(propFunc) > 0 { props = propFunc[0].(Props) } if len(propFunc) > 1 { funcs = propFunc[1].(Funcs) } Include(req, props, funcs) tmpl, err := template. New(filepath.Base(fp)). Funcs(funcs). ParseFiles(fp) if err != nil { return err.Error() } var buf bytes.Buffer err = tmpl.Execute(&buf, props) if err != nil { return err.Error() } html := buf.String() return html }