aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server')
-rw-r--r--src/server/router.go12
-rw-r--r--src/server/server.go16
-rw-r--r--src/server/ui.go46
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)
+ }
}