aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2019-12-17 13:23:10 +0100
committerSimon Ser <contact@emersion.fr>2019-12-17 13:23:10 +0100
commit29e0879dd988d7467f5e28ec9673fd8f436cc5f0 (patch)
treed81b7bd3142738003f22beb93ea9f18c476d69f2
parent733304c88f51df710174fd74c86c24c79fcf5b47 (diff)
downloadalps-29e0879dd988d7467f5e28ec9673fd8f436cc5f0.tar.gz
alps-29e0879dd988d7467f5e28ec9673fd8f436cc5f0.zip
Allow Go Plugins to inject template data
-rw-r--r--plugin_go.go21
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}