This allows to access the request metadata and the session from injectors.master
@@ -18,7 +18,7 @@ type Plugin interface { | |||||
SetRoutes(group *echo.Group) | SetRoutes(group *echo.Group) | ||||
// Inject is called prior to rendering a template. It can extend the | // Inject is called prior to rendering a template. It can extend the | ||||
// template data by setting new items in the Extra map. | // template data by setting new items in the Extra map. | ||||
Inject(name string, data RenderData) error | |||||
Inject(ctx *Context, name string, data RenderData) error | |||||
// Close is called when the plugin is unloaded. | // Close is called when the plugin is unloaded. | ||||
Close() error | Close() error | ||||
} | } | ||||
@@ -40,14 +40,14 @@ func (p *goPlugin) SetRoutes(group *echo.Group) { | |||||
group.Static("/plugins/"+p.p.Name+"/assets", pluginDir+"/"+p.p.Name+"/public/assets") | group.Static("/plugins/"+p.p.Name+"/assets", pluginDir+"/"+p.p.Name+"/public/assets") | ||||
} | } | ||||
func (p *goPlugin) Inject(name string, data RenderData) error { | |||||
func (p *goPlugin) Inject(ctx *Context, name string, data RenderData) error { | |||||
if f, ok := p.p.injectFuncs["*"]; ok { | if f, ok := p.p.injectFuncs["*"]; ok { | ||||
if err := f(data); err != nil { | |||||
if err := f(ctx, data); err != nil { | |||||
return err | return err | ||||
} | } | ||||
} | } | ||||
if f, ok := p.p.injectFuncs[name]; ok { | if f, ok := p.p.injectFuncs[name]; ok { | ||||
return f(data) | |||||
return f(ctx, data) | |||||
} | } | ||||
return nil | return nil | ||||
} | } | ||||
@@ -114,7 +114,7 @@ func (p *GoPlugin) TemplateFuncs(funcs template.FuncMap) { | |||||
} | } | ||||
// InjectFunc is a function that injects data prior to rendering a template. | // InjectFunc is a function that injects data prior to rendering a template. | ||||
type InjectFunc func(data RenderData) error | |||||
type InjectFunc func(ctx *Context, data RenderData) error | |||||
// Inject registers a function to execute prior to rendering a template. The | // Inject registers a function to execute prior to rendering a template. The | ||||
// special name "*" matches any template. | // special name "*" matches any template. | ||||
@@ -86,7 +86,7 @@ func (p *luaPlugin) inject(name string, data RenderData) error { | |||||
return nil | return nil | ||||
} | } | ||||
func (p *luaPlugin) Inject(name string, data RenderData) error { | |||||
func (p *luaPlugin) Inject(ctx *Context, name string, data RenderData) error { | |||||
if err := p.inject("*", data); err != nil { | if err := p.inject("*", data); err != nil { | ||||
return err | return err | ||||
} | } | ||||
@@ -87,7 +87,7 @@ func (r *renderer) Render(w io.Writer, name string, data interface{}, ectx echo. | |||||
ctx := ectx.Get("context").(*Context) | ctx := ectx.Get("context").(*Context) | ||||
for _, plugin := range ctx.Server.Plugins { | for _, plugin := range ctx.Server.Plugins { | ||||
if err := plugin.Inject(name, data.(RenderData)); err != nil { | |||||
if err := plugin.Inject(ctx, name, data.(RenderData)); err != nil { | |||||
return fmt.Errorf("failed to run plugin '%v': %v", plugin.Name(), err) | return fmt.Errorf("failed to run plugin '%v': %v", plugin.Name(), err) | ||||
} | } | ||||
} | } | ||||