diff --git a/html/embed.go b/html/embed.go
index da6ae110..b2f8a660 100644
--- a/html/embed.go
+++ b/html/embed.go
@@ -44,7 +44,7 @@ func newTemplateSystemEmbed() (templateSystemEmbed, error) {
}
func (ts templateSystemEmbed) loadAll() error {
// Then, parse all remaining templates into their named slots, adding the shared stuff
- page_subdirs := []string{"template/sync"}
+ page_subdirs := []string{"template/rmo", "template/sync"}
for _, subdir := range page_subdirs {
err := ts.loadTemplateSubdir(subdir)
if err != nil {
@@ -72,13 +72,21 @@ func (ts templateSystemEmbed) loadTemplateSubdir(subdir string) error {
return fmt.Errorf("error parsing '%s': %w", path, err)
}
short_path := removeLeadingDir(path)
- shared_subdirs := []string{"template/sync/component", "template/sync/layout"}
+ shared_subdirs := []string{"template/rmo/component", "template/rmo/layout", "template/sync/component", "template/sync/layout"}
for _, shared_subdir := range shared_subdirs {
err := ts.addSubdirTemplates(new_t, shared_subdir)
if err != nil {
return fmt.Errorf("Failed to add subdir '%s' templates: %w", shared_subdir, err)
}
}
+ svg_fs, err := fs.Sub(ts.sourceFS, "template/svg")
+ if err != nil {
+ return fmt.Errorf("failed to get template/svg sub")
+ }
+ err = addSVGTemplates(svg_fs, new_t)
+ if err != nil {
+ return fmt.Errorf("error adding SVG templates: %w", err)
+ }
ts.nameToTemplate[short_path] = new_t
log.Debug().Str("path", short_path).Msg("Loaded page template")
return nil
diff --git a/html/filesystem.go b/html/filesystem.go
index 1cd027f9..0875299e 100644
--- a/html/filesystem.go
+++ b/html/filesystem.go
@@ -65,7 +65,13 @@ func (ts templateSystemDisk) renderOrError(w http.ResponseWriter, template_name
RespondError(w, "Failed to add supporting templates", err, http.StatusInternalServerError)
return
}
- err = ts.addSVGTemplates(t)
+ svg_fs, err := fs.Sub(ts.sourceFS, "svg")
+ if err != nil {
+ log.Error().Err(err).Str("template_name", template_name).Msg("Failed to add get svg subdir")
+ RespondError(w, "Failed to add supporting svg templates", err, http.StatusInternalServerError)
+ return
+ }
+ err = addSVGTemplates(svg_fs, t)
if err != nil {
log.Error().Err(err).Str("template_name", template_name).Msg("Failed to add supporting templates")
RespondError(w, "Failed to add supporting templates", err, http.StatusInternalServerError)
@@ -114,35 +120,6 @@ func (ts templateSystemDisk) addSupportingTemplates(t *template.Template) error
}
return nil
}
-func (ts templateSystemDisk) addSVGTemplates(t *template.Template) error {
- svg_fs, err := fs.Sub(ts.sourceFS, "svg")
- if err != nil {
- return fmt.Errorf("Failed to get svg subdir: %w", err)
- }
- svgs, err := fs.ReadDir(svg_fs, ".")
- if err != nil {
- log.Warn().Msg("Failed to read svg directory")
- return nil
- }
- for _, svg := range svgs {
- content, err := fs.ReadFile(svg_fs, svg.Name())
- if err != nil {
- return fmt.Errorf("Failed to read svg '%s' from embedded filesystem: %w", svg, err)
- }
- svg_name := svg.Name()
- svg_template := fmt.Sprintf("{{define \"%s\"}}%s{{end}}", svg_name, string(content))
- svg_t, err := template.New(svg_name).Parse(svg_template)
- if err != nil {
- return fmt.Errorf("Failed to parse svg '%s' from embedded filesystem: %v", svg, err)
- }
- _, err = t.AddParseTree(svg_t.Name(), svg_t.Tree)
- if err != nil {
- return fmt.Errorf("Failed to add svg '%s' to embedded template: %v", svg, err)
- }
- //log.Debug().Str("name", svg_name).Msg("add svg template")
- }
- return nil
-}
func (ts templateSystemDisk) parseTemplate(filename string) (*template.Template, error) {
t := template.New(filename)
log.Debug().Str("filename", filename).Msg("parsing template")
@@ -157,14 +134,101 @@ func (ts templateSystemDisk) parseTemplate(filename string) (*template.Template,
}
return t, nil
}
-func addSVGTemplates(fsys fs.FS, templ *template.Template) error {
- svgs, err := fs.ReadDir(fsys, ".")
+
+/*
+ func addSVGTemplates(fsys fs.FS, templ *template.Template) error {
+ svgs, err := fs.ReadDir(fsys, ".")
+ if err != nil {
+ log.Warn().Msg("Failed to read svg directory")
+ return nil
+ }
+ for _, svg := range svgs {
+ content, err := fs.ReadFile(fsys, svg.Name())
+ if err != nil {
+ return fmt.Errorf("Failed to read svg '%s' from embedded filesystem: %w", svg, err)
+ }
+ svg_name := svg.Name()
+ svg_template := fmt.Sprintf("{{define \"%s\"}}%s{{end}}", svg_name, string(content))
+ svg_t, err := template.New(svg_name).Parse(svg_template)
+ if err != nil {
+ return fmt.Errorf("Failed to parse svg '%s' from embedded filesystem: %v", svg, err)
+ }
+ _, err = templ.AddParseTree(svg_t.Name(), svg_t.Tree)
+ if err != nil {
+ return fmt.Errorf("Failed to add svg '%s' to embedded template: %v", svg, err)
+ }
+ //log.Debug().Str("name", svg_name).Msg("add svg template")
+ }
+ return nil
+ }
+
+ func executeTemplate(w io.Writer, data any) error {
+ if bt.template == nil {
+ name := path.Base(bt.files[0])
+ templ, err := parseFromDisk(bt.subdir, bt.files)
+ if err != nil {
+ return fmt.Errorf("Failed to parse template file: %w", err)
+ }
+ if templ == nil {
+ w.Write([]byte("Failed to read from disk: "))
+ return errors.New("Template parsing failed")
+ }
+ //log.Debug().Str("name", templ.Name()).Msg("Parsed template")
+ return templ.ExecuteTemplate(w, name, data)
+ } else {
+ name := path.Base(bt.files[0])
+ return bt.template.ExecuteTemplate(w, name, data)
+ }
+ }
+
+ func parseEmbedded(embeddedFiles embed.FS, subdir string, files []string) *template.Template {
+ funcMap := makeFuncMap()
+ // Remap the file names to embedded paths
+ embeddedFilePaths := make([]string, 0)
+ for _, f := range files {
+ embeddedFilePaths = append(embeddedFilePaths, strings.TrimPrefix(f, subdir))
+ }
+ name := path.Base(embeddedFilePaths[0])
+ log.Debug().Str("name", name).Strs("paths", embeddedFilePaths).Msg("Parsing embedded template")
+ t, err := template.New(name).Funcs(funcMap).ParseFS(embeddedFiles, embeddedFilePaths...)
+ if err != nil {
+ panic(fmt.Sprintf("Failed to parse embedded template %s: %v", name, err))
+ }
+ svg_fs, err := fs.Sub(embeddedFiles, "template/svg")
+ if err != nil {
+ panic(fmt.Sprintf("Failed to read static/svg: %v", err))
+ }
+ err = addSVGTemplates(svg_fs, t)
+ if err != nil {
+ panic(fmt.Sprintf("Failed to add SVG templates: %v", err))
+ }
+ return t
+ }
+
+ func parseFromDisk(subdir string, files []string) (*template.Template, error) {
+ funcMap := makeFuncMap()
+ name := path.Base(files[0])
+ //log.Debug().Str("name", name).Strs("files", files).Msg("parsing from disk")
+ templ, err := template.New(name).Funcs(funcMap).ParseFiles(files...)
+ if err != nil {
+ return nil, fmt.Errorf("Failed to parse %s: %w", files, err)
+ }
+ fsys := os.DirFS(subdir + "/template/svg")
+ err = addSVGTemplates(fsys, templ)
+ if err != nil {
+ return nil, fmt.Errorf("Failed to add SVGs from disk: %w", err)
+ }
+ return templ, nil
+ }
+*/
+func addSVGTemplates(filesystem fs.FS, t *template.Template) error {
+ svgs, err := fs.ReadDir(filesystem, ".")
if err != nil {
log.Warn().Msg("Failed to read svg directory")
return nil
}
for _, svg := range svgs {
- content, err := fs.ReadFile(fsys, svg.Name())
+ content, err := fs.ReadFile(filesystem, svg.Name())
if err != nil {
return fmt.Errorf("Failed to read svg '%s' from embedded filesystem: %w", svg, err)
}
@@ -174,70 +238,12 @@ func addSVGTemplates(fsys fs.FS, templ *template.Template) error {
if err != nil {
return fmt.Errorf("Failed to parse svg '%s' from embedded filesystem: %v", svg, err)
}
- _, err = templ.AddParseTree(svg_t.Name(), svg_t.Tree)
+ _, err = t.AddParseTree(svg_t.Name(), svg_t.Tree)
if err != nil {
return fmt.Errorf("Failed to add svg '%s' to embedded template: %v", svg, err)
}
- //log.Debug().Str("name", svg_name).Msg("add svg template")
+ log.Debug().Str("name", svg_name).Msg("add svg template")
}
+ log.Debug().Msg("Done adding SVG templates")
return nil
}
-
-/*
-func executeTemplate(w io.Writer, data any) error {
- if bt.template == nil {
- name := path.Base(bt.files[0])
- templ, err := parseFromDisk(bt.subdir, bt.files)
- if err != nil {
- return fmt.Errorf("Failed to parse template file: %w", err)
- }
- if templ == nil {
- w.Write([]byte("Failed to read from disk: "))
- return errors.New("Template parsing failed")
- }
- //log.Debug().Str("name", templ.Name()).Msg("Parsed template")
- return templ.ExecuteTemplate(w, name, data)
- } else {
- name := path.Base(bt.files[0])
- return bt.template.ExecuteTemplate(w, name, data)
- }
-}
-func parseEmbedded(embeddedFiles embed.FS, subdir string, files []string) *template.Template {
- funcMap := makeFuncMap()
- // Remap the file names to embedded paths
- embeddedFilePaths := make([]string, 0)
- for _, f := range files {
- embeddedFilePaths = append(embeddedFilePaths, strings.TrimPrefix(f, subdir))
- }
- name := path.Base(embeddedFilePaths[0])
- log.Debug().Str("name", name).Strs("paths", embeddedFilePaths).Msg("Parsing embedded template")
- t, err := template.New(name).Funcs(funcMap).ParseFS(embeddedFiles, embeddedFilePaths...)
- if err != nil {
- panic(fmt.Sprintf("Failed to parse embedded template %s: %v", name, err))
- }
- svg_fs, err := fs.Sub(embeddedFiles, "template/svg")
- if err != nil {
- panic(fmt.Sprintf("Failed to read static/svg: %v", err))
- }
- err = addSVGTemplates(svg_fs, t)
- if err != nil {
- panic(fmt.Sprintf("Failed to add SVG templates: %v", err))
- }
- return t
-}
-func parseFromDisk(subdir string, files []string) (*template.Template, error) {
- funcMap := makeFuncMap()
- name := path.Base(files[0])
- //log.Debug().Str("name", name).Strs("files", files).Msg("parsing from disk")
- templ, err := template.New(name).Funcs(funcMap).ParseFiles(files...)
- if err != nil {
- return nil, fmt.Errorf("Failed to parse %s: %w", files, err)
- }
- fsys := os.DirFS(subdir + "/template/svg")
- err = addSVGTemplates(fsys, templ)
- if err != nil {
- return nil, fmt.Errorf("Failed to add SVGs from disk: %w", err)
- }
- return templ, nil
-}
-*/