///|
fn view(emit : Emit[Msg], model : Model) -> Html {
div(id="counter", style=["border: 1px solid black"], [
h1(id="title", "the count is \{model.count}"),
button(class="...", on_click=emit(Inc), "+"),
button(class="...", on_click=emit(Dec), "-"),
])
}///|
let _ = p([text("hello world")])
let _ = p("hello world") // equivalent to above///|
fn bad(path : Path, tag : Tag?) {
let path = foo(path)
let tag = match tag {
None => []
Some(x) => [view(x)] // Yuck!
}
div([path] + tag) // Don't do this
}
///|
fn good(path : Path, tag : Tag?) {
let path = foo(path)
let tag = match tag {
None => nothing
Some(x) => view(x)
}
div([path, tag]) // Use @html.nothing
}| type | example |
|---|---|
| Array[Html] | div([html1, html2]) |
| String | div("string here") |
| Html | div(p([...])) |
| Map[String,Html] | div({"k1": html1, "k2": html2}) |
///|
let html : Html = ul({
"todo-1": li("Buy milk"),
"todo-2": li("Write docs"),
"todo-3": li("Write code"),
})///|
#cfg(target="js")
fn update2(msg : Msg2, _ : Model2) -> Model2 {
match msg {
StartDraw(mouse) => println("start at \{mouse.offset_pos()}")
EndDraw(mouse) => println("end at \{mouse.offset_pos()}")
}
}
///|
fn view2(emit : Emit[Msg2], _ : Model2) -> Html {
canvas(
on_mousedown=m => emit(StartDraw(m)),
on_mouseup=m => emit(EndDraw(m)),
nothing,
)
}///|
let html1 : Html = div(
attrs=Attrs::build().class("card").style("gap", "12px").data("..."),
[text("Hello")],
)///|
let html2 : Html = node(
"div",
Attrs::build().class("card").style("gap", "12px").data("..."),
[p("text1"), p("text2")],
)type Attrspub(all) enum InputType {
Button
Checkbox
Color
Date
DateTimeLocal
Email
File
Hidden
Image
Month
Number
Password
Radio
Range
Reset
Search
Submit
Tel
Text
Time
Url
Week
}fn[C : IsChildren] a(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, href~ : String, target? : Target, rel? : String, download? : String, attrs? : Attrs, children : C, escape? : Bool) -> Htmlfn[C : IsChildren] abbr(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] address(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] article(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] aside(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] audio(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, src? : String, controls? : Bool, autoplay? : Bool, loop_? : Bool, muted? : Bool, preload? : String, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] b(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] bdi(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] bdo(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] blockquote(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] button(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, type_? : String, disabled? : Bool, name? : String, value? : String, autofocus? : Bool, on_click? : Cmd, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] caption(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] cite(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] code(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] colgroup(style? : Array[String], id? : String, span? : Int, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] data(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] datalist(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] dd(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] del(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] details(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, open? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] dfn(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmltypealias Model = String
enum Msg {
Open
Closed(String)
YesNo(Bool)
}
fn update(msg : Msg, model : Model) -> (Cmd[Msg], Model) {
match msg {
Open => (@dialog.show("confirm"), model)
YesNo(answer) => (@dialog.close("confirm", return_value=answer.to_string()), model)
Closed(value) => (none(), value)
}
}
fn view(model : Model) -> Html {
div([
h1([text(model)]),
button(on_click=Msg::Open, [text("open")]),
dialog(id="confirm", on_close=Msg::Closed, [
p([text("Are you sure?")]),
button(on_click=YesNo(true), [text("Yes")]),
button(on_click=YesNo(false), [text("No")]),
]),
])
}fn[C : IsChildren] div(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, on_click? : Cmd, on_mousedown? : Emit[Mouse], on_mouseup? : Emit[Mouse], on_scroll? : Emit[Scroll], on_keydown? : Emit[Keyboard], on_keyup? : Emit[Keyboard], attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] dl(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] dt(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] em(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] fieldset(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, disabled? : Bool, name? : String, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] figcaption(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] figure(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] footer(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] form(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, action? : String, name? : String, on_submit? : Cmd, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] geolocation(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] h1(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, cite? : String, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] h2(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] h3(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] h4(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] h5(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] h6(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] head(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] header(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] hgroup(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlhtml(...) [
head(...),
body(...),
]fn[C : IsChildren] i(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn input(input_type? : InputType, name? : String, value? : String, checked? : Bool, read_only? : Bool, multiple? : Bool, accept? : String, placeholder? : String, auto_complete? : AutoComplete, style? : Array[String], max? : Int, min? : Int, step? : Int, maxlength? : Int, minlength? : Int, pattern? : String, size? : Int, width? : Int, height? : Int, id? : String, class? : String, title? : String, hidden? : Bool, required? : Bool, autofocus? : Bool, list? : String, inputmode? : String, on_change? : Emit[String], on_input? : Emit[String], attrs? : Attrs) -> Htmlfn[C : IsChildren] ins(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] kbd(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] label(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, for_? : String, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] legend(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] li(style? : Array[String], value? : Int, id? : String, class? : String, title? : String, hidden? : Bool, on_click? : Cmd, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] main_(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] map(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, name? : String, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] mark(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] math(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] menu(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] meter(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, value? : Int, min? : Int, max? : Int, low? : Int, high? : Int, optimum? : Int, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] nav(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] noscript(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] object(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] ol(style? : Array[String], reversed? : Bool, start? : Int, id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] optgroup(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, label? : String, disabled? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] option(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, label? : String, disabled? : Bool, value? : String, selected? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] output(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, name? : String, for_? : String, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] p(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] picture(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] pre(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] progress(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, value? : Int, max? : Int, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] q(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] rp(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] rt(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] ruby(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] s(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] samp(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] script(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, src? : String, type_? : String, async_? : Bool, defer_? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] search(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] section(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] select(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, disabled? : Bool, name? : String, multiple? : Bool, size? : Int, required? : Bool, autofocus? : Bool, on_change? : Emit[String], attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] selectedcontent(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] slot(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] small(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] span(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] strong(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] style_tag(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] sub(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] summary(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] sup(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] svg(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] table(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] tbody(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] td(style? : Array[String], id? : String, colspan? : Int, rowspan? : Int, headers? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] template(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] textarea(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, name? : String, value? : String, rows? : Int, cols? : Int, placeholder? : String, read_only? : Bool, disabled? : Bool, maxlength? : Int, minlength? : Int, required? : Bool, autofocus? : Bool, wrap? : String, on_change? : Emit[String], on_input? : Emit[String], attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] tfoot(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] th(style? : Array[String], id? : String, abbr? : String, colspan? : Int, rowspan? : Int, headers? : String, scope? : Scope, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] thead(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] time(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, datetime? : String, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] title(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] tr(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] u(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] ul(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, on_click? : Cmd, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] var_(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, attrs? : Attrs, children : C) -> Htmlfn[C : IsChildren] video(style? : Array[String], id? : String, class? : String, title? : String, hidden? : Bool, src? : String, controls? : Bool, autoplay? : Bool, loop_? : Bool, muted? : Bool, preload? : String, poster? : String, attrs? : Attrs, children : C) -> Htmlfunctional Web UI framework for MoonBit
Dependencies