separate template logic into own file

Signed-off-by: Naman Sood <mail@nsood.in>
This commit is contained in:
Naman Sood 2021-03-15 23:36:00 -04:00
parent ef112be9bd
commit 048c06ac66
2 changed files with 79 additions and 70 deletions

70
template.go Normal file
View file

@ -0,0 +1,70 @@
package main
import (
"fmt"
"log"
"strconv"
"strings"
"time"
"github.com/aymerick/raymond"
)
func loadTemplate(file string) (*raymond.Template, error) {
tpl, err := raymond.ParseFile("templates/" + file + ".html")
if err != nil {
return nil, fmt.Errorf("Could not parse %s template: %w", file, err)
}
tpl.RegisterHelper("datetime", func(timeStr string) string {
timestamp, err := strconv.ParseInt(timeStr, 10, 64)
if err != nil {
log.Printf("Could not parse timestamp '%v', falling back to current time", timeStr)
timestamp = time.Now().Unix()
}
return time.Unix(timestamp, 0).Format("Jan 2 2006, 3:04 PM")
})
log.Printf("Loaded template: %s", file)
return tpl, nil
}
// loadTemplates, for each f in files, loads `templates/$f.html`
// as a handlebars HTML template. If any single template fails to
// load, only an error is returned. Conversely, if there is no error,
// every template name passed is guaranteed to have loaded successfully.
func loadTemplates(files []string) (map[string]*raymond.Template, error) {
templates := make(map[string]*raymond.Template)
for _, f := range files {
tpl, err := loadTemplate(f)
if err != nil {
return nil, err
}
templates[f] = tpl
}
log.Printf("Loaded templates: %s", files)
return templates, nil
}
func newTemplateListener(update func(func(map[string]*raymond.Template))) *listener {
return &listener{
folder: "templates/",
update: func(file string) error {
tplName := strings.TrimSuffix(file, ".html")
newTpl, err := loadTemplate(tplName)
if err != nil {
return err
}
update(func(oldMap map[string]*raymond.Template) {
oldMap[tplName] = newTpl
})
return nil
},
clean: func(file string) error {
tplName := strings.TrimSuffix(file, ".html")
update(func(oldMap map[string]*raymond.Template) {
delete(oldMap, tplName)
})
log.Printf("Unloaded template: %s", tplName)
return nil
},
}
}