about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--components/attributes_test.go7
-rw-r--r--gomponents.go14
-rw-r--r--gomponents_test.go56
3 files changed, 64 insertions, 13 deletions
diff --git a/components/attributes_test.go b/components/attributes_test.go
index bf3e93b..9de0604 100644
--- a/components/attributes_test.go
+++ b/components/attributes_test.go
@@ -1,6 +1,7 @@
 package components_test
 
 import (
+	"os"
 	"testing"
 
 	g "github.com/maragudk/gomponents"
@@ -30,3 +31,9 @@ func TestClasses(t *testing.T) {
 		}
 	})
 }
+
+func ExampleClasses() {
+	e := g.El("div", c.Classes{"party-hat": true, "boring-hat": false})
+	_ = e.Render(os.Stdout)
+	// Output: <div class="party-hat"></div>
+}
diff --git a/gomponents.go b/gomponents.go
index 9cf4297..5ac6939 100644
--- a/gomponents.go
+++ b/gomponents.go
@@ -1,4 +1,4 @@
-// Package gomponents provides declarative view components in Go, that can render to HTML5.
+// Package gomponents provides view components in Go, that render to HTML 5.
 // The primary interface is a Node, which has a single function Render, which should render
 // the Node to a string. Furthermore, NodeFunc is a function which implements the Node interface
 // by calling itself on Render.
@@ -219,14 +219,6 @@ func Group(children []Node) Node {
 }
 
 // Map something enumerable to a list of Nodes.
-// Example:
-// 	items := []string{"hat", "partyhat"}
-//
-// 	lis := Map(len(items), func(i int) Node {
-// 		return El("li", Text(items[i]))
-// 	})
-//
-// 	list := El("ul", lis...)
 func Map(length int, cb func(i int) Node) []Node {
 	var nodes []Node
 	for i := 0; i < length; i++ {
@@ -237,10 +229,6 @@ func Map(length int, cb func(i int) Node) []Node {
 
 // If condition is true, return the given Node. Otherwise, return nil.
 // This helper function is good for inlining elements conditionally.
-// Example:
-// 	El("div",
-//		If(showMessage, El("span", "You lost your hat.")),
-//	)
 func If(condition bool, n Node) Node {
 	if condition {
 		return n
diff --git a/gomponents_test.go b/gomponents_test.go
index dffa64c..3064c0f 100644
--- a/gomponents_test.go
+++ b/gomponents_test.go
@@ -4,6 +4,7 @@ import (
 	"errors"
 	"fmt"
 	"io"
+	"os"
 	"strings"
 	"testing"
 
@@ -77,6 +78,18 @@ func BenchmarkAttr(b *testing.B) {
 	})
 }
 
+func ExampleAttr_bool() {
+	e := g.El("input", g.Attr("required"))
+	_ = e.Render(os.Stdout)
+	// Output: <input required>
+}
+
+func ExampleAttr_name_value() {
+	e := g.El("div", g.Attr("id", "hat"))
+	_ = e.Render(os.Stdout)
+	// Output: <div id="hat"></div>
+}
+
 type outsider struct{}
 
 func (o outsider) String() string {
@@ -146,6 +159,12 @@ func BenchmarkEl(b *testing.B) {
 	})
 }
 
+func ExampleEl() {
+	e := g.El("div", g.El("span"))
+	_ = e.Render(os.Stdout)
+	// Output: <div><span></span></div>
+}
+
 type erroringWriter struct{}
 
 func (w *erroringWriter) Write(p []byte) (n int, err error) {
@@ -159,6 +178,12 @@ func TestText(t *testing.T) {
 	})
 }
 
+func ExampleText() {
+	e := g.El("span", g.Text("Party hats > normal hats."))
+	_ = e.Render(os.Stdout)
+	// Output: <span>Party hats &gt; normal hats.</span>
+}
+
 func TestTextf(t *testing.T) {
 	t.Run("renders interpolated and escaped text", func(t *testing.T) {
 		e := g.Textf("<%v>", "div")
@@ -166,6 +191,12 @@ func TestTextf(t *testing.T) {
 	})
 }
 
+func ExampleTextf() {
+	e := g.El("span", g.Textf("%v party hats > %v normal hats.", 2, 3))
+	_ = e.Render(os.Stdout)
+	// Output: <span>2 party hats &gt; 3 normal hats.</span>
+}
+
 func TestRaw(t *testing.T) {
 	t.Run("renders raw text", func(t *testing.T) {
 		e := g.Raw("<div>")
@@ -173,6 +204,12 @@ func TestRaw(t *testing.T) {
 	})
 }
 
+func ExampleRaw() {
+	e := g.El("span", g.Raw("<strong>Party</strong> hats &gt; normal hats."))
+	_ = e.Render(os.Stdout)
+	// Output: <span><strong>Party</strong> hats &gt; 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")}
@@ -222,6 +259,15 @@ func TestMap(t *testing.T) {
 	})
 }
 
+func ExampleMap() {
+	items := []string{"party hat", "super hat"}
+	e := g.El("ul", g.Group(g.Map(len(items), func(i int) g.Node {
+		return g.El("li", g.Text(items[i]))
+	})))
+	_ = e.Render(os.Stdout)
+	// Output: <ul><li>party hat</li><li>super hat</li></ul>
+}
+
 func TestIf(t *testing.T) {
 	t.Run("returns node if condition is true", func(t *testing.T) {
 		n := g.El("div", g.If(true, g.El("span")))
@@ -233,3 +279,13 @@ func TestIf(t *testing.T) {
 		assert.Equal(t, "<div></div>", n)
 	})
 }
+
+func ExampleIf() {
+	showMessage := true
+	e := g.El("div",
+		g.If(showMessage, g.El("span", g.Text("You lost your hat!"))),
+		g.If(!showMessage, g.El("span", g.Text("No messages."))),
+	)
+	_ = e.Render(os.Stdout)
+	// Output: <div><span>You lost your hat!</span></div>
+}