feat: add working prototype for via
This commit is contained in:
32
h/attributes.go
Normal file
32
h/attributes.go
Normal file
@@ -0,0 +1,32 @@
|
||||
package h
|
||||
|
||||
import gh "maragu.dev/gomponents/html"
|
||||
|
||||
func Href(v string) H {
|
||||
return gh.Href(v)
|
||||
}
|
||||
|
||||
func Type(v string) H {
|
||||
return gh.Type(v)
|
||||
}
|
||||
|
||||
func Src(v string) H {
|
||||
return gh.Src(v)
|
||||
}
|
||||
|
||||
func ID(v string) H {
|
||||
return gh.ID(v)
|
||||
}
|
||||
|
||||
func Value(v string) H {
|
||||
return gh.Value(v)
|
||||
}
|
||||
|
||||
func Placeholder(v string) H {
|
||||
return gh.Placeholder(v)
|
||||
}
|
||||
|
||||
// Data attributes automatically have their name prefixed with "data-".
|
||||
func Data(name, v string) H {
|
||||
return gh.Data(name, v)
|
||||
}
|
||||
9
h/datastar.go
Normal file
9
h/datastar.go
Normal file
@@ -0,0 +1,9 @@
|
||||
package h
|
||||
|
||||
import "fmt"
|
||||
|
||||
type OnClickOpts string
|
||||
|
||||
func OnClick(actionid string, opt ...OnClickOpts) H {
|
||||
return Data("on:click", fmt.Sprintf("@get('/_action/%s')", actionid))
|
||||
}
|
||||
401
h/elements.go
Normal file
401
h/elements.go
Normal file
@@ -0,0 +1,401 @@
|
||||
package h
|
||||
|
||||
import (
|
||||
gh "maragu.dev/gomponents/html"
|
||||
)
|
||||
|
||||
func A(children ...H) H {
|
||||
return gh.A(retype(children)...)
|
||||
}
|
||||
|
||||
func Abbr(children ...H) H {
|
||||
return gh.Abbr(retype(children)...)
|
||||
}
|
||||
|
||||
func Address(children ...H) H {
|
||||
return gh.Address(retype(children)...)
|
||||
}
|
||||
|
||||
func Area(children ...H) H {
|
||||
return gh.Area(retype(children)...)
|
||||
}
|
||||
|
||||
func Article(children ...H) H {
|
||||
return gh.Article(retype(children)...)
|
||||
}
|
||||
|
||||
func Aside(children ...H) H {
|
||||
return gh.Aside(retype(children)...)
|
||||
}
|
||||
|
||||
func Audio(children ...H) H {
|
||||
return gh.Audio(retype(children)...)
|
||||
}
|
||||
|
||||
func B(children ...H) H {
|
||||
return gh.B(retype(children)...)
|
||||
}
|
||||
|
||||
func Base(children ...H) H {
|
||||
return gh.Base(retype(children)...)
|
||||
}
|
||||
|
||||
func BlockQuote(children ...H) H {
|
||||
return gh.BlockQuote(retype(children)...)
|
||||
}
|
||||
|
||||
func Body(children ...H) H {
|
||||
return gh.Body(retype(children)...)
|
||||
}
|
||||
|
||||
func Br(children ...H) H {
|
||||
return gh.Br(retype(children)...)
|
||||
}
|
||||
|
||||
func Button(children ...H) H {
|
||||
return gh.Button(retype(children)...)
|
||||
}
|
||||
|
||||
func Canvas(children ...H) H {
|
||||
return gh.Canvas(retype(children)...)
|
||||
}
|
||||
|
||||
func Caption(children ...H) H {
|
||||
return gh.Caption(retype(children)...)
|
||||
}
|
||||
|
||||
func Cite(children ...H) H {
|
||||
return gh.Cite(retype(children)...)
|
||||
}
|
||||
|
||||
func Code(children ...H) H {
|
||||
return gh.Code(retype(children)...)
|
||||
}
|
||||
|
||||
func Col(children ...H) H {
|
||||
return gh.Col(retype(children)...)
|
||||
}
|
||||
|
||||
func ColGroup(children ...H) H {
|
||||
return gh.ColGroup(retype(children)...)
|
||||
}
|
||||
|
||||
func DataList(children ...H) H {
|
||||
return gh.DataList(retype(children)...)
|
||||
}
|
||||
|
||||
func Dd(children ...H) H {
|
||||
return gh.Dd(retype(children)...)
|
||||
}
|
||||
|
||||
func Del(children ...H) H {
|
||||
return gh.Del(retype(children)...)
|
||||
}
|
||||
|
||||
func Details(children ...H) H {
|
||||
return gh.Details(retype(children)...)
|
||||
}
|
||||
|
||||
func Dfn(children ...H) H {
|
||||
return gh.Dfn(retype(children)...)
|
||||
}
|
||||
|
||||
func Dialog(children ...H) H {
|
||||
return gh.Dialog(retype(children)...)
|
||||
}
|
||||
|
||||
func Div(children ...H) H {
|
||||
return gh.Div(retype(children)...)
|
||||
}
|
||||
|
||||
func Dl(children ...H) H {
|
||||
return gh.Dl(retype(children)...)
|
||||
}
|
||||
|
||||
func Dt(children ...H) H {
|
||||
return gh.Dt(retype(children)...)
|
||||
}
|
||||
|
||||
func Em(children ...H) H {
|
||||
return gh.Em(retype(children)...)
|
||||
}
|
||||
|
||||
func Embed(children ...H) H {
|
||||
return gh.Embed(retype(children)...)
|
||||
}
|
||||
|
||||
func FieldSet(children ...H) H {
|
||||
return gh.FieldSet(retype(children)...)
|
||||
}
|
||||
|
||||
func FigCaption(children ...H) H {
|
||||
return gh.FigCaption(retype(children)...)
|
||||
}
|
||||
|
||||
func Figure(children ...H) H {
|
||||
return gh.Figure(retype(children)...)
|
||||
}
|
||||
|
||||
func Footer(children ...H) H {
|
||||
return gh.Footer(retype(children)...)
|
||||
}
|
||||
|
||||
func Form(children ...H) H {
|
||||
return gh.Form(retype(children)...)
|
||||
}
|
||||
|
||||
func H1(children ...H) H {
|
||||
return gh.H1(retype(children)...)
|
||||
}
|
||||
|
||||
func H2(children ...H) H {
|
||||
return gh.H2(retype(children)...)
|
||||
}
|
||||
|
||||
func H3(children ...H) H {
|
||||
return gh.H3(retype(children)...)
|
||||
}
|
||||
|
||||
func H4(children ...H) H {
|
||||
return gh.H4(retype(children)...)
|
||||
}
|
||||
|
||||
func H5(children ...H) H {
|
||||
return gh.H5(retype(children)...)
|
||||
}
|
||||
|
||||
func H6(children ...H) H {
|
||||
return gh.H6(retype(children)...)
|
||||
}
|
||||
|
||||
func Head(children ...H) H {
|
||||
return gh.Head(retype(children)...)
|
||||
}
|
||||
|
||||
func Header(children ...H) H {
|
||||
return gh.Header(retype(children)...)
|
||||
}
|
||||
|
||||
func Hr(children ...H) H {
|
||||
return gh.Hr(retype(children)...)
|
||||
}
|
||||
|
||||
func HTML(children ...H) H {
|
||||
return gh.HTML(retype(children)...)
|
||||
}
|
||||
|
||||
func I(children ...H) H {
|
||||
return gh.I(retype(children)...)
|
||||
}
|
||||
|
||||
func IFrame(children ...H) H {
|
||||
return gh.IFrame(retype(children)...)
|
||||
}
|
||||
|
||||
func Img(children ...H) H {
|
||||
return gh.Img(retype(children)...)
|
||||
}
|
||||
|
||||
func Input(children ...H) H {
|
||||
return gh.Input(retype(children)...)
|
||||
}
|
||||
|
||||
func Ins(children ...H) H {
|
||||
return gh.Ins(retype(children)...)
|
||||
}
|
||||
|
||||
func Kbd(children ...H) H {
|
||||
return gh.Kbd(retype(children)...)
|
||||
}
|
||||
|
||||
func Label(children ...H) H {
|
||||
return gh.Label(retype(children)...)
|
||||
}
|
||||
|
||||
func Legend(children ...H) H {
|
||||
return gh.Legend(retype(children)...)
|
||||
}
|
||||
|
||||
func Li(children ...H) H {
|
||||
return gh.Li(retype(children)...)
|
||||
}
|
||||
|
||||
func Link(children ...H) H {
|
||||
return gh.Link(retype(children)...)
|
||||
}
|
||||
|
||||
func Main(children ...H) H {
|
||||
return gh.Main(retype(children)...)
|
||||
}
|
||||
|
||||
func Mark(children ...H) H {
|
||||
return gh.Mark(retype(children)...)
|
||||
}
|
||||
|
||||
func Meta(children ...H) H {
|
||||
return gh.Meta(retype(children)...)
|
||||
}
|
||||
|
||||
func Meter(children ...H) H {
|
||||
return gh.Meter(retype(children)...)
|
||||
}
|
||||
|
||||
func Nav(children ...H) H {
|
||||
return gh.Nav(retype(children)...)
|
||||
}
|
||||
|
||||
func NoScript(children ...H) H {
|
||||
return gh.NoScript(retype(children)...)
|
||||
}
|
||||
|
||||
func Object(children ...H) H {
|
||||
return gh.Object(retype(children)...)
|
||||
}
|
||||
|
||||
func Ol(children ...H) H {
|
||||
return gh.Ol(retype(children)...)
|
||||
}
|
||||
|
||||
func OptGroup(children ...H) H {
|
||||
return gh.OptGroup(retype(children)...)
|
||||
}
|
||||
|
||||
func Option(children ...H) H {
|
||||
return gh.Option(retype(children)...)
|
||||
}
|
||||
|
||||
func P(children ...H) H {
|
||||
return gh.P(retype(children)...)
|
||||
}
|
||||
|
||||
func Picture(children ...H) H {
|
||||
return gh.Picture(retype(children)...)
|
||||
}
|
||||
|
||||
func Pre(children ...H) H {
|
||||
return gh.Pre(retype(children)...)
|
||||
}
|
||||
|
||||
func Progress(children ...H) H {
|
||||
return gh.Progress(retype(children)...)
|
||||
}
|
||||
|
||||
func Q(children ...H) H {
|
||||
return gh.Q(retype(children)...)
|
||||
}
|
||||
|
||||
func S(children ...H) H {
|
||||
return gh.S(retype(children)...)
|
||||
}
|
||||
|
||||
func Samp(children ...H) H {
|
||||
return gh.Samp(retype(children)...)
|
||||
}
|
||||
|
||||
func Script(children ...H) H {
|
||||
return gh.Script(retype(children)...)
|
||||
}
|
||||
|
||||
func Section(children ...H) H {
|
||||
return gh.Section(retype(children)...)
|
||||
}
|
||||
|
||||
func Select(children ...H) H {
|
||||
return gh.Select(retype(children)...)
|
||||
}
|
||||
|
||||
func Small(children ...H) H {
|
||||
return gh.Small(retype(children)...)
|
||||
}
|
||||
|
||||
func Source(children ...H) H {
|
||||
return gh.Source(retype(children)...)
|
||||
}
|
||||
|
||||
func Span(children ...H) H {
|
||||
return gh.Span(retype(children)...)
|
||||
}
|
||||
|
||||
func Strong(children ...H) H {
|
||||
return gh.Strong(retype(children)...)
|
||||
}
|
||||
|
||||
func Style(v string) H {
|
||||
return gh.Style(v)
|
||||
}
|
||||
|
||||
func Sub(children ...H) H {
|
||||
return gh.Sub(retype(children)...)
|
||||
}
|
||||
|
||||
func Summary(children ...H) H {
|
||||
return gh.Summary(retype(children)...)
|
||||
}
|
||||
|
||||
func Sup(children ...H) H {
|
||||
return gh.Sup(retype(children)...)
|
||||
}
|
||||
|
||||
func Table(children ...H) H {
|
||||
return gh.Table(retype(children)...)
|
||||
}
|
||||
|
||||
func TBody(children ...H) H {
|
||||
return gh.TBody(retype(children)...)
|
||||
}
|
||||
|
||||
func Td(children ...H) H {
|
||||
return gh.Td(retype(children)...)
|
||||
}
|
||||
|
||||
func Template(children ...H) H {
|
||||
return gh.Template(retype(children)...)
|
||||
}
|
||||
|
||||
func Textarea(children ...H) H {
|
||||
return gh.Textarea(retype(children)...)
|
||||
}
|
||||
|
||||
func TFoot(children ...H) H {
|
||||
return gh.TFoot(retype(children)...)
|
||||
}
|
||||
|
||||
func Th(children ...H) H {
|
||||
return gh.Th(retype(children)...)
|
||||
}
|
||||
|
||||
func THead(children ...H) H {
|
||||
return gh.THead(retype(children)...)
|
||||
}
|
||||
|
||||
func Time(children ...H) H {
|
||||
return gh.Time(retype(children)...)
|
||||
}
|
||||
|
||||
func Title(v string) H {
|
||||
return gh.Title(v)
|
||||
}
|
||||
|
||||
func Tr(children ...H) H {
|
||||
return gh.Tr(retype(children)...)
|
||||
}
|
||||
|
||||
func U(children ...H) H {
|
||||
return gh.U(retype(children)...)
|
||||
}
|
||||
|
||||
func Ul(children ...H) H {
|
||||
return gh.Ul(retype(children)...)
|
||||
}
|
||||
|
||||
func Var(children ...H) H {
|
||||
return gh.Var(retype(children)...)
|
||||
}
|
||||
|
||||
func Video(children ...H) H {
|
||||
return gh.Video(retype(children)...)
|
||||
}
|
||||
|
||||
func Wbr(children ...H) H {
|
||||
return gh.Wbr(retype(children)...)
|
||||
}
|
||||
78
h/h.go
Normal file
78
h/h.go
Normal file
@@ -0,0 +1,78 @@
|
||||
// Package h provides a Go-native DSL for HTML composition.
|
||||
// Every element, attribute, and text node is constructed as a function that returns a [h.H] DOM node.
|
||||
//
|
||||
// Example:
|
||||
//
|
||||
// h.Div(
|
||||
// h.H1(h.Text("Hello, Via")),
|
||||
// h.P(h.Text("Pure Go. No tmplates.")),
|
||||
// )
|
||||
package h
|
||||
|
||||
import (
|
||||
"io"
|
||||
g "maragu.dev/gomponents"
|
||||
gc "maragu.dev/gomponents/components"
|
||||
)
|
||||
|
||||
// H represents a DOM node.
|
||||
type H interface {
|
||||
Render(w io.Writer) error
|
||||
}
|
||||
|
||||
// Text creates a text DOM node that Renders the escaped string t.
|
||||
func Text(t string) H {
|
||||
return g.Text(t)
|
||||
}
|
||||
|
||||
// Textf creates a text DOM node that Renders the interpolated and escaped string format.
|
||||
func Textf(format string, a ...any) H {
|
||||
return g.Textf(format, a...)
|
||||
}
|
||||
|
||||
// / Raw creates a text DOM [Node] that just Renders the unescaped string t.
|
||||
func Raw(s string) H {
|
||||
return g.Raw(s)
|
||||
}
|
||||
|
||||
// Attr creates an attribute DOM [Node] with a name and optional value.
|
||||
// If only a name is passed, it's a name-only (boolean) attribute (like "required").
|
||||
// If a name and value are passed, it's a name-value attribute (like `class="header"`).
|
||||
// More than one value make [Attr] panic.
|
||||
// Use this if no convenience creator exists in the h package.
|
||||
func Attr(name string, value ...string) H {
|
||||
return g.Attr(name, value...)
|
||||
}
|
||||
|
||||
// HTML5Props defines properties for HTML5 pages. Title is set always set, Description
|
||||
// and Language elements only if the strings are non-empty.
|
||||
type HTML5Props struct {
|
||||
Title string
|
||||
Description string
|
||||
Language string
|
||||
Head []H
|
||||
Body []H
|
||||
HTMLAttrs []H
|
||||
}
|
||||
|
||||
// HTML5 document template.
|
||||
func HTML5(p HTML5Props) H {
|
||||
gp := gc.HTML5Props{
|
||||
Title: p.Title,
|
||||
Description: p.Description,
|
||||
Language: p.Language,
|
||||
Head: retype(p.Head),
|
||||
Body: retype(p.Body),
|
||||
HTMLAttrs: retype(p.HTMLAttrs),
|
||||
}
|
||||
gp.Head = append(gp.Head, Script(Type("module"), Src("/_datastar.js")))
|
||||
return gc.HTML5(gp)
|
||||
}
|
||||
|
||||
// JoinAttrs with the given name only on the first level of the given nodes. This means that
|
||||
// attributes on non-direct descendants are ignored. Attribute values are joined by spaces.
|
||||
//
|
||||
// Note that this renders all first-level attributes to check whether they should be processed.
|
||||
func JoinAttrs(name string, children ...H) H {
|
||||
return gc.JoinAttrs(name, retype(children)...)
|
||||
}
|
||||
Reference in New Issue
Block a user