Add jsonify template func
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 6 Mar 2016 13:58:15 +0000 (14:58 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 6 Mar 2016 14:01:14 +0000 (15:01 +0100)
docs/content/templates/functions.md
tpl/template_funcs.go
tpl/template_funcs_test.go

index 146ab8e93de4ef99b3c0f3511afc6341511b58b5..979e603f943cd04d74a86ac1a4ff48d2245ce837 100644 (file)
@@ -112,6 +112,14 @@ e.g.
         {{ .Render "summary" }}
     {{ end }}
 
+
+### jsonify
+Encodes a given object to JSON.
+
+e.g.
+
+   {{ dict "title" .Title "content" .Plain | jsonify }}
+
 ### last
 Slices an array to only the last _N_ elements.
 
index 4d88336d043e2d70b8ab7df822d2e1f0ed416f73..d42d9e5e4d059d9c7e26d381466852b6ad8496e2 100644 (file)
@@ -16,6 +16,7 @@ package tpl
 import (
        "bytes"
        "encoding/base64"
+       "encoding/json"
        "errors"
        "fmt"
        "html"
@@ -1142,6 +1143,15 @@ func markdownify(text string) template.HTML {
        return template.HTML(m)
 }
 
+// jsonify encodes a given object to JSON.
+func jsonify(v interface{}) (template.HTML, error) {
+       b, err := json.Marshal(v)
+       if err != nil {
+               return "", err
+       }
+       return template.HTML(b), nil
+}
+
 func refPage(page interface{}, ref, methodName string) template.HTML {
        value := reflect.ValueOf(page)
 
@@ -1522,6 +1532,7 @@ func init() {
                "intersect":    intersect,
                "isSet":        isSet,
                "isset":        isSet,
+               "jsonify":      jsonify,
                "last":         last,
                "le":           le,
                "lower":        func(a string) string { return strings.ToLower(a) },
index 602fbc5dc46e7a4b5da1792927a69fa3a9d3f5e6..02d31fe945ddee395ff5df53cedc7a2990e9718e 100644 (file)
@@ -98,6 +98,7 @@ in: {{ if in "this string contains a substring" "substring" }}Substring found!{{
 seq: {{ seq 3 }}
 sort: {{ slice "B" "C" "A" | sort }}
 delimit: {{ delimit (slice "A" "B" "C") ", " " and " }}
+jsonify: {{ (slice "A" "B" "C") | jsonify }}
 `
        expected := `chomp: <p>Blockhead</p>
 dateFormat: Wednesday, Jan 21, 2015
@@ -132,6 +133,7 @@ in: Substring found!
 seq: [1 2 3]
 sort: [A B C]
 delimit: A, B and C
+jsonify: ["A","B","C"]
 `
 
        var b bytes.Buffer