Files
fnx_web/webcontroller/templates.go
Wim Brand 58db683fc8 Graphical overhaul.
Remove all legacy pixeldrain pages, handlers and assets.
Remove old theming engine.
Make logo responsive to the accent colour.
Lots of other stuff.
2026-10-01 02:06:00 +02:00

62 lines
1.7 KiB
Go

package webcontroller
import (
"encoding/json"
"html/template"
"net/http"
"time"
"fornaxian.tech/log"
"fornaxian.tech/util"
)
// TemplateData is the data for the page template, res/template/wrap.html
type TemplateData struct {
APIEndpoint template.URL
Hostname template.HTML
CacheID int64
// Describe the site by default, or the file on a filesystem page
Title string
OGData ogData
// Embedded in the page as window.user and window.initial_node, so the JS
// doesn't have to request them. Left empty when they were not requested
User json.RawMessage
Node json.RawMessage
}
// The cache ID is used to invalidate caches when the webserver is restarted.
// It's rounded to a full hour to prevent cached from being emptied too often if
// the server is regularly restarted
var cacheID = time.Now().Unix() / 3600
func (wc *WebController) newTemplateData(r *http.Request) *TemplateData {
return &TemplateData{
APIEndpoint: template.URL(wc.config.APIURLExternal),
Hostname: template.HTML(wc.hostname),
CacheID: cacheID,
Title: "Nova.storage",
OGData: siteOGData(r),
}
}
func (wc *WebController) parseTemplate() *template.Template {
return template.Must(template.ParseFiles(wc.config.ResourceDir + "/template/wrap.html"))
}
// renderPage writes the page which loads the Svelte app. In debug mode the
// template is parsed on every request, so changes show up without a restart
func (wc *WebController) renderPage(w http.ResponseWriter, r *http.Request, td *TemplateData) {
var tpl = wc.tpl
if wc.config.DebugMode {
tpl = wc.parseTemplate()
}
if r.Method == "HEAD" {
return
}
if err := tpl.Execute(w, td); err != nil && !util.IsNetError(err) {
log.Error("Error executing page template: %s", err)
}
}