From 59e98d8a52987fdc849c47de6e80d41a5e432ea1 Mon Sep 17 00:00:00 2001 From: maddalax Date: Wed, 25 Sep 2024 09:53:09 -0500 Subject: [PATCH] add some more tags --- framework/h/tag.go | 180 +++++++++++++++++++++++++++++++++++++- htmgo-site/pages/index.go | 10 +-- 2 files changed, 183 insertions(+), 7 deletions(-) diff --git a/framework/h/tag.go b/framework/h/tag.go index 7fe9961..8ea560c 100644 --- a/framework/h/tag.go +++ b/framework/h/tag.go @@ -29,7 +29,7 @@ func Text(text string) *TextContent { } func Pf(format string, args ...interface{}) Ren { - return P(Text(fmt.Sprintf(format, args...))) + return TagF("p", format, args...) } func Tag(tag string, children ...Ren) *Element { @@ -167,6 +167,22 @@ func Input(inputType string, children ...Ren) Ren { } } +func TextInput(children ...Ren) Ren { + return Input("text", children...) +} + +func NumberInput(children ...Ren) Ren { + return Input("number", children...) +} + +func FileInput(children ...Ren) Ren { + return Input("file", children...) +} + +func Radio(children ...Ren) Ren { + return Input("radio", children...) +} + func IterMap[T any](m map[string]T, mapper func(key string, value T) *Element) *Element { node := &Element{ tag: "", @@ -213,30 +229,88 @@ func P(children ...Ren) *Element { return Tag("p", children...) } +func TagF(tag string, format string, args ...interface{}) *Element { + + /* + An invocation can look like + h.H3F("build simple and scalable systems with %s", "go + htmx", h.Class("-mt-4")), + + where the args may be a mix of strings, *Element, *AttributeMap, *ChildList, *AttributeR + We need to separate the children from the format arguments + */ + children := make([]Ren, 0) + fmtArgs := make([]interface{}, 0) + for _, arg := range args { + switch d := arg.(type) { + case *Element: + children = append(children, d) + case *AttributeMap: + children = append(children, d) + case *ChildList: + for _, child := range d.Children { + children = append(children, child) + } + case *AttributeR: + children = append(children, d) + default: + fmtArgs = append(fmtArgs, d) + } + } + + combined := Children(Text(fmt.Sprintf(format, fmtArgs...))) + combined.Children = append(combined.Children, children...) + + return Tag(tag, combined) +} + func H1(children ...Ren) *Element { return Tag("h1", children...) } +func H1F(format string, args ...interface{}) *Element { + return TagF("h1", format, args...) +} + func H2(children ...Ren) *Element { return Tag("h2", children...) } +func H2F(format string, args ...interface{}) *Element { + return TagF("h2", format, args...) +} + func H3(children ...Ren) *Element { return Tag("h3", children...) } +func H3F(format string, args ...interface{}) *Element { + return TagF("h3", format, args...) +} + func H4(children ...Ren) *Element { return Tag("h4", children...) } +func H4F(format string, args ...interface{}) *Element { + return TagF("h4", format, args...) +} + func H5(children ...Ren) *Element { return Tag("h5", children...) } +func H5F(format string, args ...interface{}) *Element { + return TagF("h5", format, args...) +} + func H6(children ...Ren) *Element { return Tag("h6", children...) } +func H6F(format string, args ...interface{}) *Element { + return TagF("h6", format, args...) +} + func Img(children ...Ren) *Element { return Tag("img", children...) } @@ -270,3 +344,107 @@ func Children(children ...Ren) *ChildList { func Label(text string) *Element { return Tag("label", Text(text)) } + +func IFrame(src string) *Element { + return Tag("iframe", Src(src)) +} + +func Address(children ...Ren) *Element { + return Tag("address", children...) +} + +func Span(children ...Ren) *Element { + return Tag("span", children...) +} + +func Aside(children ...Ren) *Element { + return Tag("aside", children...) +} + +func Section(children ...Ren) *Element { + return Tag("section", children...) +} + +func Code(children ...Ren) *Element { + return Tag("code", children...) +} + +func Dialog(children ...Ren) *Element { + return Tag("dialog", children...) +} + +func FieldSet(children ...Ren) *Element { + return Tag("fieldset", children...) +} + +func Footer(children ...Ren) *Element { + return Tag("footer", children...) +} + +func Header(children ...Ren) *Element { + return Tag("header", children...) +} + +func Hr() *Element { + return Tag("hr") +} + +func LabelFor(id string, text string) *Element { + return Tag("label", Attribute("for", id), Text(text)) +} + +func Main(children ...Ren) *Element { + return Tag("main", children...) +} + +func Ol(children ...Ren) *Element { + return Tag("ol", children...) +} + +func Ul(children ...Ren) *Element { + return Tag("ul", children...) +} + +func Select(children ...Ren) *Element { + return Tag("select", children...) +} + +func Option(children ...Ren) *Element { + return Tag("option", children...) +} + +func Strong(children ...Ren) *Element { + return Tag("strong", children...) +} + +func Table(children ...Ren) *Element { + return Tag("table", children...) +} + +func TBody(children ...Ren) *Element { + return Tag("tbody", children...) +} + +func Td(children ...Ren) *Element { + return Tag("td", children...) +} + +func Th(children ...Ren) *Element { + return Tag("th", children...) +} + +func Tr(children ...Ren) *Element { + return Tag("tr", children...) +} + +func THead(children ...Ren) *Element { + return Tag("thead", children...) +} + +func TFoot(children ...Ren) *Element { + return Tag("tfoot", children...) +} + +func Abbr(children ...Ren) *Element { + return Tag("abbr", children...) +} diff --git a/htmgo-site/pages/index.go b/htmgo-site/pages/index.go index 7f010d6..0aad8e1 100644 --- a/htmgo-site/pages/index.go +++ b/htmgo-site/pages/index.go @@ -14,13 +14,11 @@ func IndexPage(ctx *h.RequestContext) *h.Page { h.Div( h.Class("flex flex-col mb-6 md:mb-0 md:flex-row justify-between items-center"), h.Div( - h.H1( - h.Class("text-center md:text-left"), - h.Text("htmgo"), - ), - h.H3( + h.H1F("htmgo", h.Class("text-center md:text-left")), + h.H3F( + "build simple and scalable systems with %s", + "go + htmx", h.Class("-mt-4"), - h.TextF("build simple and scalable systems with go + htmx"), ), ), h.Div(