diff options
| author | Alexander Kavon <hawk@alexkavon.com> | 2023-11-28 00:45:37 -0500 |
|---|---|---|
| committer | Alexander Kavon <hawk@alexkavon.com> | 2023-11-28 00:45:37 -0500 |
| commit | 7d7059d53891bc1abb284d9b288505a5d406b307 (patch) | |
| tree | f3ae7435a0a67ce1e5c939966738fea01bb9644e /src/server | |
| parent | d7d2b376405d91a201b8b830160458c5dd6df4a9 (diff) | |
build ui and render templates, build routes
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/router.go | 12 | ||||
| -rw-r--r-- | src/server/server.go | 16 | ||||
| -rw-r--r-- | src/server/ui.go | 46 |
3 files changed, 60 insertions, 14 deletions
diff --git a/src/server/router.go b/src/server/router.go index 248a1d3..c8ca0fa 100644 --- a/src/server/router.go +++ b/src/server/router.go @@ -11,11 +11,13 @@ import ( type HandlerFunc func(s *Server) http.HandlerFunc type Route struct { - Name string - Method string - Pattern string - AuthRequired bool - HandlerFunc HandlerFunc + Name string + Method string + Path string + AuthRequired bool + HandlerFunc HandlerFunc + UiPageName string + UiTemplateName string } type Routes []Route diff --git a/src/server/server.go b/src/server/server.go index 495b140..9ba6104 100644 --- a/src/server/server.go +++ b/src/server/server.go @@ -15,12 +15,22 @@ type Server struct { Ui Ui } -func NewServer(config *conf.Conf, router *chi.Mux, db *sql.DB) *Server { +func NewServer(config *conf.Conf, db *sql.DB) *Server { return &Server{ - Router: router, + Router: NewRouter(config), Db: db, Config: config, - Ui: buildPages("my/path", "my/other/path"), + Ui: NewUi(config), + } +} + +func (s *Server) BuildUi() { + s.Ui.CompilePages(s.Config.Server.UiPath) +} + +func (s *Server) RegisterRoutes(routes Routes) { + for _, r := range routes { + s.Router.Method(r.Method, r.Path, r.HandlerFunc(s)) } } 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) + } } |
