/
funcs.go
43 lines (34 loc) · 1.31 KB
/
funcs.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
package templateutil
import "html/template"
func (f HTMLFuncs) Class() string { return "class" }
func (f JSXLFuncs) Class() string { return "className" }
func (f HTMLFuncs) Colspan() string { return "colspan" }
func (f JSXLFuncs) Colspan() string { return "colSpan" }
func (f HTMLFuncs) JSX(string) (_ template.HTML) { return }
func (f JSXLFuncs) JSX(s string) template.HTML { return template.HTML(s) }
// HTMLFuncs has methods implementing Functor.
type HTMLFuncs struct{}
// JSXLFuncs has methods implementing Functor.
type JSXLFuncs struct{}
type Functor interface {
Class() string
Colspan() string
JSX(string) template.HTML
}
// CombineMaps makes new template.FuncMap off f implementation and extra.
func CombineMaps(f Functor, extra template.FuncMap) template.FuncMap {
combined := template.FuncMap{
"HTML": func(s string) template.HTML { return template.HTML(s) },
"class": f.Class,
"colspan": f.Colspan,
"jsx": f.JSX,
}
for k, f := range extra {
combined[k] = f
}
return combined
}
func FuncMapHTML() template.FuncMap { return CombineMaps(NewHTMLFuncs(), nil) }
func FuncMapJSXL() template.FuncMap { return CombineMaps(NewJSXLFuncs(), nil) }
func NewHTMLFuncs() HTMLFuncs { return HTMLFuncs{} }
func NewJSXLFuncs() JSXLFuncs { return JSXLFuncs{} }