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:
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)