added template.Registry.LoadFS method

This commit is contained in:
Gani Georgiev
2023-07-24 12:33:16 +03:00
parent cb156e1903
commit ae8cbc8f45
2 changed files with 104 additions and 4 deletions
+28 -4
View File
@@ -21,7 +21,9 @@
package template
import (
"fmt"
"html/template"
"io/fs"
"strings"
"github.com/pocketbase/pocketbase/tools/store"
@@ -43,16 +45,18 @@ type Registry struct {
cache *store.Store[*Renderer]
}
// LoadFiles caches (if not already) the specified files set as a
// LoadFiles caches (if not already) the specified filenames set as a
// single template and returns a ready to use Renderer instance.
func (r *Registry) LoadFiles(files ...string) *Renderer {
key := strings.Join(files, ",")
//
// There must be at least 1 filename specified.
func (r *Registry) LoadFiles(filenames ...string) *Renderer {
key := strings.Join(filenames, ",")
found := r.cache.Get(key)
if found == nil {
// parse and cache
tpl, err := template.ParseFiles(files...)
tpl, err := template.ParseFiles(filenames...)
found = &Renderer{template: tpl, parseError: err}
r.cache.Set(key, found)
}
@@ -74,3 +78,23 @@ func (r *Registry) LoadString(text string) *Renderer {
return found
}
// LoadString caches (if not already) the specified fs and globPatterns
// pair as single template and returns a ready to use Renderer instance.
//
// There must be at least 1 file matching the provided globPattern(s)
// (note that most file names serves as glob patterns matching themselves).
func (r *Registry) LoadFS(fs fs.FS, globPatterns ...string) *Renderer {
key := fmt.Sprintf("%v%v", fs, globPatterns)
found := r.cache.Get(key)
if found == nil {
// parse and cache
tpl, err := template.ParseFS(fs, globPatterns...)
found = &Renderer{template: tpl, parseError: err}
r.cache.Set(key, found)
}
return found
}