diff options
author | Simon Ser <contact@emersion.fr> | 2019-12-17 13:23:10 +0100 |
---|---|---|
committer | Simon Ser <contact@emersion.fr> | 2019-12-17 13:23:10 +0100 |
commit | 29e0879dd988d7467f5e28ec9673fd8f436cc5f0 (patch) | |
tree | d81b7bd3142738003f22beb93ea9f18c476d69f2 | |
parent | 733304c88f51df710174fd74c86c24c79fcf5b47 (diff) | |
download | alps-29e0879dd988d7467f5e28ec9673fd8f436cc5f0.tar.gz alps-29e0879dd988d7467f5e28ec9673fd8f436cc5f0.zip |
Allow Go Plugins to inject template data
-rw-r--r-- | plugin_go.go | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/plugin_go.go b/plugin_go.go index cbfe8ee..43e9aea 100644 --- a/plugin_go.go +++ b/plugin_go.go @@ -41,6 +41,14 @@ func (p *goPlugin) SetRoutes(group *echo.Group) { } func (p *goPlugin) Inject(name string, data interface{}) error { + if f, ok := p.p.injectFuncs["*"]; ok { + if err := f(data); err != nil { + return err + } + } + if f, ok := p.p.injectFuncs[name]; ok { + return f(data) + } return nil } @@ -67,6 +75,7 @@ type GoPlugin struct { routes []goPluginRoute templateFuncs template.FuncMap + injectFuncs map[string]InjectFunc } // AddRoute registers a new HTTP route. @@ -104,6 +113,18 @@ func (p *GoPlugin) TemplateFuncs(funcs template.FuncMap) { } } +// InjectFunc is a function that injects data prior to rendering a template. +type InjectFunc func(data interface{}) error + +// Inject registers a function to execute prior to rendering a template. The +// special name "*" matches any template. +func (p *GoPlugin) Inject(name string, f InjectFunc) { + if p.injectFuncs == nil { + p.injectFuncs = make(map[string]InjectFunc) + } + p.injectFuncs[name] = f +} + // Plugin returns an object implementing Plugin. func (p *GoPlugin) Plugin() Plugin { return &goPlugin{p} |