68 lines
1.3 KiB
Go
68 lines
1.3 KiB
Go
package render
|
|
|
|
import (
|
|
"html/template"
|
|
"net/http"
|
|
"os"
|
|
"sync"
|
|
)
|
|
|
|
var _ Manager = (*WatcherManager)(nil)
|
|
|
|
type WatcherManager struct {
|
|
mu sync.RWMutex
|
|
dir string
|
|
manager *RendererManager
|
|
fm template.FuncMap
|
|
}
|
|
|
|
func NewWatcher(dir string, fm template.FuncMap) (*WatcherManager, error) {
|
|
renderer, err := ParseTemplates(os.DirFS(dir), fm)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &WatcherManager{
|
|
dir: dir,
|
|
manager: renderer,
|
|
fm: fm,
|
|
}, nil
|
|
}
|
|
|
|
func (wm *WatcherManager) Refresh() error {
|
|
wm.mu.Lock()
|
|
defer wm.mu.Unlock()
|
|
|
|
var err error
|
|
wm.manager, err = ParseTemplates(os.DirFS(wm.dir), wm.fm)
|
|
return err
|
|
}
|
|
|
|
func (wm *WatcherManager) GetPage(page, username string) Renderer {
|
|
wm.mu.RLock()
|
|
defer wm.mu.RUnlock()
|
|
|
|
return wm.manager.GetPage(page, username)
|
|
}
|
|
|
|
func (wm *WatcherManager) GetBlock(page, block string) Renderer {
|
|
wm.mu.RLock()
|
|
defer wm.mu.RUnlock()
|
|
|
|
return wm.manager.GetBlock(page, block)
|
|
}
|
|
|
|
func (wm *WatcherManager) GetComponent(path, name string) Renderer {
|
|
wm.mu.RLock()
|
|
defer wm.mu.RUnlock()
|
|
|
|
return wm.manager.GetComponent(path, name)
|
|
}
|
|
|
|
func (wm *WatcherManager) FromRequest(r *http.Request, page string, username string) Renderer {
|
|
wm.mu.RLock()
|
|
defer wm.mu.RUnlock()
|
|
|
|
return wm.manager.FromRequest(r, page, username)
|
|
}
|