-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
view.go
executable file
·151 lines (121 loc) · 4 KB
/
view.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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
// Package view provides methods for rendering templates, and helper functions for golang views
package view
import (
"fmt"
"sync"
"github.com/abishekmuthian/open-payment-host/src/lib/view/helpers"
"github.com/abishekmuthian/open-payment-host/src/lib/view/parser"
)
// Production is true if this server is running in production mode
var Production bool
// The scanner is a private type used for scanning templates
var scanner *parser.Scanner
// This mutex guards the pkg scanner variable during reload and access
// it is only neccessary because of hot reload during development
var mu sync.RWMutex
// Helpers is a list of functions available in templates
var Helpers parser.FuncMap
func init() {
Helpers = DefaultHelpers()
}
// LoadTemplates loads our templates from ./src, and assigns them to the package variable Templates
// This function is deprecated and will be removed, use LoadTemplatesAtPaths instead
func LoadTemplates() error {
return LoadTemplatesAtPaths([]string{"src"}, Helpers)
}
// DefaultHelpers returns a default set of helpers for the app,
// which can then be extended/replaced. Helper functions may not be changed
// after LoadTemplates is called, as reloading is required if they change.
func DefaultHelpers() parser.FuncMap {
funcs := make(parser.FuncMap)
// HEAD helpers
funcs["style"] = helpers.Style
funcs["script"] = helpers.Script
funcs["dev"] = func() bool { return !Production }
// HTML helpers
funcs["html"] = helpers.HTML
funcs["htmlattr"] = helpers.HTMLAttribute
funcs["url"] = helpers.URL
funcs["sanitize"] = helpers.Sanitize
funcs["strip"] = helpers.Strip
funcs["truncate"] = helpers.Truncate
// XML helpers
funcs["xmlpreamble"] = helpers.XMLPreamble
// JSON helpers
funcs["json"] = helpers.JSON
funcs["jsontime"] = helpers.JSONTime
// CSV helper
funcs["csv"] = helpers.CSV
// Form helpers
funcs["field"] = helpers.Field
funcs["datefield"] = helpers.DateField
funcs["textarea"] = helpers.TextArea
funcs["select"] = helpers.Select
funcs["selectarray"] = helpers.SelectArray
funcs["optionsforselect"] = helpers.OptionsForSelect
funcs["utcdate"] = helpers.UTCDate
funcs["utctime"] = helpers.UTCTime
funcs["utcnow"] = helpers.UTCNow
funcs["year"] = helpers.YearNow
funcs["date"] = helpers.Date
funcs["time"] = helpers.Time
funcs["ago"] = helpers.Ago
funcs["numberoptions"] = helpers.NumberOptions
// String helpers
funcs["blank"] = helpers.Blank
funcs["exists"] = helpers.Exists
// Math helpers
funcs["mod"] = helpers.Mod
funcs["odd"] = helpers.Odd
funcs["add"] = helpers.Add
funcs["subtract"] = helpers.Subtract
funcs["int64"] = helpers.Int64
// Array functions
funcs["array"] = helpers.Array
funcs["append"] = helpers.Append
funcs["contains"] = helpers.Contains
// Map functions
funcs["map"] = helpers.Map
funcs["set"] = helpers.Set
funcs["setif"] = helpers.SetIf
funcs["empty"] = helpers.Empty
// Numeric helpers - clean up and accept currency and other options in centstoprice
funcs["centstobase"] = helpers.CentsToBase
funcs["centstoprice"] = helpers.CentsToPrice
funcs["centstopriceshort"] = helpers.CentsToPriceShort
funcs["pricetocents"] = helpers.PriceToCents
funcs["numbertohuman"] = helpers.NumberToHuman
funcs["numbertocommas"] = helpers.NumberToCommas
return funcs
}
// LoadTemplatesAtPaths loads our templates given the paths provided
func LoadTemplatesAtPaths(paths []string, helpers parser.FuncMap) error {
mu.Lock()
defer mu.Unlock()
// Scan all templates within the given paths, using the helpers provided
var err error
scanner, err = parser.NewScanner(paths, helpers)
if err != nil {
return err
}
err = scanner.ScanPaths()
if err != nil {
return err
}
return nil
}
// ReloadTemplates reloads the templates for our scanner
func ReloadTemplates() error {
mu.Lock()
defer mu.Unlock()
return scanner.ScanPaths()
}
// PrintTemplates prints out our list of templates for debug
func PrintTemplates() {
mu.RLock()
defer mu.RUnlock()
for k := range scanner.Templates {
fmt.Printf("%s\n", k)
}
fmt.Printf("Finished scan of templates\n")
}