package server import ( "html/template" "log" "net/http" "path/filepath" "strings" "gitlab.com/alexkavon/newsstand/src/conf" ) type Ui struct { pages map[string]*template.Template } func NewUi(config *conf.Conf) Ui { return Ui{} } func (ui *Ui) CompilePages(uipath string) { ui.pages = map[string]*template.Template{} baseTmpl, err := template.ParseGlob(filepath.Join(uipath, "templates/*.tmpl.html")) if err != nil { log.Fatal(err) } ui.pages["core/messages"] = baseTmpl pagesDir := filepath.Join(uipath, "pages") tmplGlob := filepath.Join(pagesDir, "**/*.tmpl.html") fileglob, err := filepath.Glob(tmplGlob) if err != nil { log.Fatal(err) } for _, file := range fileglob { f := strings.TrimSuffix(file, ".tmpl.html") tmplName, err := filepath.Rel(pagesDir, f) if err != nil { log.Fatal(err) } skeleton, err := baseTmpl.Clone() if err != nil { log.Fatal(err) } ui.pages[tmplName] = template.Must(skeleton.ParseFiles(file)) log.Println(ui.pages[tmplName].DefinedTemplates()) } } func (ui *Ui) Render(w http.ResponseWriter, pageName string, data interface{}) { templateName := "base" if pageName == "core/messages" { templateName = "messages" } p := ui.pages[pageName] err := p.ExecuteTemplate(w, templateName, data) if err != nil { log.Fatal(err) } }