From fd026263607ebd28453be56469596c051017eb1a Mon Sep 17 00:00:00 2001 From: Bel LaPointe Date: Mon, 14 Feb 2022 08:26:12 -0700 Subject: [PATCH] Create render to walk and render templates --- spike/review/reinvent/ezmded/ui/render.go | 80 +++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 spike/review/reinvent/ezmded/ui/render.go diff --git a/spike/review/reinvent/ezmded/ui/render.go b/spike/review/reinvent/ezmded/ui/render.go new file mode 100644 index 0000000..18fde05 --- /dev/null +++ b/spike/review/reinvent/ezmded/ui/render.go @@ -0,0 +1,80 @@ +package main + +import ( + "html/template" + "log" + "os" + "path" + "strings" +) + +func main() { + always := []string{} + if err := recursePwd(func(p string) error { + switch path.Ext(p) { + case ".ctmpl": + if path.Base(p)[0] == '_' { + always = append(always, p) + } + } + return nil + }); err != nil { + panic(err) + } + t := func(p ...string) *template.Template { + p = append(always, p...) + oneT, err := template.ParseFiles(p...) + if err != nil { + panic(err) + } + return oneT + } + data := map[string]interface{}{ + "Title": "my title here", + "ID": "my-id-here", + "PID": "my-pid-here", + "PTitle": "my parent title here", + } + if err := recursePwd(func(p string) error { + switch path.Ext(p) { + case ".ctmpl": + target := path.Join(path.Dir(p), "."+path.Base(p)+".html") + defer log.Printf("rendering ...%s as %s", path.Join(path.Base(path.Dir(p)), path.Base(p)), target) + f, err := os.Create(path.Join(path.Dir(p), "."+path.Base(p)+".html")) + if err != nil { + return err + } + defer f.Close() + return t(p).Execute(f, data) + } + return nil + }); err != nil { + panic(err) + } +} + +func recursePwd(foo func(string) error) error { + wd, err := os.Getwd() + if err != nil { + return err + } + return recurseD(wd, foo) +} + +func recurseD(d string, foo func(string) error) error { + entries, err := os.ReadDir(d) + if err != nil { + return err + } + for _, entry := range entries { + if entry.IsDir() { + if err := recurseD(path.Join(d, entry.Name()), foo); err != nil { + return err + } + } else if strings.HasPrefix(entry.Name(), ".") { + } else if err := foo(path.Join(d, entry.Name())); err != nil { + return err + } + } + return nil +}