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 }} diff --git a/routes/templates/login.gohtml b/routes/templates/login.gohtml index 209e2fe..939ce87 100644 --- a/routes/templates/login.gohtml +++ b/routes/templates/login.gohtml @@ -3,7 +3,7 @@ - Untitled!!! + Should be set in base template + {{ end }} diff --git a/routes/templates/room.gohtml b/routes/templates/room.gohtml index 4c03452..cdd08f2 100644 --- a/routes/templates/room.gohtml +++ b/routes/templates/room.gohtml @@ -3,7 +3,7 @@ - Room {{ .Room.Name }} : Some Automoderation + Should be set in base template @@ -21,7 +21,7 @@ - + -
- -
- {{ block "simpleRoomShow" .Room }} - - -
{{ . }}
- {{ end }} -
-
-

Room name is "{{ .Room.Name }}"

- {{ range .Gestures }} - - {{ end }} - + {{ block "simpleRoomShow" .Room }} + + +
{{ . }}
+ {{ end }} +
+
+

Room name is "{{ .Room.Name }}"

+ {{ range .Gestures }} + + {{ end }} + +
- + + {{ end }}