diff options
author | Markus Wüstenberg | 2022-11-03 11:24:26 +0100 |
---|---|---|
committer | GitHub | 2022-11-03 11:24:26 +0100 |
commit | 3bb4e3efeac645acc02781af59a1399f6f8e0795 (patch) | |
tree | 1782e24961e2388d39e6a00219c4d4aa8f334f9f | |
parent | 34df17d356afbb6293fc856007f18cc62d112dcb (diff) | |
download | gomponents-3bb4e3efeac645acc02781af59a1399f6f8e0795.tar.lz gomponents-3bb4e3efeac645acc02781af59a1399f6f8e0795.tar.zst gomponents-3bb4e3efeac645acc02781af59a1399f6f8e0795.zip |
Add Rawf (#114)
Like `Raw`, but interpolates like `Textf`.
-rw-r--r-- | gomponents.go | 12 | ||||
-rw-r--r-- | gomponents_test.go | 15 |
2 files changed, 25 insertions, 2 deletions
diff --git a/gomponents.go b/gomponents.go index 4f610f4..9f86538 100644 --- a/gomponents.go +++ b/gomponents.go @@ -4,7 +4,7 @@ // to the given writer as a string. // // All DOM elements and attributes can be created by using the El and Attr functions. -// The functions Text, Textf, and Raw can be used to create text nodes. +// The functions Text, Textf, Raw, and Rawf can be used to create text nodes. // See also helper functions Group, Map, and If. // // For basic HTML elements and attributes, see the package html. @@ -207,7 +207,7 @@ func Text(t string) Node { }) } -// Textf creates a text DOM Node that Renders the interpolated and escaped string t. +// Textf creates a text DOM Node that Renders the interpolated and escaped string format. func Textf(format string, a ...interface{}) Node { return NodeFunc(func(w io.Writer) error { _, err := w.Write([]byte(template.HTMLEscapeString(fmt.Sprintf(format, a...)))) @@ -223,6 +223,14 @@ func Raw(t string) Node { }) } +// Rawf creates a text DOM Node that just Renders the interpolated and unescaped string format. +func Rawf(format string, a ...interface{}) Node { + return NodeFunc(func(w io.Writer) error { + _, err := w.Write([]byte(fmt.Sprintf(format, a...))) + return err + }) +} + type group struct { children []Node } diff --git a/gomponents_test.go b/gomponents_test.go index ffde46d..32304f3 100644 --- a/gomponents_test.go +++ b/gomponents_test.go @@ -212,6 +212,21 @@ func ExampleRaw() { // Output: <span><button onclick="javascript:alert('Party time!')">Party hats</button> > normal hats.</span> } +func TestRawf(t *testing.T) { + t.Run("renders interpolated and raw text", func(t *testing.T) { + e := g.Rawf("<%v>", "div") + assert.Equal(t, "<div>", e) + }) +} + +func ExampleRawf() { + e := g.El("span", + g.Rawf(`<button onclick="javascript:alert('%v')">Party hats</button> > normal hats.`, "Party time!"), + ) + _ = e.Render(os.Stdout) + // Output: <span><button onclick="javascript:alert('Party time!')">Party hats</button> > normal hats.</span> +} + func TestGroup(t *testing.T) { t.Run("groups multiple nodes into one", func(t *testing.T) { children := []g.Node{g.El("br", g.Attr("id", "hat")), g.El("hr")} |