aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Kavon <hawk@alexkavon.com>2023-12-01 00:45:31 -0500
committerAlexander Kavon <hawk@alexkavon.com>2023-12-01 00:45:31 -0500
commitbc47e526e962c1c5bce850de312c6e5fbaf16458 (patch)
treec3a832edf869e75e3fd87494939a34a846778431
parent17af6e1a5017285b680a7d0a1dace1e1a1612ab9 (diff)
settled on map[string]interface{} for passing data to view, automatically append session struct, fixed nil session checks, updated templates to use map variable names
-rw-r--r--src/server/ui.go19
-rw-r--r--src/user/routes.go14
-rw-r--r--ui/pages/user/me.tmpl.html6
-rw-r--r--ui/templates/messages.tmpl.html4
4 files changed, 25 insertions, 18 deletions
diff --git a/src/server/ui.go b/src/server/ui.go
index 7d59168..baea769 100644
--- a/src/server/ui.go
+++ b/src/server/ui.go
@@ -8,6 +8,7 @@ import (
"strings"
"gitlab.com/alexkavon/newsstand/src/conf"
+ "gitlab.com/alexkavon/newsstand/src/sessions"
)
type Ui struct {
@@ -47,7 +48,7 @@ func (ui *Ui) CompilePages(uipath string) {
}
}
-func (ui *Ui) Render(w http.ResponseWriter, pageName string, data interface{}) {
+func (ui *Ui) Render(w http.ResponseWriter, r *http.Request, pageName string, data map[string]any) {
templateName := "base"
// if the pageName has more than 1 `/` then it specifies the name of a template to target
slashCount := strings.Count(pageName, "/")
@@ -55,14 +56,20 @@ func (ui *Ui) Render(w http.ResponseWriter, pageName string, data interface{}) {
splitName := strings.Split(pageName, "/")
templateName = splitName[0]
}
-
- ui.RenderTemplate(w, pageName, templateName, data)
+ ui.RenderTemplate(w, r, pageName, templateName, data)
}
-func (ui *Ui) RenderTemplate(w http.ResponseWriter, pageName, templateName string, data interface{}) {
+func (ui *Ui) RenderTemplate(w http.ResponseWriter, r *http.Request, pageName, templateName string, data map[string]any) {
+ d := map[string]any{}
+ for k, v := range data {
+ d[k] = v
+ }
+ if session := r.Context().Value(sessions.SessionCtxKey("session")); session != nil {
+ d["session"] = session.(*sessions.Session)
+ }
p := ui.pages[pageName]
- err := p.ExecuteTemplate(w, templateName, data)
+ err := p.ExecuteTemplate(w, templateName, d)
if err != nil {
- log.Fatal(err)
+ log.Println(err)
}
}
diff --git a/src/user/routes.go b/src/user/routes.go
index 3bcab06..d8c8d43 100644
--- a/src/user/routes.go
+++ b/src/user/routes.go
@@ -56,7 +56,7 @@ var Routes = server.Routes{
func Create(s *server.Server) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
- s.Ui.Render(w, "user/create", nil)
+ s.Ui.Render(w, r, "user/create", nil)
}
}
@@ -98,7 +98,7 @@ func Store(s *server.Server) http.HandlerFunc {
func LoginForm(s *server.Server) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
- s.Ui.Render(w, "user/login", nil)
+ s.Ui.Render(w, r, "user/login", nil)
}
}
@@ -113,16 +113,16 @@ func Login(s *server.Server) http.HandlerFunc {
func Logout(s *server.Server) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
- session := r.Context().Value("session").(*sessions.Session)
- session.Destroy(w)
+ if session := r.Context().Value(sessions.SessionCtxKey("session")); session != nil {
+ session.(*sessions.Session).Destroy(w)
+ }
http.Redirect(w, r, "/u/auth", http.StatusSeeOther)
}
}
func Show(s *server.Server) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
- session := r.Context().Value(sessions.SessionCtxKey("session")).(*sessions.Session)
- username := session.Get("username").(string)
- s.Ui.Render(w, "user/me", &struct{ Message, Username string }{"Congrats on getting this far!", username})
+ pageData := map[string]any{"message": "Congrats on getting this far!"}
+ s.Ui.Render(w, r, "user/me", pageData)
}
}
diff --git a/ui/pages/user/me.tmpl.html b/ui/pages/user/me.tmpl.html
index 3f3950c..be66beb 100644
--- a/ui/pages/user/me.tmpl.html
+++ b/ui/pages/user/me.tmpl.html
@@ -1,5 +1,5 @@
-{{ define "title"}}Profile{{end}}
+{{define "title"}}Profile{{end}}
-{{ define "main"}}
-<h1>Welcome, {{.Username}}</h1>
+{{define "main"}}
+<h1>Welcome, {{ .session.Get "username" }}</h1>
{{end}}
diff --git a/ui/templates/messages.tmpl.html b/ui/templates/messages.tmpl.html
index b9d327f..dd5bfb1 100644
--- a/ui/templates/messages.tmpl.html
+++ b/ui/templates/messages.tmpl.html
@@ -1,8 +1,8 @@
{{define "messages"}}
<div id="messages">
- {{ if .Message }}
+ {{ if .message }}
<div class="c-alert c-alert--info" role="alert">
- {{.Message}}
+ {{ .message }}
</div>
{{ end }}
</div>