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)
}
}