-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtemplate.go
More file actions
70 lines (57 loc) · 1.1 KB
/
template.go
File metadata and controls
70 lines (57 loc) · 1.1 KB
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
package htmlview
import (
"html/template"
"path/filepath"
)
type Template struct {
tmpl *template.Template
funcs template.FuncMap
}
func NewTemplate() *Template {
return &Template{}
}
func (t *Template) Funcs(funcMap template.FuncMap) *Template {
if t.tmpl != nil {
t.tmpl.Funcs(funcMap)
} else {
if t.funcs == nil {
t.funcs = make(template.FuncMap)
}
for k, v := range funcMap {
t.funcs[k] = v
}
}
return t
}
func (t *Template) ParseFiles(filenames ...string) *Template {
if len(filenames) == 0 {
return t
}
tmpl := t.tmpl
if tmpl == nil {
name := filepath.Base(filenames[0])
tmpl = template.New(name).Funcs(t.funcs)
}
t.tmpl = template.Must(tmpl.ParseFiles(filenames...))
t.funcs = nil
return t
}
func (t *Template) Parse(text string) *Template {
tmpl := t.tmpl
if tmpl == nil {
tmpl = template.New("").Funcs(t.funcs)
}
t.tmpl = template.Must(tmpl.Parse(text))
t.funcs = nil
return t
}
func (t *Template) Clone() *Template {
return &Template{
tmpl: template.Must(t.tmpl.Clone()),
}
}
func (t *Template) NewPage() *Page {
return &Page{
tmpl: t.tmpl,
}
}