aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitchell Riedstra <mitch@riedstra.dev>2022-12-07 11:29:15 -0500
committerMitchell Riedstra <mitch@riedstra.dev>2022-12-07 11:29:15 -0500
commit69a3d0123be4c645d5318b5e9d0a5e68f6324b58 (patch)
treebb45de12a811b2f9aa135c7d7af825754291c259
parent10c60b3c9ba2c17419534cf4089328a66568e4f1 (diff)
downloadgo-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--.gitignore9
-rw-r--r--cmd/server/main.go5
-rw-r--r--page/misc.go15
-rw-r--r--page/page.go19
-rw-r--r--page/renderJson.go7
-rw-r--r--page/renderMarkdown.go12
6 files changed, 57 insertions, 10 deletions
diff --git a/.gitignore b/.gitignore
index 5ca77d1..38410f4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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)