generated from wyy-go/go-cli-template
-
Notifications
You must be signed in to change notification settings - Fork 0
/
irisview.go
78 lines (63 loc) · 1.84 KB
/
irisview.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package irisview
import (
"io"
"github.com/wyy-go/wview"
"github.com/kataras/iris/v12"
"github.com/kataras/iris/v12/view"
)
const templateEngineKey = "view-engine-iris"
// ViewEngine view engine for Iris.
type ViewEngine struct {
*wview.ViewEngine
ext string
}
var _ view.Engine = (*ViewEngine)(nil)
// New view engine for Iris.
func New(config wview.Config) *ViewEngine {
e := Wrap(wview.New(config))
e.ext = config.Extension
return e
}
// Wrap wraps a view engine for goview.ViewEngine.
func Wrap(engine *wview.ViewEngine) *ViewEngine {
return &ViewEngine{
ViewEngine: engine,
ext: wview.DefaultConfig.Extension,
}
}
// Default returns a new default view engine.
func Default() *ViewEngine {
return New(wview.DefaultConfig)
}
// Load does nothing here, templates are loaded through goview.
func (e *ViewEngine) Load() error {
return nil
}
// Ext returns the file extension, it's empty on this case because
// the goviw engine supports filenames without extension.
func (e *ViewEngine) Ext() string {
return ""
}
// ExecuteWriter executes a template by its name.
// It supports multiple templates, see `NewMiddleware` and `Middleware` too.
func (e *ViewEngine) ExecuteWriter(w io.Writer, filename string, _ string, bindingData interface{}) error {
if ctx, ok := w.(iris.Context); ok {
if v := ctx.Values().Get(templateEngineKey); v != nil {
if e, ok := v.(*ViewEngine); ok {
return e.ViewEngine.RenderWriter(w, filename, bindingData)
}
}
}
return e.ViewEngine.RenderWriter(w, filename, bindingData)
}
// NewMiddleware Iris middleware for multiple templates.
func NewMiddleware(config wview.Config) iris.Handler {
return Middleware(New(config))
}
// Middleware Iris middleware wrapper.
func Middleware(e *ViewEngine) iris.Handler {
return func(ctx iris.Context) {
ctx.Values().Set(templateEngineKey, e)
ctx.Next()
}
}