From 3f10f7b912bb2b46980e0d07a57c1842d30b4392 Mon Sep 17 00:00:00 2001 From: Nikita Tokarchuk Date: Tue, 4 Jan 2022 22:32:06 +0100 Subject: [PATCH] Implement template funcs controller instead of simple funcs map --- cmd/renderer/main.go | 3 +- pkg/templates/funcs.go | 78 +++++++++++++++++++++++++++++--------- pkg/templates/templates.go | 7 ++-- 3 files changed, 65 insertions(+), 23 deletions(-) diff --git a/cmd/renderer/main.go b/cmd/renderer/main.go index 854d923..46419a7 100644 --- a/cmd/renderer/main.go +++ b/cmd/renderer/main.go @@ -52,7 +52,8 @@ func main() { logrus.Fatal(err) } - err = templates.Load() + templateFuncs := &templates.Funcs{Version: Version} + err = templates.Load(templateFuncs) if err != nil { logrus.Fatal(err) } diff --git a/pkg/templates/funcs.go b/pkg/templates/funcs.go index aedbf17..41d1927 100644 --- a/pkg/templates/funcs.go +++ b/pkg/templates/funcs.go @@ -1,24 +1,66 @@ package templates -import "html/template" +import ( + "html/template" + "net/url" + "sync" +) -// UseFuncs returns a func map with template helpers functions -func UseFuncs() template.FuncMap { +type Funcs struct { + Version string + + compiledJSAppURL string + + initOnce sync.Once +} + +func (f *Funcs) init() { + + jsAppURL, err := url.Parse(URLJSApp) + if err != nil { + panic(err) + } + + { + q := jsAppURL.Query() + q.Add("version", f.Version) + + jsAppURL.RawQuery = q.Encode() + } + + f.compiledJSAppURL = jsAppURL.String() +} + +func (f *Funcs) add(i int) int { + return i + 1 +} + +func (f *Funcs) sub(i int) int { + return i - 1 +} + +func (f *Funcs) getJSAppURL() string { + + f.initOnce.Do(f.init) + + return f.compiledJSAppURL +} + +func (f *Funcs) getIndexURL() string { + return URLIndex +} + +func (f *Funcs) getBlogURL() string { + return URLBlog +} + +// Use returns a func map with template helpers functions +func (f *Funcs) Use() template.FuncMap { return template.FuncMap{ - "add": func(i int) int { - return i + 1 - }, - "sub": func(i int) int { - return i - 1 - }, - "getJSAppURL": func() string { - return URLJSApp - }, - "getIndexURL": func() string { - return URLIndex - }, - "getBlogURL": func() string { - return URLBlog - }, + "add": f.add, + "sub": f.sub, + "getJSAppURL": f.getJSAppURL, + "getIndexURL": f.getIndexURL, + "getBlogURL": f.getBlogURL, } } diff --git a/pkg/templates/templates.go b/pkg/templates/templates.go index 9cece2c..90c27d6 100644 --- a/pkg/templates/templates.go +++ b/pkg/templates/templates.go @@ -21,13 +21,12 @@ import ( var content embed.FS // List of compiled go-templates -var Templates *template.Template +var Templates *template.Template = template.New("") // Load embeded templates -func Load() (err error) { +func Load(funcs *Funcs) (err error) { - Templates = template.New("") - Templates.Funcs(UseFuncs()) + Templates.Funcs(funcs.Use()) tmplNames, err := fs.Glob(content, "*.go.tmpl") if err != nil {