From 18e90339fcac48806a5777766aeb256be2b8c4bc Mon Sep 17 00:00:00 2001 From: Markus Wüstenberg Date: Wed, 28 Oct 2020 16:16:18 +0100 Subject: Add element helpers and refactor (#34) This change adds a lot of element helpers, and refactors: - helpers into simple, text, and other helpers - most tests into table-driven tests, so they're easier to read Thanks to @oderwat for pushing me to improve the tests. 😉--- el/content.go | 33 ------- el/content_test.go | 51 ----------- el/document.go | 57 ------------ el/document_test.go | 63 ------------- el/elements.go | 70 +++++++++++++++ el/elements_test.go | 70 +++++++++++++++ el/form.go | 52 ----------- el/form_test.go | 58 ------------ el/inline.go | 29 ------ el/inline_test.go | 45 ---------- el/media.go | 9 -- el/media_test.go | 15 ---- el/section.go | 80 ----------------- el/section_test.go | 99 -------------------- el/simple.go | 253 ++++++++++++++++++++++++++++++++++++++++++++++++++++ el/simple_test.go | 84 +++++++++++++++++ el/text.go | 131 +++++++++++++++++++++++++++ el/text_test.go | 52 +++++++++++ 18 files changed, 660 insertions(+), 591 deletions(-) delete mode 100644 el/content.go delete mode 100644 el/content_test.go delete mode 100644 el/document.go delete mode 100644 el/document_test.go create mode 100644 el/elements.go create mode 100644 el/elements_test.go delete mode 100644 el/form.go delete mode 100644 el/form_test.go delete mode 100644 el/inline.go delete mode 100644 el/inline_test.go delete mode 100644 el/media.go delete mode 100644 el/media_test.go delete mode 100644 el/section.go delete mode 100644 el/section_test.go create mode 100644 el/simple.go create mode 100644 el/simple_test.go create mode 100644 el/text.go create mode 100644 el/text_test.go (limited to 'el') diff --git a/el/content.go b/el/content.go deleted file mode 100644 index a4bcd61..0000000 --- a/el/content.go +++ /dev/null @@ -1,33 +0,0 @@ -package el - -import ( - g "github.com/maragudk/gomponents" -) - -func Div(children ...g.Node) g.NodeFunc { - return g.El("div", children...) -} - -func Ol(children ...g.Node) g.NodeFunc { - return g.El("ol", children...) -} - -func Ul(children ...g.Node) g.NodeFunc { - return g.El("ul", children...) -} - -func Li(children ...g.Node) g.NodeFunc { - return g.El("li", children...) -} - -func P(children ...g.Node) g.NodeFunc { - return g.El("p", children...) -} - -func Br(children ...g.Node) g.NodeFunc { - return g.El("br", children...) -} - -func Hr(children ...g.Node) g.NodeFunc { - return g.El("hr", children...) -} diff --git a/el/content_test.go b/el/content_test.go deleted file mode 100644 index 9cb1d52..0000000 --- a/el/content_test.go +++ /dev/null @@ -1,51 +0,0 @@ -package el_test - -import ( - "testing" - - g "github.com/maragudk/gomponents" - "github.com/maragudk/gomponents/assert" - "github.com/maragudk/gomponents/el" -) - -func TestDiv(t *testing.T) { - t.Run("returns a div element", func(t *testing.T) { - assert.Equal(t, `
hat
`, el.P(g.Text("hat"))) - }) -} - -func TestBr(t *testing.T) { - t.Run("returns a br element in context", func(t *testing.T) { - assert.Equal(t, `Test
Me
`, el.Document(g.El("html"))) - }) -} - -func TestHTML(t *testing.T) { - t.Run("returns an html element", func(t *testing.T) { - assert.Equal(t, "
", 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, "
", 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, "
", 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, "
", el.Title("hat"))
- })
-}
-
-func TestMeta(t *testing.T) {
- t.Run("returns a meta element", func(t *testing.T) {
- assert.Equal(t, ``, el.Meta(g.Attr("charset", "utf-8")))
- })
-}
-
-func TestLink(t *testing.T) {
- t.Run("returns a link element", func(t *testing.T) {
- assert.Equal(t, ``, el.Link(g.Attr("rel", "stylesheet")))
- })
-}
-
-func TestStyle(t *testing.T) {
- t.Run("returns a style element", func(t *testing.T) {
- assert.Equal(t, ``, el.Style(g.Attr("type", "text/css")))
- })
-}
-
-func TestBase(t *testing.T) {
- t.Run("returns a base element", func(t *testing.T) {
- assert.Equal(t, `
`, el.Document(g.El("html"))) + }) +} + +func TestForm(t *testing.T) { + t.Run("returns a form element with action and method attributes", func(t *testing.T) { + assert.Equal(t, `
`, el.Form("/", "post"))
+ })
+}
+
+func TestInput(t *testing.T) {
+ t.Run("returns an input element with attributes type and name", func(t *testing.T) {
+ assert.Equal(t, ``, el.Input("text", "hat"))
+ })
+}
+
+func TestLabel(t *testing.T) {
+ t.Run("returns a label element with attribute for", func(t *testing.T) {
+ assert.Equal(t, ``, el.Label("hat", g.Text("Hat")))
+ })
+}
+
+func TestOption(t *testing.T) {
+ t.Run("returns an option element with attribute label and content", func(t *testing.T) {
+ assert.Equal(t, ``, el.Option("Hat", "hat"))
+ })
+}
+
+func TestProgress(t *testing.T) {
+ t.Run("returns a progress element with attributes value and max", func(t *testing.T) {
+ assert.Equal(t, ``, el.Progress(5.5, 10))
+ })
+}
+
+func TestSelect(t *testing.T) {
+ t.Run("returns a select element with attribute name", func(t *testing.T) {
+ assert.Equal(t, ``,
+ el.Select("hat", el.Option("Partyhat", "partyhat")))
+ })
+}
+
+func TestTextarea(t *testing.T) {
+ t.Run("returns a textarea element with attribute name", func(t *testing.T) {
+ assert.Equal(t, ``, el.Textarea("hat"))
+ })
+}
+
+func TestA(t *testing.T) {
+ t.Run("returns an a element with a href attribute", func(t *testing.T) {
+ assert.Equal(t, `hat`, el.A("#", g.Text("hat")))
+ })
+}
+
+func TestImg(t *testing.T) {
+ t.Run("returns an img element with href and alt attributes", func(t *testing.T) {
+ assert.Equal(t, ``, el.Img("hat.png", "hat", g.Attr("id", "image")))
+ })
+}
diff --git a/el/form.go b/el/form.go
deleted file mode 100644
index 25f89c7..0000000
--- a/el/form.go
+++ /dev/null
@@ -1,52 +0,0 @@
-package el
-
-import (
- "fmt"
-
- g "github.com/maragudk/gomponents"
-)
-
-// Button returns an element with name "button" and the given children.
-func Button(children ...g.Node) g.NodeFunc {
- return g.El("button", children...)
-}
-
-// Form returns an element with name "form", the given action and method attributes, and the given children.
-func Form(action, method string, children ...g.Node) g.NodeFunc {
- return g.El("form", g.Attr("action", action), g.Attr("method", method), g.Group(children))
-}
-
-// Input returns an element with name "input", the given type and name attributes, and the given children.
-// Note that "type" is a keyword in Go, so the parameter is called typ.
-func Input(typ, name string, children ...g.Node) g.NodeFunc {
- return g.El("input", g.Attr("type", typ), g.Attr("name", name), g.Group(children))
-}
-
-// Label returns an element with name "label", the given for attribute, and the given children.
-// Note that "for" is a keyword in Go, so the parameter is called forr.
-func Label(forr string, children ...g.Node) g.NodeFunc {
- return g.El("label", g.Attr("for", forr), g.Group(children))
-}
-
-// Option returns an element with name "option", the given text content and value attribute, and the given children.
-func Option(text, value string, children ...g.Node) g.NodeFunc {
- return g.El("option", g.Attr("value", value), g.Text(text), g.Group(children))
-}
-
-// Progress returns an element with name "progress", the given value and max attributes, and the given children.
-func Progress(value, max float64, children ...g.Node) g.NodeFunc {
- return g.El("progress",
- g.Attr("value", fmt.Sprintf("%v", value)),
- g.Attr("max", fmt.Sprintf("%v", max)),
- g.Group(children))
-}
-
-// Select returns an element with name "select", the given name attribute, and the given children.
-func Select(name string, children ...g.Node) g.NodeFunc {
- return g.El("select", g.Attr("name", name), g.Group(children))
-}
-
-// Textarea returns an element with name "textarea", the given name attribute, and the given children.
-func Textarea(name string, children ...g.Node) g.NodeFunc {
- return g.El("textarea", g.Attr("name", name), g.Group(children))
-}
diff --git a/el/form_test.go b/el/form_test.go
deleted file mode 100644
index 2f43036..0000000
--- a/el/form_test.go
+++ /dev/null
@@ -1,58 +0,0 @@
-package el_test
-
-import (
- "testing"
-
- g "github.com/maragudk/gomponents"
- "github.com/maragudk/gomponents/assert"
- "github.com/maragudk/gomponents/el"
-)
-
-func TestButton(t *testing.T) {
- t.Run("returns a button element", func(t *testing.T) {
- assert.Equal(t, ``, el.Button())
- })
-}
-
-func TestForm(t *testing.T) {
- t.Run("returns a form element with action and method attributes", func(t *testing.T) {
- assert.Equal(t, `
`, el.Form("/", "post"))
- })
-}
-
-func TestInput(t *testing.T) {
- t.Run("returns an input element with attributes type and name", func(t *testing.T) {
- assert.Equal(t, ``, el.Input("text", "hat"))
- })
-}
-
-func TestLabel(t *testing.T) {
- t.Run("returns a label element with attribute for", func(t *testing.T) {
- assert.Equal(t, ``, el.Label("hat", g.Text("Hat")))
- })
-}
-
-func TestOption(t *testing.T) {
- t.Run("returns an option element with attribute label and content", func(t *testing.T) {
- assert.Equal(t, ``, el.Option("Hat", "hat"))
- })
-}
-
-func TestProgress(t *testing.T) {
- t.Run("returns a progress element with attributes value and max", func(t *testing.T) {
- assert.Equal(t, ``, el.Progress(5.5, 10))
- })
-}
-
-func TestSelect(t *testing.T) {
- t.Run("returns a select element with attribute name", func(t *testing.T) {
- assert.Equal(t, ``,
- el.Select("hat", el.Option("Partyhat", "partyhat")))
- })
-}
-
-func TestTextarea(t *testing.T) {
- t.Run("returns a textarea element with attribute name", func(t *testing.T) {
- assert.Equal(t, ``, el.Textarea("hat"))
- })
-}
diff --git a/el/inline.go b/el/inline.go
deleted file mode 100644
index e0530d3..0000000
--- a/el/inline.go
+++ /dev/null
@@ -1,29 +0,0 @@
-package el
-
-import (
- g "github.com/maragudk/gomponents"
-)
-
-func Span(children ...g.Node) g.NodeFunc {
- return g.El("span", children...)
-}
-
-func A(href string, children ...g.Node) g.NodeFunc {
- return g.El("a", g.Attr("href", href), g.Group(children))
-}
-
-func B(text string, children ...g.Node) g.NodeFunc {
- return g.El("b", g.Text(text), g.Group(children))
-}
-
-func Strong(text string, children ...g.Node) g.NodeFunc {
- return g.El("strong", g.Text(text), g.Group(children))
-}
-
-func I(text string, children ...g.Node) g.NodeFunc {
- return g.El("i", g.Text(text), g.Group(children))
-}
-
-func Em(text string, children ...g.Node) g.NodeFunc {
- return g.El("em", g.Text(text), g.Group(children))
-}
diff --git a/el/inline_test.go b/el/inline_test.go
deleted file mode 100644
index 0873bc2..0000000
--- a/el/inline_test.go
+++ /dev/null
@@ -1,45 +0,0 @@
-package el_test
-
-import (
- "testing"
-
- g "github.com/maragudk/gomponents"
- "github.com/maragudk/gomponents/assert"
- "github.com/maragudk/gomponents/el"
-)
-
-func TestSpan(t *testing.T) {
- t.Run("returns a span element", func(t *testing.T) {
- assert.Equal(t, `hat`, el.Span(g.Text("hat")))
- })
-}
-
-func TestA(t *testing.T) {
- t.Run("returns an a element with a href attribute", func(t *testing.T) {
- assert.Equal(t, `hat`, el.A("#", g.Text("hat")))
- })
-}
-
-func TestB(t *testing.T) {
- t.Run("returns a b element", func(t *testing.T) {
- assert.Equal(t, `hat`, el.B("hat", g.Attr("id", "text")))
- })
-}
-
-func TestStrong(t *testing.T) {
- t.Run("returns a strong element", func(t *testing.T) {
- assert.Equal(t, `hat`, el.Strong("hat", g.Attr("id", "text")))
- })
-}
-
-func TestI(t *testing.T) {
- t.Run("returns an i element", func(t *testing.T) {
- assert.Equal(t, `hat`, el.I("hat", g.Attr("id", "text")))
- })
-}
-
-func TestEm(t *testing.T) {
- t.Run("returns an em element", func(t *testing.T) {
- assert.Equal(t, `hat`, el.Em("hat", g.Attr("id", "text")))
- })
-}
diff --git a/el/media.go b/el/media.go
deleted file mode 100644
index 89787da..0000000
--- a/el/media.go
+++ /dev/null
@@ -1,9 +0,0 @@
-package el
-
-import (
- g "github.com/maragudk/gomponents"
-)
-
-func Img(src, alt string, children ...g.Node) g.NodeFunc {
- return g.El("img", g.Attr("src", src), g.Attr("alt", alt), g.Group(children))
-}
diff --git a/el/media_test.go b/el/media_test.go
deleted file mode 100644
index 0c078dd..0000000
--- a/el/media_test.go
+++ /dev/null
@@ -1,15 +0,0 @@
-package el_test
-
-import (
- "testing"
-
- g "github.com/maragudk/gomponents"
- "github.com/maragudk/gomponents/assert"
- "github.com/maragudk/gomponents/el"
-)
-
-func TestImg(t *testing.T) {
- t.Run("returns an img element with href and alt attributes", func(t *testing.T) {
- assert.Equal(t, ``, el.Img("hat.png", "hat", g.Attr("id", "image")))
- })
-}
diff --git a/el/section.go b/el/section.go
deleted file mode 100644
index f49a39c..0000000
--- a/el/section.go
+++ /dev/null
@@ -1,80 +0,0 @@
-package el
-
-import (
- g "github.com/maragudk/gomponents"
-)
-
-// Address returns an element with name "address" and the given children.
-func Address(children ...g.Node) g.NodeFunc {
- return g.El("address", children...)
-}
-
-// Article returns an element with name "article" and the given children.
-func Article(children ...g.Node) g.NodeFunc {
- return g.El("article", children...)
-}
-
-// Aside returns an element with name "aside" and the given children.
-func Aside(children ...g.Node) g.NodeFunc {
- return g.El("aside", children...)
-}
-
-// Footer returns an element with name "footer" and the given children.
-func Footer(children ...g.Node) g.NodeFunc {
- return g.El("footer", children...)
-}
-
-// Header returns an element with name "header" and the given children.
-func Header(children ...g.Node) g.NodeFunc {
- return g.El("header", children...)
-}
-
-// H1 returns an element with name "h1", the given text content, and the given children.
-func H1(text string, children ...g.Node) g.NodeFunc {
- return g.El("h1", g.Text(text), g.Group(children))
-}
-
-// H2 returns an element with name "h2", the given text content, and the given children.
-func H2(text string, children ...g.Node) g.NodeFunc {
- return g.El("h2", g.Text(text), g.Group(children))
-}
-
-// H3 returns an element with name "h3", the given text content, and the given children.
-func H3(text string, children ...g.Node) g.NodeFunc {
- return g.El("h3", g.Text(text), g.Group(children))
-}
-
-// H4 returns an element with name "h4", the given text content, and the given children.
-func H4(text string, children ...g.Node) g.NodeFunc {
- return g.El("h4", g.Text(text), g.Group(children))
-}
-
-// H5 returns an element with name "h5", the given text content, and the given children.
-func H5(text string, children ...g.Node) g.NodeFunc {
- return g.El("h5", g.Text(text), g.Group(children))
-}
-
-// H6 returns an element with name "h6", the given text content, and the given children.
-func H6(text string, children ...g.Node) g.NodeFunc {
- return g.El("h6", g.Text(text), g.Group(children))
-}
-
-// HGroup returns an element with name "hgroup" and the given children.
-func HGroup(children ...g.Node) g.NodeFunc {
- return g.El("hgroup", children...)
-}
-
-// Main returns an element with name "main" and the given children.
-func Main(children ...g.Node) g.NodeFunc {
- return g.El("main", children...)
-}
-
-// Nav returns an element with name "nav" and the given children.
-func Nav(children ...g.Node) g.NodeFunc {
- return g.El("nav", children...)
-}
-
-// Section returns an element with name "section" and the given children.
-func Section(children ...g.Node) g.NodeFunc {
- return g.El("section", children...)
-}
diff --git a/el/section_test.go b/el/section_test.go
deleted file mode 100644
index 11c60fb..0000000
--- a/el/section_test.go
+++ /dev/null
@@ -1,99 +0,0 @@
-package el_test
-
-import (
- "testing"
-
- g "github.com/maragudk/gomponents"
- "github.com/maragudk/gomponents/assert"
- "github.com/maragudk/gomponents/el"
-)
-
-func TestAddress(t *testing.T) {
- t.Run("returns an address element", func(t *testing.T) {
- assert.Equal(t, `
`, el.Address())
- })
-}
-
-func TestArticle(t *testing.T) {
- t.Run("returns an article element", func(t *testing.T) {
- assert.Equal(t, ``, el.Article())
- })
-}
-
-func TestAside(t *testing.T) {
- t.Run("returns an aside element", func(t *testing.T) {
- assert.Equal(t, ``, el.Aside())
- })
-}
-
-func TestFooter(t *testing.T) {
- t.Run("returns a footer element", func(t *testing.T) {
- assert.Equal(t, ``, el.Footer())
- })
-}
-
-func TestHeader(t *testing.T) {
- t.Run("returns a header element", func(t *testing.T) {
- assert.Equal(t, `
`, el.H1("hat", g.Attr("id", "headline"))) - }) -} - -func TestH2(t *testing.T) { - t.Run("returns an h2 element", func(t *testing.T) { - assert.Equal(t, `
`, el.H2("hat", g.Attr("id", "headline"))) - }) -} - -func TestH3(t *testing.T) { - t.Run("returns an h3 element", func(t *testing.T) { - assert.Equal(t, `
`, el.H3("hat", g.Attr("id", "headline"))) - }) -} - -func TestH4(t *testing.T) { - t.Run("returns an h4 element", func(t *testing.T) { - assert.Equal(t, `
`, el.H4("hat", g.Attr("id", "headline"))) - }) -} - -func TestH5(t *testing.T) { - t.Run("returns an h5 element", func(t *testing.T) { - assert.Equal(t, `
`, el.H5("hat", g.Attr("id", "headline"))) - }) -} - -func TestH6(t *testing.T) { - t.Run("returns an h6 element", func(t *testing.T) { - assert.Equal(t, `
`, el.H6("hat", g.Attr("id", "headline"))) - }) -} - -func TestHGroup(t *testing.T) { - t.Run("returns an hgroup element", func(t *testing.T) { - assert.Equal(t, ``, el.HGroup()) - }) -} - -func TestMainEl(t *testing.T) { - t.Run("returns a main element", func(t *testing.T) { - assert.Equal(t, ``, el.Main()) - }) -} - -func TestNav(t *testing.T) { - t.Run("returns a nav element", func(t *testing.T) { - assert.Equal(t, ``, el.Nav()) - }) -} - -func TestSection(t *testing.T) { - t.Run("returns a section element", func(t *testing.T) { - assert.Equal(t, ``, el.Section()) - }) -} diff --git a/el/simple.go b/el/simple.go new file mode 100644 index 0000000..2fb4c3e --- /dev/null +++ b/el/simple.go @@ -0,0 +1,253 @@ +package el + +import ( + g "github.com/maragudk/gomponents" +) + +func Address(children ...g.Node) g.NodeFunc { + return g.El("address", children...) +} + +func Area(children ...g.Node) g.NodeFunc { + return g.El("area", children...) +} + +func Article(children ...g.Node) g.NodeFunc { + return g.El("article", children...) +} + +func Aside(children ...g.Node) g.NodeFunc { + return g.El("aside", children...) +} + +func Audio(children ...g.Node) g.NodeFunc { + return g.El("audio", children...) +} + +func Base(children ...g.Node) g.NodeFunc { + return g.El("base", children...) +} + +func BlockQuote(children ...g.Node) g.NodeFunc { + return g.El("blockquote", children...) +} + +func Body(children ...g.Node) g.NodeFunc { + return g.El("body", children...) +} + +func Br(children ...g.Node) g.NodeFunc { + return g.El("br", children...) +} + +func Button(children ...g.Node) g.NodeFunc { + return g.El("button", children...) +} + +func Canvas(children ...g.Node) g.NodeFunc { + return g.El("canvas", children...) +} + +func Cite(children ...g.Node) g.NodeFunc { + return g.El("cite", children...) +} + +func Code(children ...g.Node) g.NodeFunc { + return g.El("code", children...) +} + +func Col(children ...g.Node) g.NodeFunc { + return g.El("col", children...) +} + +func ColGroup(children ...g.Node) g.NodeFunc { + return g.El("colgroup", children...) +} + +func Data(children ...g.Node) g.NodeFunc { + return g.El("data", children...) +} + +func DataList(children ...g.Node) g.NodeFunc { + return g.El("datalist", children...) +} + +func Details(children ...g.Node) g.NodeFunc { + return g.El("details", children...) +} + +func Dialog(children ...g.Node) g.NodeFunc { + return g.El("dialog", children...) +} + +func Div(children ...g.Node) g.NodeFunc { + return g.El("div", children...) +} + +func Dl(children ...g.Node) g.NodeFunc { + return g.El("dl", children...) +} + +func Embed(children ...g.Node) g.NodeFunc { + return g.El("embed", children...) +} + +func FieldSet(children ...g.Node) g.NodeFunc { + return g.El("fieldset", children...) +} + +func Figure(children ...g.Node) g.NodeFunc { + return g.El("figure", children...) +} + +func Footer(children ...g.Node) g.NodeFunc { + return g.El("footer", children...) +} + +func Head(children ...g.Node) g.NodeFunc { + return g.El("head", children...) +} + +func Header(children ...g.Node) g.NodeFunc { + return g.El("header", children...) +} + +func HGroup(children ...g.Node) g.NodeFunc { + return g.El("hgroup", children...) +} + +func Hr(children ...g.Node) g.NodeFunc { + return g.El("hr", children...) +} + +func HTML(children ...g.Node) g.NodeFunc { + return g.El("html", children...) +} + +func IFrame(children ...g.Node) g.NodeFunc { + return g.El("iframe", children...) +} + +func Legend(children ...g.Node) g.NodeFunc { + return g.El("legend", children...) +} + +func Li(children ...g.Node) g.NodeFunc { + return g.El("li", children...) +} + +func Link(children ...g.Node) g.NodeFunc { + return g.El("link", children...) +} + +func Main(children ...g.Node) g.NodeFunc { + return g.El("main", children...) +} + +func Menu(children ...g.Node) g.NodeFunc { + return g.El("menu", children...) +} + +func Meta(children ...g.Node) g.NodeFunc { + return g.El("meta", children...) +} + +func Meter(children ...g.Node) g.NodeFunc { + return g.El("meter", children...) +} + +func Nav(children ...g.Node) g.NodeFunc { + return g.El("nav", children...) +} + +func NoScript(children ...g.Node) g.NodeFunc { + return g.El("noscript", children...) +} + +func Object(children ...g.Node) g.NodeFunc { + return g.El("object", children...) +} + +func Ol(children ...g.Node) g.NodeFunc { + return g.El("ol", children...) +} + +func OptGroup(children ...g.Node) g.NodeFunc { + return g.El("optgroup", children...) +} + +func P(children ...g.Node) g.NodeFunc { + return g.El("p", children...) +} + +func Param(children ...g.Node) g.NodeFunc { + return g.El("param", children...) +} + +func Picture(children ...g.Node) g.NodeFunc { + return g.El("picture", children...) +} + +func Pre(children ...g.Node) g.NodeFunc { + return g.El("pre", children...) +} + +func Script(children ...g.Node) g.NodeFunc { + return g.El("script", children...) +} + +func Section(children ...g.Node) g.NodeFunc { + return g.El("section", children...) +} + +func Source(children ...g.Node) g.NodeFunc { + return g.El("source", children...) +} + +func Span(children ...g.Node) g.NodeFunc { + return g.El("span", children...) +} + +func Style(children ...g.Node) g.NodeFunc { + return g.El("style", children...) +} + +func Summary(children ...g.Node) g.NodeFunc { + return g.El("summary", children...) +} + +func Table(children ...g.Node) g.NodeFunc { + return g.El("table", children...) +} + +func TBody(children ...g.Node) g.NodeFunc { + return g.El("tbody", children...) +} + +func Td(children ...g.Node) g.NodeFunc { + return g.El("td", children...) +} + +func TFoot(children ...g.Node) g.NodeFunc { + return g.El("tfoot", children...) +} + +func Th(children ...g.Node) g.NodeFunc { + return g.El("th", children...) +} + +func THead(children ...g.Node) g.NodeFunc { + return g.El("thead", children...) +} + +func Tr(children ...g.Node) g.NodeFunc { + return g.El("tr", children...) +} + +func Ul(children ...g.Node) g.NodeFunc { + return g.El("ul", children...) +} + +func Wbr(children ...g.Node) g.NodeFunc { + return g.El("wbr", children...) +} diff --git a/el/simple_test.go b/el/simple_test.go new file mode 100644 index 0000000..d388e1e --- /dev/null +++ b/el/simple_test.go @@ -0,0 +1,84 @@ +package el_test + +import ( + "fmt" + "testing" + + g "github.com/maragudk/gomponents" + "github.com/maragudk/gomponents/assert" + "github.com/maragudk/gomponents/el" +) + +func TestSimpleElements(t *testing.T) { + cases := map[string]func(...g.Node) g.NodeFunc{ + "address": el.Address, + "area": el.Area, + "article": el.Article, + "aside": el.Aside, + "audio": el.Audio, + "base": el.Base, + "blockquote": el.BlockQuote, + "body": el.Body, + "br": el.Br, + "button": el.Button, + "canvas": el.Canvas, + "cite": el.Cite, + "code": el.Code, + "col": el.Col, + "colgroup": el.ColGroup, + "data": el.Data, + "datalist": el.DataList, + "details": el.Details, + "dialog": el.Dialog, + "div": el.Div, + "dl": el.Dl, + "embed": el.Embed, + "fieldset": el.FieldSet, + "figure": el.Figure, + "footer": el.Footer, + "head": el.Head, + "header": el.Header, + "hgroup": el.HGroup, + "hr": el.Hr, + "html": el.HTML, + "iframe": el.IFrame, + "legend": el.Legend, + "li": el.Li, + "link": el.Link, + "main": el.Main, + "menu": el.Menu, + "meta": el.Meta, + "meter": el.Meter, + "nav": el.Nav, + "noscript": el.NoScript, + "object": el.Object, + "ol": el.Ol, + "optgroup": el.OptGroup, + "p": el.P, + "param": el.Param, + "picture": el.Picture, + "pre": el.Pre, + "script": el.Script, + "section": el.Section, + "source": el.Source, + "span": el.Span, + "style": el.Style, + "summary": el.Summary, + "table": el.Table, + "tbody": el.TBody, + "td": el.Td, + "tfoot": el.TFoot, + "th": el.Th, + "thead": el.THead, + "tr": el.Tr, + "ul": el.Ul, + "wbr": el.Wbr, + } + + for name, fn := range cases { + t.Run(fmt.Sprintf("should output %v", name), func(t *testing.T) { + n := fn(g.Attr("id", "hat")) + assert.Equal(t, fmt.Sprintf(`<%v id="hat" />`, name), n) + }) + } +} diff --git a/el/text.go b/el/text.go new file mode 100644 index 0000000..6ab88db --- /dev/null +++ b/el/text.go @@ -0,0 +1,131 @@ +package el + +import ( + g "github.com/maragudk/gomponents" +) + +func Abbr(text string, children ...g.Node) g.NodeFunc { + return g.El("abbr", g.Text(text), g.Group(children)) +} + +func B(text string, children ...g.Node) g.NodeFunc { + return g.El("b", g.Text(text), g.Group(children)) +} + +func Caption(text string, children ...g.Node) g.NodeFunc { + return g.El("caption", g.Text(text), g.Group(children)) +} + +func Dd(text string, children ...g.Node) g.NodeFunc { + return g.El("dd", g.Text(text), g.Group(children)) +} + +func Del(text string, children ...g.Node) g.NodeFunc { + return g.El("del", g.Text(text), g.Group(children)) +} + +func Dfn(text string, children ...g.Node) g.NodeFunc { + return g.El("dfn", g.Text(text), g.Group(children)) +} + +func Dt(text string, children ...g.Node) g.NodeFunc { + return g.El("dt", g.Text(text), g.Group(children)) +} + +func Em(text string, children ...g.Node) g.NodeFunc { + return g.El("em", g.Text(text), g.Group(children)) +} + +func FigCaption(text string, children ...g.Node) g.NodeFunc { + return g.El("figcaption", g.Text(text), g.Group(children)) +} + +// H1 returns an element with name "h1", the given text content, and the given children. +func H1(text string, children ...g.Node) g.NodeFunc { + return g.El("h1", g.Text(text), g.Group(children)) +} + +// H2 returns an element with name "h2", the given text content, and the given children. +func H2(text string, children ...g.Node) g.NodeFunc { + return g.El("h2", g.Text(text), g.Group(children)) +} + +// H3 returns an element with name "h3", the given text content, and the given children. +func H3(text string, children ...g.Node) g.NodeFunc { + return g.El("h3", g.Text(text), g.Group(children)) +} + +// H4 returns an element with name "h4", the given text content, and the given children. +func H4(text string, children ...g.Node) g.NodeFunc { + return g.El("h4", g.Text(text), g.Group(children)) +} + +// H5 returns an element with name "h5", the given text content, and the given children. +func H5(text string, children ...g.Node) g.NodeFunc { + return g.El("h5", g.Text(text), g.Group(children)) +} + +// H6 returns an element with name "h6", the given text content, and the given children. +func H6(text string, children ...g.Node) g.NodeFunc { + return g.El("h6", g.Text(text), g.Group(children)) +} + +func I(text string, children ...g.Node) g.NodeFunc { + return g.El("i", g.Text(text), g.Group(children)) +} + +func Ins(text string, children ...g.Node) g.NodeFunc { + return g.El("ins", g.Text(text), g.Group(children)) +} + +func Kbd(text string, children ...g.Node) g.NodeFunc { + return g.El("kbd", g.Text(text), g.Group(children)) +} + +func Mark(text string, children ...g.Node) g.NodeFunc { + return g.El("mark", g.Text(text), g.Group(children)) +} + +func Q(text string, children ...g.Node) g.NodeFunc { + return g.El("q", g.Text(text), g.Group(children)) +} + +func S(text string, children ...g.Node) g.NodeFunc { + return g.El("s", g.Text(text), g.Group(children)) +} + +func Samp(text string, children ...g.Node) g.NodeFunc { + return g.El("samp", g.Text(text), g.Group(children)) +} + +func Small(text string, children ...g.Node) g.NodeFunc { + return g.El("small", g.Text(text), g.Group(children)) +} + +func Strong(text string, children ...g.Node) g.NodeFunc { + return g.El("strong", g.Text(text), g.Group(children)) +} + +func Sub(text string, children ...g.Node) g.NodeFunc { + return g.El("sub", g.Text(text), g.Group(children)) +} + +func Sup(text string, children ...g.Node) g.NodeFunc { + return g.El("sup", g.Text(text), g.Group(children)) +} + +func Time(text string, children ...g.Node) g.NodeFunc { + return g.El("time", g.Text(text), g.Group(children)) +} + +func Title(title string, children ...g.Node) g.NodeFunc { + return g.El("title", g.Text(title), g.Group(children)) +} + +func U(text string, children ...g.Node) g.NodeFunc { + return g.El("u", g.Text(text), g.Group(children)) +} + +func Var(text string, children ...g.Node) g.NodeFunc { + return g.El("var", g.Text(text), g.Group(children)) +} diff --git a/el/text_test.go b/el/text_test.go new file mode 100644 index 0000000..a751e19 --- /dev/null +++ b/el/text_test.go @@ -0,0 +1,52 @@ +package el_test + +import ( + "fmt" + "testing" + + g "github.com/maragudk/gomponents" + "github.com/maragudk/gomponents/assert" + "github.com/maragudk/gomponents/el" +) + +func TestTextElements(t *testing.T) { + cases := map[string]func(string, ...g.Node) g.NodeFunc{ + "abbr": el.Abbr, + "b": el.B, + "caption": el.Caption, + "dd": el.Dd, + "del": el.Del, + "dfn": el.Dfn, + "dt": el.Dt, + "em": el.Em, + "figcaption": el.FigCaption, + "h1": el.H1, + "h2": el.H2, + "h3": el.H3, + "h4": el.H4, + "h5": el.H5, + "h6": el.H6, + "i": el.I, + "ins": el.Ins, + "kbd": el.Kbd, + "mark": el.Mark, + "q": el.Q, + "s": el.S, + "samp": el.Samp, + "small": el.Small, + "strong": el.Strong, + "sub": el.Sub, + "sup": el.Sup, + "time": el.Time, + "title": el.Title, + "u": el.U, + "var": el.Var, + } + + for name, fn := range cases { + t.Run(fmt.Sprintf("should output %v", name), func(t *testing.T) { + n := fn("hat", g.Attr("id", "hat")) + assert.Equal(t, fmt.Sprintf(`<%v id="hat">hat%v>`, name, name), n) + }) + } +} -- cgit 1.4.1