smon/page.go
2024-07-05 14:52:02 +02:00

64 lines
1.0 KiB
Go

package main
import (
// External
werr "git.gibonuddevalla.se/go/wrappederror"
// Standard
"fmt"
"net/http"
"unicode"
"unicode/utf8"
)
type Page struct {
LAYOUT string
PAGE string
MENU string
CONFIG map[string]string
Label string
Icon string
Data any
}
func (p *Page) Render(w http.ResponseWriter, r *http.Request) {
tmpl, err := getPage(p.LAYOUT, p.PAGE)
if err != nil {
httpError(w, werr.Wrap(err).Log())
return
}
if p.Icon == "" {
p.Icon = p.PAGE
}
if p.Label == "" {
r, _ := utf8.DecodeRuneInString(p.PAGE)
titled := unicode.ToTitle(r)
p.Label = fmt.Sprintf("%s%s", string(titled), p.PAGE[1:len(p.PAGE)])
}
if p.MENU == "" {
p.MENU = p.PAGE
}
data := map[string]any{
"VERSION": VERSION,
"LAYOUT": p.LAYOUT,
"PAGE": p.PAGE,
"MENU": p.MENU,
"CONFIG": smonConfig.Settings,
"ERROR": r.URL.Query().Get("_err"),
"Label": p.Label,
"Icon": p.Icon,
"Data": p.Data,
}
err = tmpl.Execute(w, data)
if err != nil {
httpError(w, werr.Wrap(err).Log())
}
}