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: > normal hats. } +func TestRawf(t *testing.T) { + t.Run("renders interpolated and raw text", func(t *testing.T) { + e := g.Rawf("<%v>", "div") + assert.Equal(t, "
", e) + }) +} + +func ExampleRawf() { + e := g.El("span", + g.Rawf(` > normal hats.`, "Party time!"), + ) + _ = e.Render(os.Stdout) + // Output: > normal hats. +} + 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")}