diff options
Diffstat (limited to 'src/server/ui.go')
| -rw-r--r-- | src/server/ui.go | 46 |
1 files changed, 40 insertions, 6 deletions
diff --git a/src/server/ui.go b/src/server/ui.go index f0b73ad..ce0ef01 100644 --- a/src/server/ui.go +++ b/src/server/ui.go @@ -2,20 +2,54 @@ 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 buildPages(paths ...string) Ui { - // walk template files with template.ParseFS (?) - +func NewUi(config *conf.Conf) Ui { return Ui{} } -func (ui *Ui) RenderPage(page string, w http.ResponseWriter) { - p := ui.pages[page] - p.ExecuteTemplate(w, "base", nil) +func (ui *Ui) CompilePages(uipath string) { + ui.pages = map[string]*template.Template{} + baseTmpl, err := template.ParseFiles(filepath.Join(uipath, "templates/base.tmpl.html")) + if err != nil { + log.Fatal(err) + } + pagesDir := filepath.Join(uipath, "pages") + tmplGlob := "**/*.tmpl.html" + + fileglob, err := filepath.Glob(filepath.Join(pagesDir, 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{}) { + p := ui.pages[pageName] + err := p.ExecuteTemplate(w, "base", data) + if err != nil { + log.Fatal(err) + } } |
