From 7d7059d53891bc1abb284d9b288505a5d406b307 Mon Sep 17 00:00:00 2001 From: Alexander Kavon Date: Tue, 28 Nov 2023 00:45:37 -0500 Subject: build ui and render templates, build routes --- src/server/ui.go | 46 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 6 deletions(-) (limited to 'src/server/ui.go') 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) + } } -- cgit v1.2.3