Commit a09ba8b6 authored by David Symonds's avatar David Symonds

exp/template: url filter.

R=r
CC=golang-dev
https://golang.org/cl/4837063
parent ec010fdd
......@@ -244,6 +244,9 @@ Predefined global functions are named as follows.
An alias for fmt.Sprintf
println
An alias for fmt.Sprintln
url
Returns the escaped value of the textual representation of
its arguments in a form suitable for embedding in a URL.
The boolean functions take any zero value to be false and a non-zero value to
be true.
......
......@@ -283,6 +283,9 @@ var execTests = []execTest{
// JavaScript.
{"js", `{{js .}}`, `It\'d be nice.`, `It'd be nice.`, true},
// URL.
{"url", `{{"http://www.example.org/"|url}}`, "http%3A%2F%2Fwww.example.org%2F", nil, true},
// Booleans
{"not", "{{not true}} {{not false}}", "false true", nil, true},
{"and", "{{and false 0}} {{and 1 0}} {{and 0 true}} {{and 1 1}}", "false 0 0 1", nil, true},
......
......@@ -7,6 +7,7 @@ package template
import (
"bytes"
"fmt"
"http"
"io"
"os"
"reflect"
......@@ -31,6 +32,7 @@ var funcs = map[string]reflect.Value{
"print": reflect.ValueOf(fmt.Sprint),
"printf": reflect.ValueOf(fmt.Sprintf),
"println": reflect.ValueOf(fmt.Sprintln),
"url": reflect.ValueOf(URLEscaper),
}
// addFuncs adds to values the functions in funcs, converting them to reflect.Values.
......@@ -318,3 +320,16 @@ func JSEscaper(args ...interface{}) string {
}
return JSEscapeString(s)
}
// URLEscaper returns the escaped value of the textual representation of its
// arguments in a form suitable for embedding in a URL.
func URLEscaper(args ...interface{}) string {
s, ok := "", false
if len(args) == 1 {
s, ok = args[0].(string)
}
if !ok {
s = fmt.Sprint(args...)
}
return http.URLEscape(s)
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment