some-automoderation/routes/room_page_templates_preview.go

131 lines
2.9 KiB
Go

package routes
import (
"embed"
"html/template"
"log"
"net/http"
"slices"
"sunshine.industries/some-automoderation/rooms"
)
type brickState struct {
ColorClass template.CSS
TemplateType string
}
type personData struct {
Name string
IsSpeaker bool
IsMark bool
IsRaised bool
Raised rooms.HandGesture
Mark rooms.HandGesture
}
var brickColors = map[rooms.HandGesture]template.CSS{
rooms.Meta: "--meta-color",
rooms.ClarifyingQ: "--clarifying-q-color",
rooms.Expand: "--expand-color",
rooms.ProbingQ: "--probing-q-color",
rooms.ChangeTopic: "--change-topic-color",
}
func bricksForPerson(pData personData) []brickState {
var result = make([]brickState, 5)
for gesture := rooms.ChangeTopic; gesture <= rooms.Meta; gesture++ {
// for index := rooms.Meta; index >= rooms.ChangeTopic; index-- {
// log.Printf(">>>>> iteraging for %d", gesture)
// this results in iteration 4,3,2,1,0,255 wow
templateType := "inactiveBrick"
switch {
case pData.IsMark && gesture == pData.Mark:
templateType = "markBrick"
case pData.IsSpeaker && gesture == pData.Raised:
templateType = "speakerBrick"
case pData.IsRaised && gesture == pData.Raised:
templateType = "raisedBrick"
}
result[gesture] = brickState{
ColorClass: brickColors[gesture],
TemplateType: templateType,
}
}
slices.Reverse(result)
return result
}
func roomTemplatesPreview(
templateFs *embed.FS,
) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
type SingleBrickData struct {
ColorClass template.CSS
Name string
}
testPersonData := personData{
Name: "John Doe",
IsRaised: true,
Raised: rooms.Expand,
IsMark: true,
Mark: rooms.ProbingQ,
}
contentData := struct {
DefaultColor template.CSS
Bricks []SingleBrickData
ABrick brickState
TestPerson personData
}{
DefaultColor: "--expand-color",
ABrick: brickState{
ColorClass: "--expand-color",
TemplateType: "raisedBrick",
},
Bricks: []SingleBrickData{
{
Name: "expand",
ColorClass: brickColors[rooms.Expand],
},
{
Name: "probing question",
ColorClass: brickColors[rooms.ProbingQ],
},
{
Name: "change topic",
ColorClass: brickColors[rooms.ChangeTopic],
},
{
Name: "clarifying question",
ColorClass: brickColors[rooms.ClarifyingQ],
},
{
Name: "meta",
ColorClass: brickColors[rooms.Meta],
},
},
TestPerson: testPersonData,
}
pageData := pageData{
Header: headerData{Title: "look at the room templates"},
Content: contentData,
}
baseFile := "templates/base.gohtml"
tmpl := template.Must(template.New("").Funcs(template.FuncMap{
"bricksForPerson": bricksForPerson,
}).ParseFS(templateFs, baseFile, "templates/tableTemplates.gohtml"))
err := tmpl.ExecuteTemplate(w, "full-page", pageData)
if err != nil {
log.Printf("yoyo, error %s", err)
}
}
}