package template import ( "html/template" "net/http" "os" "path/filepath" "sophuwu.site/myweb/config" ) type HTMLDataMap map[string]any func Data(title, desc string) HTMLDataMap { var data = make(HTMLDataMap) data["Title"] = title data["Description"] = desc return data } func (d *HTMLDataMap) Set(key string, value any) { (*d)[key] = value } func (d *HTMLDataMap) SetHTML(value string) { (*d)["Content"] = value } func (d *HTMLDataMap) SetIfEmpty(key string, value any) { if _, ok := (*d)[key]; !ok { (*d)[key] = value } } var templates *template.Template var fillFunc func(w http.ResponseWriter, name string, data HTMLDataMap) error var templatesDir string func parseTemplates() error { index := template.New("index") index.Parse(filepath.Join(templatesDir, "index.html")) index.Option() tmp, err := template.ParseGlob(templatesDir) if err != nil { return err } templates = tmp return nil } func Init(path string) error { templatesDir = path if os.Getenv("DEBUG") == "1" { fillFunc = func(w http.ResponseWriter, name string, data HTMLDataMap) error { err := parseTemplates() if err != nil { return err } return templates.ExecuteTemplate(w, name, data) } } else { fillFunc = func(w http.ResponseWriter, name string, data HTMLDataMap) error { return templates.ExecuteTemplate(w, name, data) } } return parseTemplates() } func Use(w http.ResponseWriter, r *http.Request, name string, data HTMLDataMap) error { data.SetIfEmpty("Url", config.URL+r.URL.Path) data.SetIfEmpty("Email", config.Email) data.SetIfEmpty("Name", config.Name) if data["Content"] != nil { data["HTML"] = template.HTML(data["Content"].(string)) } return fillFunc(w, name, data) }