diff options
author | Markus Wüstenberg | 2020-09-18 15:01:10 +0200 |
---|---|---|
committer | GitHub | 2020-09-18 15:01:10 +0200 |
commit | 4d9f1c2aedf43dbd0989f4c8165a18ed6a5a33ed (patch) | |
tree | 5086e91883dfd7dd197c0a761049471c390f0b5a /el | |
parent | f7812a9f06d2b97f413b6b33deecba170e05d184 (diff) | |
download | gomponents-4d9f1c2aedf43dbd0989f4c8165a18ed6a5a33ed.tar.lz gomponents-4d9f1c2aedf43dbd0989f4c8165a18ed6a5a33ed.tar.zst gomponents-4d9f1c2aedf43dbd0989f4c8165a18ed6a5a33ed.zip |
Add package el with element helpers (#8)
Diffstat (limited to 'el')
-rw-r--r-- | el/elements.go | 41 | ||||
-rw-r--r-- | el/elements_test.go | 39 |
2 files changed, 80 insertions, 0 deletions
diff --git a/el/elements.go b/el/elements.go new file mode 100644 index 0000000..ecff7e8 --- /dev/null +++ b/el/elements.go @@ -0,0 +1,41 @@ +// Package el provides shortcuts and helpers to common HTML elements. +// See https://developer.mozilla.org/en-US/docs/Web/HTML/Element for a list of elements. +package el + +import ( + "strings" + + g "github.com/maragudk/gomponents" +) + +// Document returns an special kind of Node that prefixes its children with the string "<!doctype html>". +func Document(children ...g.Node) g.NodeFunc { + return func() string { + var b strings.Builder + b.WriteString("<!doctype html>") + for _, c := range children { + b.WriteString(c.Render()) + } + return b.String() + } +} + +// HTML returns an element with name "html" and the given children. +func HTML(children ...g.Node) g.NodeFunc { + return g.El("html", children...) +} + +// Head returns an element with name "head" and the given children. +func Head(children ...g.Node) g.NodeFunc { + return g.El("head", children...) +} + +// Body returns an element with name "body" and the given children. +func Body(children ...g.Node) g.NodeFunc { + return g.El("body", children...) +} + +// Title returns an element with name "title" and a single Text child. +func Title(title string) g.NodeFunc { + return g.El("title", g.Text(title)) +} diff --git a/el/elements_test.go b/el/elements_test.go new file mode 100644 index 0000000..eb0db47 --- /dev/null +++ b/el/elements_test.go @@ -0,0 +1,39 @@ +package el_test + +import ( + "testing" + + g "github.com/maragudk/gomponents" + "github.com/maragudk/gomponents/assert" + "github.com/maragudk/gomponents/el" +) + +func TestDocument(t *testing.T) { + t.Run("returns doctype and children", func(t *testing.T) { + assert.Equal(t, `<!doctype html><html/>`, el.Document(g.El("html"))) + }) +} + +func TestHTML(t *testing.T) { + t.Run("returns an html element", func(t *testing.T) { + assert.Equal(t, "<html><div/><span/></html>", el.HTML(g.El("div"), g.El("span"))) + }) +} + +func TestHead(t *testing.T) { + t.Run("returns a head element", func(t *testing.T) { + assert.Equal(t, "<head><title/><link/></head>", el.Head(g.El("title"), g.El("link"))) + }) +} + +func TestBody(t *testing.T) { + t.Run("returns a body element", func(t *testing.T) { + assert.Equal(t, "<body><div/><span/></body>", el.Body(g.El("div"), g.El("span"))) + }) +} + +func TestTitle(t *testing.T) { + t.Run("returns a title element with text content", func(t *testing.T) { + assert.Equal(t, "<title>hat</title>", el.Title("hat")) + }) +} |