feat!: add FuncMap support

This commit is contained in:
Bastien Riviere 2023-12-16 01:13:47 +01:00
parent 169ace8d59
commit c00d65f305
Signed by: babariviere
GPG key ID: 4E5F0839249F162E
2 changed files with 11 additions and 8 deletions

View file

@ -18,13 +18,13 @@ type Manager interface {
}
type RendererManager struct {
pages map[string]Renderer
pages map[string]Renderer
components map[string]Renderer
}
func ParseTemplates(f fs.FS) (*RendererManager, error) {
func ParseTemplates(f fs.FS, fm template.FuncMap) (*RendererManager, error) {
rm := RendererManager{
pages: make(map[string]Renderer),
pages: make(map[string]Renderer),
components: make(map[string]Renderer),
}
@ -38,7 +38,7 @@ func ParseTemplates(f fs.FS) (*RendererManager, error) {
if strings.HasPrefix(path, "components") {
p := strings.TrimSuffix(strings.TrimPrefix(path, "components"), ".gohtml")
tmpl, err := template.ParseFS(f, path)
tmpl, err := template.New("").Funcs(fm).ParseFS(f, path)
if err != nil {
return err
}
@ -74,7 +74,7 @@ func ParseTemplates(f fs.FS) (*RendererManager, error) {
}
}
tmpl, err := template.ParseFS(f, append(cs, path)...)
tmpl, err := template.New("").Funcs(fm).ParseFS(f, append(cs, path)...)
if err != nil {
return err
}

View file

@ -1,6 +1,7 @@
package render
import (
"html/template"
"net/http"
"os"
"sync"
@ -12,10 +13,11 @@ type WatcherManager struct {
mu sync.RWMutex
dir string
manager *RendererManager
fm template.FuncMap
}
func NewWatcher(dir string) (*WatcherManager, error) {
renderer, err := ParseTemplates(os.DirFS(dir))
func NewWatcher(dir string, fm template.FuncMap) (*WatcherManager, error) {
renderer, err := ParseTemplates(os.DirFS(dir), fm)
if err != nil {
return nil, err
}
@ -23,6 +25,7 @@ func NewWatcher(dir string) (*WatcherManager, error) {
return &WatcherManager{
dir: dir,
manager: renderer,
fm: fm,
}, nil
}
@ -31,7 +34,7 @@ func (wm *WatcherManager) Refresh() error {
defer wm.mu.Unlock()
var err error
wm.manager, err = ParseTemplates(os.DirFS(wm.dir))
wm.manager, err = ParseTemplates(os.DirFS(wm.dir), wm.fm)
return err
}