pagr

A 'static site generator', built using dati.
Log | Files | Refs | Atom

commit 246cff3a1f3efe6555d1a2b5b252f32b1c10012f
parent d32d15f49e8def390dd87676db8e6bd1e32c9647
Author: gearsix <gearsix@tuta.io>
Date:   Thu,  7 Oct 2021 13:13:29 +0100

rewrote LoadTemplateDir for update & adjust for suti refactors

Diffstat:
Mtemplate.go | 75++++++++++++++++++++++++++++++++-------------------------------------------
Mtemplate_test.go | 6+++---
2 files changed, 35 insertions(+), 46 deletions(-)

diff --git a/template.go b/template.go @@ -4,7 +4,6 @@ import ( "path/filepath" "io/fs" "strings" - "os" "notabug.org/gearsix/suti" ) @@ -12,57 +11,47 @@ import ( // when one isn't specified in a `Page.Meta`. const DefaultTemplateName = "root" -// loadPaths calls `filepath.Walk` on dir and loads all -// non-directory filepaths in `dir` -func loadPaths(dir string) ([]string, error) { - var r []string - err := filepath.Walk(dir, - func(fpath string, info fs.FileInfo, e error) error { - if e != nil { - return e - } - if !info.IsDir() { - r = append(r, fpath) - } - return e - }) - return r, err -} - // LoadTemplateDir loads all files in `dir` that are not directories as a `suti.Template` // by calling `suti.LoadTemplateFile`. Partials for each template will be parsed from all // files in a directory matching the base filename of the template (not including // extension) if it exists. -func LoadTemplateDir(dir string) ([]suti.Template, error) { - paths := make(map[string][]string) // [template][]partials +func LoadTemplateDir(dir string) (templates []suti.Template, err error) { + templatePaths := make(map[string][]string) // map[rootPath][]partialPaths... - if tpaths, err := loadPaths(dir); err != nil && !os.IsNotExist(err) { - return nil, err - } else { - err = nil - for _, t := range tpaths { - if strings.Contains(t, ".ignore") { - continue - } - paths[t] = make([]string, 0) - dir, file := filepath.Split(t) - ppath := filepath.Join(dir, strings.TrimSuffix(file, filepath.Ext(file))) - for _, p := range tpaths { - if !strings.Contains(p, ".ignore") && strings.Contains(p, ppath) && p != t { - paths[t] = append(paths[t], p) + err = filepath.Walk(dir, func(path string, info fs.FileInfo, e error) error { + if e != nil || info.IsDir() || strings.Contains(path, ".ignore") { + return e + } + + templatePaths[path] = make([]string, 0) + return e + }) + + err = filepath.Walk(dir, func(path string, info fs.FileInfo, e error) error { + if e != nil || info.IsDir() || strings.Contains(path, ".ignore") { + return e + } + + for t, _ := range templatePaths { + if strings.Contains(path, filepath.Dir(t)) && + filepath.Ext(t) == filepath.Ext(path) { + templatePaths[t] = append(templatePaths[t], path) } - } } - } + return e + }) - var ret []suti.Template - for t, partials := range paths { - tmpl, err := suti.LoadTemplateFilepath(t, partials...) - if err != nil { - return nil, err + + if err == nil { + var t suti.Template + for rootPath, partialPaths := range templatePaths { + t, err = suti.LoadTemplateFilepath(rootPath, partialPaths...) + if err != nil { + break + } + templates = append(templates, t) } - ret = append(ret, tmpl) } - return ret, nil + return } diff --git a/template_test.go b/template_test.go @@ -42,9 +42,9 @@ func createProjectTemplates(dir string) error { } for ext, data := range templates { - writef(fmt.Sprintf("%s/%s.%s", dir, ext, ext), data) - writef(fmt.Sprintf("%s/%s.ignore.%s", dir, ext, ext), data) - writef(fmt.Sprintf("%s/%s.%s.ignore", dir, ext, ext), data) + writef(fmt.Sprintf("%s/root.%s", dir, ext), data) + writef(fmt.Sprintf("%s/root.ignore.%s", dir, ext), data) + writef(fmt.Sprintf("%s/root.%s.ignore", dir, ext), data) pdir := filepath.Join(dir, ext) err = os.Mkdir(pdir, 0755)