64 lines
1.1 KiB
Go
64 lines
1.1 KiB
Go
package app
|
|
|
|
import (
|
|
"html/template"
|
|
"net/http"
|
|
"path"
|
|
"strings"
|
|
)
|
|
|
|
type Renderer struct {
|
|
basePath string
|
|
tpls *template.Template
|
|
}
|
|
|
|
func NewRenderer(basePath string) *Renderer {
|
|
funcs := template.FuncMap{
|
|
"abs": func(p string) string {
|
|
if basePath == "" {
|
|
return p
|
|
}
|
|
if !strings.HasPrefix(p, "/") {
|
|
p = "/" + p
|
|
}
|
|
return basePath + p
|
|
},
|
|
"join": path.Join,
|
|
}
|
|
t := template.New("base").Funcs(funcs)
|
|
t = template.Must(t.ParseFS(tfs(),
|
|
"layout.html",
|
|
"login.html",
|
|
"users.html",
|
|
"user.html",
|
|
"access.html",
|
|
"tokens.html",
|
|
"admins.html",
|
|
"audit.html",
|
|
"error.html",
|
|
))
|
|
return &Renderer{basePath: basePath, tpls: t}
|
|
}
|
|
|
|
type PageData struct {
|
|
Title string
|
|
Admin string
|
|
Role string
|
|
CSRF string
|
|
Flash string
|
|
Error string
|
|
|
|
Users any
|
|
User any
|
|
Tokens any
|
|
Admins any
|
|
Audit any
|
|
Access any
|
|
Next string
|
|
}
|
|
|
|
func (r *Renderer) Render(w http.ResponseWriter, name string, data PageData) {
|
|
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
|
_ = r.tpls.ExecuteTemplate(w, name, data)
|
|
}
|