diff --git a/render.go b/render.go index 5e1c805..cf1d75a 100644 --- a/render.go +++ b/render.go @@ -41,11 +41,10 @@ const ( templateWebmentionAdmin = "webmentionadmin" ) -var templates map[string]*template.Template -var templateFunctions template.FuncMap +var templates map[string]*template.Template = map[string]*template.Template{} func initRendering() error { - templateFunctions = template.FuncMap{ + templateFunctions := template.FuncMap{ "menu": func(blog *configBlog, id string) *menu { return blog.Menus[id] }, @@ -169,22 +168,24 @@ func initRendering() error { }, } - templates = map[string]*template.Template{} - - baseTemplatePath := path.Join(templatesDir, templateBase+templatesExt) - if err := filepath.Walk(templatesDir, func(p string, info os.FileInfo, err error) error { + baseTemplate, err := template.New("base").Funcs(templateFunctions).ParseFiles(path.Join(templatesDir, templateBase+templatesExt)) + if err != nil { + return err + } + err = filepath.Walk(templatesDir, func(p string, info os.FileInfo, err error) error { if err != nil { return err } if info.Mode().IsRegular() && path.Ext(p) == templatesExt { if name := strings.TrimSuffix(path.Base(p), templatesExt); name != templateBase { - if templates[name], err = template.New(name).Funcs(templateFunctions).ParseFiles(baseTemplatePath, p); err != nil { + if templates[name], err = template.Must(baseTemplate.Clone()).New(name).ParseFiles(p); err != nil { return err } } } return nil - }); err != nil { + }) + if err != nil { return err } return nil diff --git a/templates/base.gohtml b/templates/base.gohtml index 7be069a..0ce60c2 100644 --- a/templates/base.gohtml +++ b/templates/base.gohtml @@ -5,7 +5,9 @@ {{ with .Canonical }}{{ end }} - {{ template "title" . }} + {{ block "title" . }} + {{ .Blog.Title }} + {{ end }} @@ -19,7 +21,7 @@ {{ end }} {{ end }} {{ include "header" . }} - {{ template "main" . }} + {{ block "main" . }}{{ end }} {{ include "footer" . }} {{ end }} \ No newline at end of file diff --git a/utils.go b/utils.go index f3dd4fc..8357436 100644 --- a/utils.go +++ b/utils.go @@ -34,14 +34,15 @@ func sortedStrings(s []string) []string { return s } +const randomLetters = "abcdefghijklmnopqrstuvwxyz" + func generateRandomString(chars int) string { rand.Seed(time.Now().UnixNano()) - letters := []rune("abcdefghijklmnopqrstuvwxyz") - b := make([]rune, chars) - for i := range b { - b[i] = letters[rand.Intn(len(letters))] + var b strings.Builder + for i := 0; i < chars; i++ { + b.WriteByte(randomLetters[rand.Intn(len(randomLetters))]) } - return string(b) + return b.String() } func isAllowedHost(r *http.Request, hosts ...string) bool {