diff options
| author | Alexander Kavon <hawk@alexkavon.com> | 2023-12-01 00:45:31 -0500 |
|---|---|---|
| committer | Alexander Kavon <hawk@alexkavon.com> | 2023-12-01 00:45:31 -0500 |
| commit | bc47e526e962c1c5bce850de312c6e5fbaf16458 (patch) | |
| tree | c3a832edf869e75e3fd87494939a34a846778431 | |
| parent | 17af6e1a5017285b680a7d0a1dace1e1a1612ab9 (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.go | 19 | ||||
| -rw-r--r-- | src/user/routes.go | 14 | ||||
| -rw-r--r-- | ui/pages/user/me.tmpl.html | 6 | ||||
| -rw-r--r-- | ui/templates/messages.tmpl.html | 4 |
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> |
