From 1297fcf35d869c212ffa57e1fe6a27b77dda3dc5 Mon Sep 17 00:00:00 2001
From: efim
Date: Mon, 13 Nov 2023 05:25:02 +0000
Subject: [PATCH] refactor: common base template for pages
will allow to add common header and stuff
---
routes/base_page.go | 10 ++++++
routes/index_page.go | 16 ++++++---
routes/login_page.go | 30 +++++++++++-----
routes/room_page.go | 13 +++++--
routes/templates/base.gohtml | 36 +++++++++++++++++++
routes/templates/index.gohtml | 19 +++++-----
routes/templates/login.gohtml | 4 ++-
routes/templates/room.gohtml | 67 +++++++++++++++++++----------------
8 files changed, 140 insertions(+), 55 deletions(-)
create mode 100644 routes/base_page.go
create mode 100644 routes/templates/base.gohtml
diff --git a/routes/base_page.go b/routes/base_page.go
new file mode 100644
index 0000000..0b763fb
--- /dev/null
+++ b/routes/base_page.go
@@ -0,0 +1,10 @@
+package routes
+
+type baseData struct {
+ Title string
+}
+
+type pageData struct {
+ Base baseData
+ Content interface {}
+}
diff --git a/routes/index_page.go b/routes/index_page.go
index a3a4a6b..0698862 100644
--- a/routes/index_page.go
+++ b/routes/index_page.go
@@ -17,23 +17,31 @@ func indexPageRoute(
roomsM rooms.RoomManager,
) http.HandlerFunc {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ var baseFile = "templates/base.gohtml"
var templFile = "templates/index.gohtml"
session, found := getContextSession(r.Context())
if !found {
log.Printf("/ session not found, should be impossible")
// TODO return error i guess
}
- data := struct {
+ type MainData struct {
SessionStringToken string
SomeString string
SessionToken sessions.SessionData
- }{
+ }
+
+ data := pageData {
+ Base: baseData{
+ Title: "hello base template title",
+ },
+ Content: MainData{
fmt.Sprintf("%+v", session),
"hello!",
session,
+ },
}
- tmpl := template.Must(template.ParseFS(templateFs, templFile))
- err := tmpl.Execute(w, data)
+ tmpl := template.Must(template.ParseFS(templateFs, templFile, baseFile))
+ err := tmpl.ExecuteTemplate(w, "full-page", data)
if err != nil {
log.Printf("my error in executing template, huh\n %s", err)
}
diff --git a/routes/login_page.go b/routes/login_page.go
index 6ac7fae..3b2ff5f 100644
--- a/routes/login_page.go
+++ b/routes/login_page.go
@@ -13,6 +13,10 @@ import (
"sunshine.industries/some-automoderation/sessions"
)
+type MainData struct {
+ IsRoomExisting bool
+}
+
// function to register all http routes for servicing auth pages and logic
func registerLoginRoutes(
templateFs *embed.FS,
@@ -82,9 +86,19 @@ func authedPageMiddleware(
}
func renderLoginPage(w http.ResponseWriter) {
+ baseFile := "templates/base.gohtml"
templFile := "templates/login.gohtml"
- tmpl := template.Must(template.ParseFS(templateFs, templFile))
- err := tmpl.Execute(w, nil)
+ tmpl := template.Must(template.ParseFS(templateFs, templFile, baseFile))
+ data := pageData {
+ Base: baseData{
+ Title: "login",
+ },
+ Content: MainData{
+ IsRoomExisting: false,
+ },
+ }
+
+ err := tmpl.ExecuteTemplate(w, "full-page", data)
if err != nil {
log.Printf("my error in executing template, huh\n %s", err)
}
@@ -113,10 +127,10 @@ func createRoomHandler(templateFs *embed.FS,
PasswordHash: r.PostFormValue("personalPassword"), // TODO hash the password, not to store
}
newRoom := rooms.Room{
- Name: roomName,
- PasswordHash: r.PostFormValue("roomPassword"), // TODO hash the password, not to store
- AdminIds: []rooms.PersonId{person.Id},
- Paricipants: []rooms.PersonId{person.Id},
+ Name: roomName,
+ PasswordHash: r.PostFormValue("roomPassword"), // TODO hash the password, not to store
+ AdminIds: []rooms.PersonId{person.Id},
+ Paricipants: []rooms.PersonId{person.Id},
AllKnownPeople: []rooms.Person{person},
}
err = roomsM.Save(newRoom)
@@ -226,7 +240,7 @@ func joinRoomHandler(templateFs *embed.FS,
PasswordHash: personPass,
Id: rooms.RandomPersonId(),
}
- err := roomsM.Update(context.TODO(), room.Name, func(fromRoom rooms.Room) (toRoom rooms.Room) {
+ err := roomsM.Update(r.Context(), room.Name, func(fromRoom rooms.Room) (toRoom rooms.Room) {
log.Printf("/login/join about to modify room %+v", fromRoom)
toRoom = fromRoom
toRoom.AllKnownPeople = append(toRoom.AllKnownPeople, person)
@@ -245,7 +259,7 @@ func joinRoomHandler(templateFs *embed.FS,
// now we have room and person, can create a session
// and we've checked password
- err = roomsM.Update(context.TODO(), room.Name, func(fromRoom rooms.Room) (toRoom rooms.Room) {
+ err = roomsM.Update(r.Context(), room.Name, func(fromRoom rooms.Room) (toRoom rooms.Room) {
toRoom = fromRoom
toRoom.Paricipants = append(toRoom.Paricipants, person.Id)
return toRoom
diff --git a/routes/room_page.go b/routes/room_page.go
index 935c5c0..55fb1b9 100644
--- a/routes/room_page.go
+++ b/routes/room_page.go
@@ -196,7 +196,8 @@ func roomPageRoute(
fmt.Printf("all checks for room %s passed with %+v", roomName, session)
templFile := "templates/room.gohtml"
- tmpl := template.Must(template.ParseFS(templateFs, templFile))
+ baseFile := "templates/base.gohtml"
+ tmpl := template.Must(template.ParseFS(templateFs, templFile, baseFile))
type GestureData struct {
Name string
@@ -210,15 +211,21 @@ func roomPageRoute(
})
}
- pageData := struct {
+ contentData := struct {
Room rooms.Room
Gestures []GestureData
}{
Room: room,
Gestures: gesturesData,
}
+ data := pageData{
+ Base: baseData{
+ Title: "room-lala-from-base",
+ },
+ Content: contentData,
+ }
- err = tmpl.Execute(w, pageData)
+ err = tmpl.ExecuteTemplate(w, "full-page", data)
if err != nil {
log.Printf("/room/%s my error in executing template, huh\n %s", roomName, err)
}
diff --git a/routes/templates/base.gohtml b/routes/templates/base.gohtml
new file mode 100644
index 0000000..baa1a3f
--- /dev/null
+++ b/routes/templates/base.gohtml
@@ -0,0 +1,36 @@
+{{ define "full-page" }}
+
+
+
+
+
+ {{ .Base.Title }}
+
+
+
+
+
+
+
+
+
+
+ {{ template "main-content" .Content }}
+
+
+{{ end }}
diff --git a/routes/templates/index.gohtml b/routes/templates/index.gohtml
index 6419d11..6b91e8a 100644
--- a/routes/templates/index.gohtml
+++ b/routes/templates/index.gohtml
@@ -28,13 +28,16 @@
your experience.
-
- Hello
- This is index
- Your session is {{ .SessionStringToken }}
- Some string is {{ .SomeString }}
- You've logged into a room {{ .SessionToken.RoomId }}
+ {{ define "main-content" }}
+
+ Hello
+ This is index
+ Your session is {{ .SessionStringToken }}
+ Some string is {{ .SomeString }}
+ You've logged into a room {{ .SessionToken.RoomId }}
+
+ {{ end }}