From 0645bdd11007a264988029459844cb78ec06e790 Mon Sep 17 00:00:00 2001 From: Carlos C Date: Fri, 19 Jun 2015 11:41:41 +0200 Subject: [PATCH] html/template: add examples to package and functions Change-Id: Ib4fb8256863d908580a07e6f2e1c92ea109ea989 Reviewed-on: https://go-review.googlesource.com/11249 Reviewed-by: Russ Cox --- src/html/template/example_test.go | 122 ++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 src/html/template/example_test.go diff --git a/src/html/template/example_test.go b/src/html/template/example_test.go new file mode 100644 index 0000000000..a75ceec480 --- /dev/null +++ b/src/html/template/example_test.go @@ -0,0 +1,122 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package template_test + +import ( + "fmt" + "html/template" + "log" + "os" +) + +func Example() { + const tpl = ` + + + + + {{.Title}} + + + {{range .Items}}
{{ . }}
{{else}}
no rows
{{end}} + +` + + check := func(err error) { + if err != nil { + log.Fatal(err) + } + } + t, err := template.New("webpage").Parse(tpl) + + data := struct { + Title string + Items []string + }{ + Title: "My page", + Items: []string{ + "My photos", + "My blog", + }, + } + + err = t.Execute(os.Stdout, data) + check(err) + + noItems := struct { + Title string + Items []string + }{ + Title: "My another page", + Items: []string{}, + } + + err = t.Execute(os.Stdout, noItems) + check(err) + + // Output: + // + // + // + // + // My page + // + // + //
My photos
My blog
+ // + // + // + // + // + // + // My another page + // + // + //
no rows
+ // + // + +} + +func Example_autoescaping() { + check := func(err error) { + if err != nil { + log.Fatal(err) + } + } + t, err := template.New("foo").Parse(`{{define "T"}}Hello, {{.}}!{{end}}`) + check(err) + err = t.ExecuteTemplate(os.Stdout, "T", "") + check(err) + // Output: + // Hello, <script>alert('you have been pwned')</script>! +} + +func Example_escape() { + const s = `"Fran & Freddie's Diner" ` + v := []interface{}{`"Fran & Freddie's Diner"`, ' ', ``} + + fmt.Println(template.HTMLEscapeString(s)) + template.HTMLEscape(os.Stdout, []byte(s)) + fmt.Fprintln(os.Stdout, "") + fmt.Println(template.HTMLEscaper(v...)) + + fmt.Println(template.JSEscapeString(s)) + template.JSEscape(os.Stdout, []byte(s)) + fmt.Fprintln(os.Stdout, "") + fmt.Println(template.JSEscaper(v...)) + + fmt.Println(template.URLQueryEscaper(v...)) + + // Output: + // "Fran & Freddie's Diner" <tasty@example.com> + // "Fran & Freddie's Diner" <tasty@example.com> + // "Fran & Freddie's Diner"32<tasty@example.com> + // \"Fran & Freddie\'s Diner\" \x3Ctasty@example.com\x3E + // \"Fran & Freddie\'s Diner\" \x3Ctasty@example.com\x3E + // \"Fran & Freddie\'s Diner\"32\x3Ctasty@example.com\x3E + // %22Fran+%26+Freddie%27s+Diner%2232%3Ctasty%40example.com%3E + +} -- 2.48.1