ソースを参照

Allow Go Plugins to inject template data

master
Simon Ser 4年前
コミット
29e0879dd9
この署名に対応する既知のキーがデータベースに存在しません GPGキーID: FDE7BE0E88F5E48
1個のファイルの変更21行の追加0行の削除
  1. +21
    -0
      plugin_go.go

+ 21
- 0
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}


読み込み中…
キャンセル
保存