From 3884a33b3623ee5166f8254a0919e65be9bfb49b Mon Sep 17 00:00:00 2001 From: Frédéric Guillot Date: Sun, 4 Feb 2018 15:45:07 -0800 Subject: Move template functions outside engine (refactoring) --- template/functions.go | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 template/functions.go (limited to 'template/functions.go') diff --git a/template/functions.go b/template/functions.go new file mode 100644 index 0000000..08a4617 --- /dev/null +++ b/template/functions.go @@ -0,0 +1,105 @@ +// Copyright 2018 Frédéric Guillot. All rights reserved. +// Use of this source code is governed by the Apache 2.0 +// license that can be found in the LICENSE file. + +package template + +import ( + "html/template" + "net/mail" + "strings" + "time" + + "github.com/gorilla/mux" + "github.com/miniflux/miniflux/config" + "github.com/miniflux/miniflux/errors" + "github.com/miniflux/miniflux/filter" + "github.com/miniflux/miniflux/http/route" + "github.com/miniflux/miniflux/locale" + "github.com/miniflux/miniflux/url" +) + +type funcMap struct { + cfg *config.Config + router *mux.Router + Language *locale.Language +} + +func (f *funcMap) Map() template.FuncMap { + return template.FuncMap{ + "baseURL": func() string { + return f.cfg.BaseURL() + }, + "rootURL": func() string { + return f.cfg.RootURL() + }, + "hasOAuth2Provider": func(provider string) bool { + return f.cfg.OAuth2Provider() == provider + }, + "hasKey": func(dict map[string]string, key string) bool { + if value, found := dict[key]; found { + return value != "" + } + return false + }, + "route": func(name string, args ...interface{}) string { + return route.Path(f.router, name, args...) + }, + "noescape": func(str string) template.HTML { + return template.HTML(str) + }, + "proxyFilter": func(data string) string { + return filter.ImageProxyFilter(f.router, data) + }, + "proxyURL": func(link string) string { + if url.IsHTTPS(link) { + return link + } + + return filter.Proxify(f.router, link) + }, + "domain": func(websiteURL string) string { + return url.Domain(websiteURL) + }, + "isEmail": func(str string) bool { + _, err := mail.ParseAddress(str) + if err != nil { + return false + } + return true + }, + "hasPrefix": func(str, prefix string) bool { + return strings.HasPrefix(str, prefix) + }, + "contains": func(str, substr string) bool { + return strings.Contains(str, substr) + }, + "isodate": func(ts time.Time) string { + return ts.Format("2006-01-02 15:04:05") + }, + "elapsed": func(timezone string, t time.Time) string { + return elapsedTime(f.Language, timezone, t) + }, + "t": func(key interface{}, args ...interface{}) string { + switch key.(type) { + case string: + return f.Language.Get(key.(string), args...) + case errors.LocalizedError: + err := key.(errors.LocalizedError) + return err.Localize(f.Language) + case error: + return key.(error).Error() + default: + return "" + } + }, + "plural": func(key string, n int, args ...interface{}) string { + return f.Language.Plural(key, n, args...) + }, + "dict": dict, + } +} + +func newFuncMap(cfg *config.Config, router *mux.Router, language *locale.Language) *funcMap { + return &funcMap{cfg, router, language} +} -- cgit v1.2.3