Diffstat (limited to 'internal/templatemanager/templatemanager.go')
| -rw-r--r-- | internal/templatemanager/templatemanager.go | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/internal/templatemanager/templatemanager.go b/internal/templatemanager/templatemanager.go index 640a706..eebc297 100644 --- a/internal/templatemanager/templatemanager.go +++ b/internal/templatemanager/templatemanager.go @@ -22,13 +22,22 @@ type TemplateManagerTemplates struct { Files []string } +var templateFuncMap = template.FuncMap{ + "contains": strings.Contains, + "iterate": func(count uint) []uint { + items := make([]uint, count) + for i := range count { + items[i] = i + } + return items + }, +} + func NewTemplateManager(templates ...TemplateManagerTemplates) (*TemplateManager, error) { templateMap := make(map[string]templateManagerRender) for _, tmplStruct := range templates { - tmpl := template.New("").Funcs(template.FuncMap{ - "contains": strings.Contains, - }) + tmpl := template.New(tmplStruct.Name).Funcs(templateFuncMap) tmpl, err := tmpl.ParseFiles(tmplStruct.Files...) if err != nil { return nil, err @@ -55,7 +64,11 @@ func (tm *TemplateManager) Render(name string, data any, files ...string) ([]byt if len(files) == 0 { tempTmpl = tmpl.Tmpl } else { - tempTmpl, err = tmpl.Tmpl.ParseFiles(files...) + tempTmpl, err = tmpl.Tmpl.Clone() + if err != nil { + return nil, fmt.Errorf("couldn't clone existing template for rendering: %w", err) + } + tempTmpl, err = tempTmpl.ParseFiles(files...) if err != nil { return nil, fmt.Errorf("couldn't include additional files in template rendering: %w", err) } @@ -71,9 +84,7 @@ func (tm *TemplateManager) Add(name string, files ...string) error { return fmt.Errorf("you can't add template without any files") } - tmpl := template.New("").Funcs(template.FuncMap{ - "contains": strings.Contains, - }) + tmpl := template.New(name).Funcs(templateFuncMap) tmpl, err := tmpl.ParseFiles(files...) if err != nil { |