diff --git a/internal/web/templates/layout.html b/internal/web/templates/layout.html index 61eeca0..80cf025 100644 --- a/internal/web/templates/layout.html +++ b/internal/web/templates/layout.html @@ -1,5 +1,6 @@ {{define "head"}} +{{ pageTitle . }} ยท Palette diff --git a/internal/web/web.go b/internal/web/web.go index 049817d..36f7692 100644 --- a/internal/web/web.go +++ b/internal/web/web.go @@ -74,6 +74,7 @@ func New() (*UI, error) { "humanSize": humanSize, "version": func() string { return Version }, // #93: topbar version label "defaultDark": func() bool { return DefaultDark }, // #127: server-configured default + "pageTitle": pageTitle, // page labels } t, err := template.New("").Funcs(funcs).ParseFS(tmplFS, "templates/*.html") if err != nil { @@ -82,6 +83,38 @@ func New() (*UI, error) { return &UI{tmpl: t}, nil } +// pageTitle returns the <title> label for the rendered page. Page data is +// always a map with a "Page" key set by the handlers. +func pageTitle(data any) string { + m, _ := data.(map[string]any) + page, _ := m["Page"].(string) + id, _ := m["ID"].(string) + title, _ := m["Title"].(string) + switch page { + case "new": + return "New paste" + case "public": + return "Public pastes" + case "saved": + return "Saved" + case "settings": + return "Settings" + case "paste": + if title != "" { + return title + } + return "Paste " + id + case "unlock": + return "Unlock " + id + case "can": + return "Can " + id + case "notfound": + return "Not found" + default: + return "Palette" + } +} + func humanSize(n int) string { if n < 1024 { return fmt.Sprintf("%d B", n)