|
- package koushin
-
- import (
- "html/template"
- "io"
- "net/url"
-
- "github.com/labstack/echo/v4"
- )
-
- type tmpl struct {
- // TODO: add support for multiple themes
- t *template.Template
- }
-
- func (t *tmpl) Render(w io.Writer, name string, data interface{}, c echo.Context) error {
- return t.t.ExecuteTemplate(w, name, data)
- }
-
- func loadTemplates(logger echo.Logger, themeName string) (*tmpl, error) {
- base, err := template.New("").Funcs(template.FuncMap{
- "tuple": func(values ...interface{}) []interface{} {
- return values
- },
- "pathescape": func(s string) string {
- return url.PathEscape(s)
- },
- }).ParseGlob("public/*.html")
- if err != nil {
- return nil, err
- }
-
- theme, err := base.Clone()
- if err != nil {
- return nil, err
- }
-
- if themeName != "" {
- logger.Printf("Loading theme \"%s\"", themeName)
- if _, err := theme.ParseGlob("public/themes/" + themeName + "/*.html"); err != nil {
- return nil, err
- }
- }
-
- return &tmpl{theme}, err
- }
|