diff options
| author | 2025-08-11 16:52:48 +0700 | |
|---|---|---|
| committer | 2025-08-11 16:52:48 +0700 | |
| commit | ea1f83df820baa14dcd904d581ab2bb0976b172d (patch) | |
| tree | 61322010ecdd59534cc1d02ff1c29d815d07152c /internal/templatemanager | |
| parent | 15356da2c3e3544d757591a2f6e68367bf2d137f (diff) | |
| download | web-ea1f83df820baa14dcd904d581ab2bb0976b172d.tar.gz web-ea1f83df820baa14dcd904d581ab2bb0976b172d.zip | |
feat: redo blog catalogue with same layout as blog-pagev0.5.0
feat: implement localization
feat: filters and sort in blog catalogue
feat: one-page search
feat: ram theme
refactor: generate blog catalogue and blog page out of one layout
refactor: have one layout for both mobile & desktop (aspect ratio dependable)
refactor: use own template manager to use templates separately
Diffstat (limited to 'internal/templatemanager')
| -rw-r--r-- | internal/templatemanager/templatemanager.go | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/internal/templatemanager/templatemanager.go b/internal/templatemanager/templatemanager.go new file mode 100644 index 0000000..5effcb3 --- /dev/null +++ b/internal/templatemanager/templatemanager.go @@ -0,0 +1,57 @@ +package templatemanager + +import ( + "bytes" + "fmt" + "html/template" + "path/filepath" + "strings" +) + +type TemplateManager struct { + templates map[string]templateManagerRender +} + +type templateManagerRender struct { + Main string + Tmpl *template.Template +} + +type TemplateManagerTemplates struct { + Name string + Files []string +} + +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, err := tmpl.ParseFiles(tmplStruct.Files...) + if err != nil { + return nil, err + } + templateMap[tmplStruct.Name] = templateManagerRender{ + Main: filepath.Base(tmplStruct.Files[0]), + Tmpl: tmpl, + } + + } + + return &TemplateManager{ + templates: templateMap, + }, nil +} + +func (tm *TemplateManager) Render(name string, data interface{}) ([]byte, error) { + tmpl, exists := tm.templates[name] + if !exists { + return nil, fmt.Errorf("template %s is not found", name) + } + + var buf bytes.Buffer + err := tmpl.Tmpl.ExecuteTemplate(&buf, tmpl.Main, data) + return buf.Bytes(), err +} |