// Package webui embeds the HTML templates and static assets.
//
// It lives at the repository root next to the files it embeds, because Go's
// embed directive cannot reach outside its own directory. The HTTP handlers
// that consume these assets live in internal/web.
//
// Everything the browser needs — Bootstrap, Bootstrap Icons and their web
// font, and Chart.js — is vendored here rather than loaded from a CDN, so the
// management interface works on a network with no Internet access. That is not
// a hypothetical: a DNS server whose own UI needs working DNS to render is
// unusable in exactly the situation an administrator most needs it.
package webui
import (
"embed"
"io/fs"
)
//go:embed templates
var templatesFS embed.FS
//go:embed static
var staticFS embed.FS
// Templates returns the template tree rooted at the templates directory.
func Templates() fs.FS {
sub, err := fs.Sub(templatesFS, "templates")
if err != nil {
// Unreachable: the directory is embedded at build time.
panic("webui: templates directory is missing from the binary: " + err.Error())
}
return sub
}
// Static returns the static asset tree rooted at the static directory.
func Static() fs.FS {
sub, err := fs.Sub(staticFS, "static")
if err != nil {
panic("webui: static directory is missing from the binary: " + err.Error())
}
return sub
}