-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathpageproducer.go
70 lines (57 loc) · 1.55 KB
/
pageproducer.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
package trinity
import (
"bytes"
"errors"
"fmt"
"html/template"
)
// renderPage renders a page with any dependencies (like master pages or template pages
// for inner elements).
func renderPage(vm interface{}, templateDescr *templateDescriptor) (html []byte, err error) {
logger.Trace("")
logger.Debugf("index: %s, master: %s", templateDescr.templatePath, templateDescr.masterPage)
var pageTemplate *template.Template = nil
if templateDescr.masterPage != "" {
logger.Trace("parse master page")
pageTemplate, err = template.ParseFiles(templateDescr.masterPage)
if err != nil {
return nil, err
}
logger.Trace("funcs")
pageTemplate.Funcs(template.FuncMap{"equals": equals})
logger.Trace("parse page to master")
_, err = pageTemplate.ParseFiles(templateDescr.templatePath)
if err != nil {
return nil, err
}
} else {
logger.Trace("parse page without master")
pageTemplate, err = template.ParseFiles(templateDescr.templatePath)
if err != nil {
return nil, err
}
}
for _, pagePath := range templateDescr.additionalTemplates {
logger.Debugf("dep: %s", pagePath)
_, err = pageTemplate.ParseFiles(pagePath)
if err != nil {
return nil, err
}
}
logger.Trace("template execute")
var htmlBuffer bytes.Buffer
err = pageTemplate.Execute(&htmlBuffer, vm)
if err != nil {
return nil, err
}
if err := recover(); err != nil {
return nil, errors.New(fmt.Sprintf("Panic: %s", err))
}
return htmlBuffer.Bytes(), nil
}
func equals(args ...interface{}) bool {
if len(args) != 2 {
return false
}
return args[0] == args[1]
}