diff --git a/internal/template/engine.go b/internal/template/engine.go index a4fcdc7e..da15cec1 100644 --- a/internal/template/engine.go +++ b/internal/template/engine.go @@ -8,7 +8,6 @@ import ( "embed" "html/template" "log/slog" - "strings" "time" "miniflux.app/v2/internal/locale" @@ -41,60 +40,31 @@ func NewEngine(router *mux.Router) *Engine { // ParseTemplates parses template files embed into the application. func (e *Engine) ParseTemplates() error { - var commonTemplateContents strings.Builder + funcMap := e.funcMap.Map() + commonTemplates := template.Must(template.New("").Funcs(funcMap).ParseFS(commonTemplateFiles, "templates/common/*.html")) - dirEntries, err := commonTemplateFiles.ReadDir("templates/common") + dirEntries, err := viewTemplateFiles.ReadDir("templates/views") if err != nil { return err } - for _, dirEntry := range dirEntries { - fileData, err := commonTemplateFiles.ReadFile("templates/common/" + dirEntry.Name()) + fullName := "templates/views/" + dirEntry.Name() + slog.Debug("Parsing template", slog.String("template_name", fullName)) + commonTemplatesClone, err := commonTemplates.Clone() if err != nil { - return err + panic("Unable to clone the common template") } - commonTemplateContents.Write(fileData) - } - - dirEntries, err = viewTemplateFiles.ReadDir("templates/views") - if err != nil { - return err - } - - for _, dirEntry := range dirEntries { - templateName := dirEntry.Name() - fileData, err := viewTemplateFiles.ReadFile("templates/views/" + dirEntry.Name()) - if err != nil { - return err - } - - var templateContents strings.Builder - templateContents.WriteString(commonTemplateContents.String()) - templateContents.Write(fileData) - - slog.Debug("Parsing template", - slog.String("template_name", templateName), - ) - - e.templates[templateName] = template.Must(template.New("main").Funcs(e.funcMap.Map()).Parse(templateContents.String())) + e.templates[dirEntry.Name()] = template.Must(commonTemplatesClone.ParseFS(viewTemplateFiles, fullName)) } dirEntries, err = standaloneTemplateFiles.ReadDir("templates/standalone") if err != nil { return err } - for _, dirEntry := range dirEntries { - templateName := dirEntry.Name() - fileData, err := standaloneTemplateFiles.ReadFile("templates/standalone/" + dirEntry.Name()) - if err != nil { - return err - } - - slog.Debug("Parsing template", - slog.String("template_name", templateName), - ) - e.templates[templateName] = template.Must(template.New("base").Funcs(e.funcMap.Map()).Parse(string(fileData))) + fullName := "templates/standalone/" + dirEntry.Name() + slog.Debug("Parsing template", slog.String("template_name", fullName)) + e.templates[dirEntry.Name()] = template.Must(template.New(dirEntry.Name()).Funcs(funcMap).ParseFS(standaloneTemplateFiles, fullName)) } return nil diff --git a/internal/template/templates/standalone/offline.html b/internal/template/templates/standalone/offline.html index 4a23ccde..fdf9f452 100644 --- a/internal/template/templates/standalone/offline.html +++ b/internal/template/templates/standalone/offline.html @@ -1,3 +1,4 @@ +{{ define "base" }}
@@ -11,4 +12,5 @@{{ t "page.offline.message" }} - {{ t "page.offline.refresh_page" }}.
- \ No newline at end of file + +{{end}} \ No newline at end of file