From e4c56506bee3d771d612450056116e4699839816 Mon Sep 17 00:00:00 2001 From: efim Date: Sun, 19 Nov 2023 05:41:03 +0000 Subject: [PATCH] refactor: data structs for template + method enclosing rooms.Room into roomTableData, with methods to be used in tempalte to get other template related derived data structures --- routes/room_page.go | 23 +++++++------- routes/room_page_templates_preview.go | 43 ++++++++++++-------------- routes/templates/tableTemplates.gohtml | 6 ++-- 3 files changed, 35 insertions(+), 37 deletions(-) diff --git a/routes/room_page.go b/routes/room_page.go index 155d3be..9992f07 100644 --- a/routes/room_page.go +++ b/routes/room_page.go @@ -72,10 +72,7 @@ func streamingRoomStates( templFile := "templates/room.gohtml" tableTemplates := "templates/tableTemplates.gohtml" tmpl := template.Must( - template.New("").Funcs(template.FuncMap{ - "bricksForPerson": bricksForPerson, - "personsFromRoom": personsFromRoom, - }).ParseFS(templateFs, tableTemplates, templFile)) + template.New("").ParseFS(templateFs, tableTemplates, templFile)) roomStream := roomsM.Subscribe(r.Context(), roomName) for room := range roomStream { @@ -84,7 +81,11 @@ func streamingRoomStates( var buffer bytes.Buffer - err := tmpl.ExecuteTemplate(&buffer, "simpleRoomShow", room) + roomTemplateData := roomTableData{ + Room: &room, + currentPerson: session.PersonId, + } + err := tmpl.ExecuteTemplate(&buffer, "simpleRoomShow", &roomTemplateData) if err != nil { log.Printf("/rooms/subscribe/%s got error on template %s", roomName, err) } @@ -197,10 +198,7 @@ func roomPageRoute( baseFile := "templates/base.gohtml" tableTemplates := "templates/tableTemplates.gohtml" tmpl := template.Must( - template.New("").Funcs(template.FuncMap{ - "bricksForPerson": bricksForPerson, - "personsFromRoom": personsFromRoom, - }).ParseFS(templateFs, tableTemplates, templFile, baseFile)) + template.New("").ParseFS(templateFs, tableTemplates, templFile, baseFile)) type GestureData struct { Name string @@ -215,10 +213,13 @@ func roomPageRoute( } contentData := struct { - Room rooms.Room + Room *roomTableData Gestures []GestureData }{ - Room: room, + Room: &roomTableData{ + Room: &room, + currentPerson: session.PersonId, + }, Gestures: gesturesData, } data := pageData{ diff --git a/routes/room_page_templates_preview.go b/routes/room_page_templates_preview.go index 8e7b1e1..8df202c 100644 --- a/routes/room_page_templates_preview.go +++ b/routes/room_page_templates_preview.go @@ -33,32 +33,29 @@ var brickColors = map[rooms.HandGesture]template.CSS{ rooms.ChangeTopic: "--change-topic-color", } +// data to be passed to "roomPeople" template type roomTableData struct { - Persons []personData - Total int - Tangens float64 + *rooms.Room + currentPerson rooms.PersonId } -func personsFromRoom(room rooms.Room) roomTableData { - // TODO start from the 'logged in person' - total := len(room.Paricipants) - persons := make([]personData, 0, total) - tangens := math.Tan(math.Pi / float64(total)) // Math.tan(Math.PI/m); - // tangens = math.Round(tangens*100) / 100 +func (room *roomTableData)Persons() []personData { + persons := make([]personData, 0, room.Total()) for i, pId := range room.Paricipants { personData := personDataFromRoom(room, pId) personData.Index = i - // personData.Tan = math.Round(tangens*100)/100 persons = append(persons, personData) } - return roomTableData{ - Persons: persons, - Total: total, - Tangens: tangens, - } + return persons +} +func (r *roomTableData)Total() int { + return len(r.Paricipants) +} +func (r *roomTableData)Tangens() float64 { + return math.Tan(math.Pi / float64(r.Total())) // Math.tan(Math.PI/m); } -func personDataFromRoom(room rooms.Room, pId rooms.PersonId) personData { +func personDataFromRoom(room *roomTableData, pId rooms.PersonId) personData { person, exists := room.AllKnownPeople[pId] if !exists || !slices.Contains(room.Paricipants, pId) { return personData{} @@ -85,7 +82,7 @@ func personDataFromRoom(room rooms.Room, pId rooms.PersonId) personData { } } -func bricksForPerson(pData personData) []brickState { +func (pData personData)BricksForPerson() []brickState { var result = make([]brickState, 5) for gesture := rooms.ChangeTopic; gesture <= rooms.Meta; gesture++ { // for index := rooms.Meta; index >= rooms.ChangeTopic; index-- { @@ -168,7 +165,7 @@ func roomTemplatesPreview( Bricks []SingleBrickData ABrick brickState TestPerson personData - ARoom rooms.Room + ARoom *roomTableData }{ DefaultColor: "--expand-color", ABrick: brickState{ @@ -198,7 +195,10 @@ func roomTemplatesPreview( }, }, TestPerson: testPersonData, - ARoom: aRoom, + ARoom: &roomTableData{ + Room: &aRoom, + currentPerson: aRoom.Paricipants[0], + }, } pageData := pageData{ @@ -207,10 +207,7 @@ func roomTemplatesPreview( } baseFile := "templates/base.gohtml" - tmpl := template.Must(template.New("").Funcs(template.FuncMap{ - "bricksForPerson": bricksForPerson, - "personsFromRoom": personsFromRoom, - }).ParseFS(templateFs, baseFile, + tmpl := template.Must(template.New("").ParseFS(templateFs, baseFile, "templates/tableTemplates.gohtml", "templates/tableTemplatesPreview.gohtml", )) diff --git a/routes/templates/tableTemplates.gohtml b/routes/templates/tableTemplates.gohtml index 0c3363d..03a3ab5 100644 --- a/routes/templates/tableTemplates.gohtml +++ b/routes/templates/tableTemplates.gohtml @@ -65,13 +65,14 @@ {{end}}

Now for a person

+

expected to be called with personData

{{ define "personBlocks" }}
- {{ range (bricksForPerson .) }} + {{ range .BricksForPerson }} {{ template "brick" . }} {{ end }}

{{ .Name }}

@@ -81,8 +82,8 @@

And now i'll want to get all persons for a room

+

expected be called with room *roomTableData

{{ define "roomPeople" }} - {{ with (personsFromRoom .)}}
- {{ end }} {{end}}