{{define "layout.html"}} {{.Title}} {{/* The tab icon is the stamp's small-size variant — the initials rather than the two-line wordmark, which stops resolving below 32px (the thresholds are recorded in docs/assets/selfpost-proof.html). The PNG is declared first and the SVG second: a browser takes the last icon whose type it understands, so vector wins wherever it is supported and the raster catches the rest. */}} {{/* Unless told otherwise, htmx injects a stylesheet element of its own into the head for the request-indicator classes. The panel uses no hx-indicator, and that injected element would be the one thing the Content-Security-Policy has to make an exception for, so it is switched off here. */}} {{/* The page name travels onto
as a class so the stylesheet can size a page to what it holds — the monitoring pages are wider than the panel's form pages (see main.page-* in panel.css). It is .Active, already carried for the navigation, rather than a second field every handler would have to remember to set. */}}
{{if .User}}{{template "nav" .}}{{end}} {{template "content" .}} {{/* The running version, on every authenticated page: it is what a backup manifest is checked against on restore and the first thing to establish when something behaves unexpectedly. Only for signed-in administrators — the login and setup pages must not advertise it to the internet. */}} {{if .User}}
SelfPost {{.Version}}
{{end}}
{{end}} {{/* nav is the panel's navigation bar. It is rendered here, from the layout, so every authenticated page has it without the page's own template having to remember to include it; .Active names the current page so it is highlighted instead of linking to itself. Unauthenticated pages (login, setup) carry no .User and get no nav. */}} {{define "nav"}} {{end}} {{/* Navigation icons. Inline SVG rather than an icon font or sprite file: they inherit the link's colour through currentColor, cost no extra request, and need no exemption from the panel's "default-src 'self'" policy. Each is aria-hidden because the entry's own text is already the accessible name; the icon is a landmark for the eye, not a second label. Kept as separate templates so the nav above stays one readable line per page. */}} {{define "icon-status"}}{{end}} {{define "icon-domains"}}{{end}} {{define "icon-deliveries"}}{{end}} {{define "icon-mail-queue"}}{{end}} {{define "icon-system-log"}}{{end}} {{/* A filing cabinet rather than a storage box: the box read as a box, while two drawers with handles is the picture of an archive. */}} {{define "icon-backup"}}{{end}} {{define "icon-account"}}{{end}} {{/* Sign out is the one icon here that marks an action rather than a page: an open door with the arrow leading out of it. */}} {{define "icon-sign-out"}}{{end}}