layout: move template functions from global scope to the constructor

pull/426/head^2
Demian 3 years ago
parent f4ae9d0c08
commit 2afdf466de

@ -29,9 +29,9 @@ buttons:
unique: pay
text: Pay
data:
- '{{.UserID}}'
- '{{.Amount}}'
- '{{.Currency}}'
- '{{ .UserID }}'
- '{{ .Amount }}'
- '{{ .Currency }}'
markups:
reply_shortened:

@ -61,7 +61,7 @@ type (
)
// New reads and parses the given layout file.
func New(path string) (*Layout, error) {
func New(path string, funcs ...template.FuncMap) (*Layout, error) {
data, err := ioutil.ReadFile(path)
if err != nil {
return nil, err
@ -72,34 +72,25 @@ func New(path string) (*Layout, error) {
funcs: make(template.FuncMap),
}
for k, v := range funcs {
for k, v := range builtinFuncs {
lt.funcs[k] = v
}
for i := range funcs {
for k, v := range funcs[i] {
lt.funcs[k] = v
}
}
return &lt, yaml.Unmarshal(data, &lt)
}
var funcs = template.FuncMap{
var builtinFuncs = template.FuncMap{
// Built-in blank and helper functions.
"locale": func() string { return "" },
"config": func(string) string { return "" },
"text": func(string) string { return "" },
}
// AddFunc adds the given function to the template FuncMap.
// Note: to make it come into effect, always add functions before New().
func AddFunc(key string, fn interface{}) {
funcs[key] = fn
}
// AddFuncs extends the template FuncMap with the given one.
// Note: to make it come into effect, always add functions before New().
func AddFuncs(fm template.FuncMap) {
for k, v := range fm {
funcs[k] = v
}
}
// Settings returns built telebot Settings required for bot initialising.
//
// settings:
@ -264,7 +255,7 @@ func (lt *Layout) ButtonLocale(locale, k string, args ...interface{}) *tele.Btn
return nil
}
tmpl, err := lt.template(template.New(k), locale).Parse(string(data))
tmpl, err := lt.template(template.New(k), locale).Funcs(lt.funcs).Parse(string(data))
if err != nil {
log.Println("telebot/layout:", err)
return nil

Loading…
Cancel
Save