mirror of
https://github.com/Kugelschieber/schnittfest.git
synced 2026-01-18 18:30:27 +00:00
56 lines
1.4 KiB
Go
56 lines
1.4 KiB
Go
package util
|
|
|
|
import (
|
|
"github.com/emvi/logbuch"
|
|
"html/template"
|
|
"sync"
|
|
)
|
|
|
|
// TemplateCache caches templates.
|
|
type TemplateCache struct {
|
|
templates map[string]*template.Template
|
|
mutex sync.RWMutex
|
|
}
|
|
|
|
// NewTemplateCache creates a new template cache.
|
|
func NewTemplateCache() *TemplateCache {
|
|
return &TemplateCache{templates: make(map[string]*template.Template)}
|
|
}
|
|
|
|
// ParseFiles parses the given template files and stores them as one template called name.
|
|
func (tplcache *TemplateCache) ParseFiles(name string, files ...string) (*template.Template, error) {
|
|
if tplcache.templates[name] != nil {
|
|
tplcache.mutex.RLock()
|
|
defer tplcache.mutex.RUnlock()
|
|
return tplcache.templates[name], nil
|
|
}
|
|
|
|
tplcache.mutex.Lock()
|
|
defer tplcache.mutex.Unlock()
|
|
logbuch.Debug("Caching template", logbuch.Fields{"name": name})
|
|
tpl, err := template.ParseFiles(files...)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
tplcache.templates[name] = tpl
|
|
return tpl, nil
|
|
}
|
|
|
|
// GetTemplate returns a cached template by name or nil if not found.
|
|
func (tplcache *TemplateCache) GetTemplate(name string) *template.Template {
|
|
if tplcache.templates[name] != nil {
|
|
tplcache.mutex.RLock()
|
|
defer tplcache.mutex.RUnlock()
|
|
return tplcache.templates[name]
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// Clear clears the template cache.
|
|
func (tplcache *TemplateCache) Clear() {
|
|
tplcache.templates = make(map[string]*template.Template)
|
|
}
|