1
0
mirror of https://github.com/golang/go synced 2024-09-25 11:30:13 -06:00

exp/template: url filter.

R=r
CC=golang-dev
https://golang.org/cl/4837063
This commit is contained in:
David Symonds 2011-08-08 16:29:57 +10:00
parent ec010fddb5
commit a09ba8b638
3 changed files with 21 additions and 0 deletions

View File

@ -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.

View File

@ -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},

View File

@ -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)
}