package chrome import ( "embed" "html/template" ) //go:embed templates/chrome.tmpl var templateFS embed.FS // Attach parses the shared chrome partials ("srht-nav", "srht-env-banner", // "srht-head-links", "srht-repo-list", "srht-repo-table") into t, so a service // layout can invoke them. Call it once per template set, before the layout // that references the partials is executed. // // It installs Funcs first, because the partials call them: an unknown function // is a parse error, so a caller who had not merged Funcs would get a startup // panic naming a template it never wrote. Installing them here also means the // partials keep working when a service overrides a helper afterwards — its own // Funcs call wins for its own templates. func Attach(t *template.Template) (*template.Template, error) { return t.Funcs(Funcs()).ParseFS(templateFS, "templates/chrome.tmpl") } // MustAttach is Attach for the common wire-up-at-startup path, where a parse // failure is a programmer error. func MustAttach(t *template.Template) *template.Template { t, err := Attach(t) if err != nil { panic(err) } return t }