diff options
| author | Mitchell Riedstra <mitch@riedstra.dev> | 2022-12-07 11:29:15 -0500 |
|---|---|---|
| committer | Mitchell Riedstra <mitch@riedstra.dev> | 2022-12-07 11:29:15 -0500 |
| commit | 69a3d0123be4c645d5318b5e9d0a5e68f6324b58 (patch) | |
| tree | bb45de12a811b2f9aa135c7d7af825754291c259 | |
| parent | 10c60b3c9ba2c17419534cf4089328a66568e4f1 (diff) | |
| download | go-website-69a3d0123be4c645d5318b5e9d0a5e68f6324b58.tar.gz go-website-69a3d0123be4c645d5318b5e9d0a5e68f6324b58.tar.xz | |
Add basic string functions to default template funcmap. Set a var when page is being rendered markdown only.v0.0.20
| -rw-r--r-- | .gitignore | 9 | ||||
| -rw-r--r-- | cmd/server/main.go | 5 | ||||
| -rw-r--r-- | page/misc.go | 15 | ||||
| -rw-r--r-- | page/page.go | 19 | ||||
| -rw-r--r-- | page/renderJson.go | 7 | ||||
| -rw-r--r-- | page/renderMarkdown.go | 12 |
6 files changed, 57 insertions, 10 deletions
@@ -1,4 +1,5 @@ -example-site/auth.json -cmd/server/server -server - +/example-site/auth.json +/cmd/server/server +/server +/ses.vim +/auth.json diff --git a/cmd/server/main.go b/cmd/server/main.go index ee8cf6f..29cffbf 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -7,7 +7,6 @@ import ( "net/http" "os" "strings" - "text/template" "time" "github.com/gomodule/redigo/redis" @@ -101,9 +100,7 @@ func main() { //nolint:funlen os.Stderr.Write(b) } - page.Funcs = template.FuncMap{ - "ClearRedis": app.ClearRedis, - } + page.Funcs["ClearRedis"] = app.ClearRedis srv := &http.Server{ Handler: app, diff --git a/page/misc.go b/page/misc.go index e8bdfb7..e603458 100644 --- a/page/misc.go +++ b/page/misc.go @@ -35,3 +35,18 @@ func (p Page) EncodeJSON(data interface{}) string { return string(b) } + +// EncodeJSON is meant to be used in templating functions to encode +// arbitrary information as a JSON string. +func (p Page) EncodeJSONCompact(data interface{}) string { + if data == nil { + data = p + } + + b, err := json.Marshal(data) + if err != nil { + Logger.Println("Encountered error in EncodeJSONCompact: ", err) + } + + return string(b) +} diff --git a/page/page.go b/page/page.go index 29b35bc..214021e 100644 --- a/page/page.go +++ b/page/page.go @@ -33,6 +33,8 @@ import ( "log" "os" "path/filepath" + "regexp" + "strings" "text/template" "github.com/russross/blackfriday" @@ -67,7 +69,22 @@ type Page struct { var Global interface{} // Funcs accessible to the templates. -var Funcs template.FuncMap +var Funcs template.FuncMap = template.FuncMap{ + "join": strings.Join, + "split": strings.Split, + "toLower": strings.ToLower, + "toUpper": strings.ToUpper, + "replace": strings.Replace, + "replaceAll": strings.ReplaceAll, + "toTitle": strings.ToTitle, + "hasPrefix": strings.HasPrefix, + "hasSuffix": strings.HasSuffix, + "trimPrefix": strings.TrimPrefix, + "trimSuffix": strings.TrimSuffix, + "regexpReplaceAll": func(s, regex, rep string) string { + return regexp.MustCompile(regex).ReplaceAllString(s, rep) + }, +} // CacheIndex determines whether or not the index will be cached in memory // or rebuilt on each call. diff --git a/page/renderJson.go b/page/renderJson.go index 52e707d..9359b69 100644 --- a/page/renderJson.go +++ b/page/renderJson.go @@ -66,6 +66,13 @@ func RenderJson(w http.ResponseWriter, r *http.Request, } if r.URL.Query().Get("markdown") == "1" { + if p.Vars != nil { + p.Vars["RenderingMarkdownOnly"] = true + } else { + p.Vars = map[string]interface{}{ + "RenderingMarkdownOnly": true, + } + } // Tossing the error, since it would've been revealed above md, _ := p.GetMarkdown() out["Markdown"] = md diff --git a/page/renderMarkdown.go b/page/renderMarkdown.go index c876169..7a365e6 100644 --- a/page/renderMarkdown.go +++ b/page/renderMarkdown.go @@ -9,7 +9,9 @@ import ( ) // RenderMarkdown is analogous to Render, except it spits out rendered markdown -// as text/plain +// as text/plain. It also sets .Vars.RenderingMarkdownOnly so templates can +// vary on whether or not they're plain markdown. For instance, not including +// some HTML tags func RenderMarkdown(w http.ResponseWriter, r *http.Request, path string, vars map[string]interface{}, statusCode int) { u := getURLPath(r) @@ -23,6 +25,14 @@ func RenderMarkdown(w http.ResponseWriter, r *http.Request, p.Vars = vars } + if p.Vars != nil { + p.Vars["RenderingMarkdownOnly"] = true + } else { + p.Vars = map[string]interface{}{ + "RenderingMarkdownOnly": true, + } + } + buf := &bytes.Buffer{} err := p.Render(buf) |
