diff options
author | Hayleigh Thompson <me@hayleigh.dev> | 2023-02-13 13:13:30 +0000 |
---|---|---|
committer | Hayleigh Thompson <me@hayleigh.dev> | 2023-02-13 13:13:30 +0000 |
commit | 18882110afda3aebaaa94d3a9b1a479c56355979 (patch) | |
tree | c6a50968c41f08e18d77b2b9d89a4b264a731a5d | |
parent | 74ec8d1d26feab65bda962cff88e2285a32c6b7c (diff) | |
download | lustre-18882110afda3aebaaa94d3a9b1a479c56355979.tar.gz lustre-18882110afda3aebaaa94d3a9b1a479c56355979.zip |
:recycle: Remove distinction between attributes and properties: react doesn't care.
-rw-r--r-- | src/lustre/attribute.gleam | 192 |
1 files changed, 96 insertions, 96 deletions
diff --git a/src/lustre/attribute.gleam b/src/lustre/attribute.gleam index 4dff602..51ef13b 100644 --- a/src/lustre/attribute.gleam +++ b/src/lustre/attribute.gleam @@ -1,6 +1,6 @@ // IMPORTS --------------------------------------------------------------------- -import gleam/dynamic.{ Dynamic } +import gleam/dynamic.{Dynamic} import gleam/int import gleam/list import gleam/pair @@ -8,235 +8,235 @@ import gleam/string // TYPES ----------------------------------------------------------------------- +/// Attributes are attached to specific elements. They're either key/value pairs +/// or event handlers. /// -pub opaque type Attribute(action) { - Attribute(name: String, value: String) - Property(name: String, value: Dynamic) - Event(name: String, handler: fn (Dynamic, fn (action) -> Nil) -> Nil) +pub opaque type Attribute(msg) { + Attribute(name: String, value: Dynamic) + Event(name: String, handler: fn(Dynamic, fn(msg) -> Nil) -> Nil) } // CONSTRUCTORS ---------------------------------------------------------------- /// -pub fn attribute (name: String, value: String) -> Attribute(action) { - Attribute(name, value) +pub fn attribute(name: String, value: any) -> Attribute(msg) { + Attribute(name, dynamic.from(value)) } -/// -pub fn property (name: String, value: Dynamic) -> Attribute(action) { - Property(name, value) -} - -/// -pub fn event (name: String, handler: fn (Dynamic, fn (action) -> Nil) -> Nil) -> Attribute(action) { - Event(name, handler) +/// +pub fn event( + name: String, + handler: fn(Dynamic, fn(msg) -> Nil) -> Nil, +) -> Attribute(msg) { + Event(name, handler) } // COMMON ATTRIBUTES ----------------------------------------------------------- /// -pub fn style (properties: List(#(String, String))) -> Attribute(action) { - property("style", style_object(properties)) +pub fn style(properties: List(#(String, String))) -> Attribute(msg) { + attribute("style", style_object(properties)) } -external fn style_object (properties: List(#(String, String))) -> Dynamic - = "../ffi.mjs" "object" +external fn style_object(properties: List(#(String, String))) -> Dynamic = + "../ffi.mjs" "object" /// -pub fn class (name: String) -> Attribute(action) { - attribute("className", name) +pub fn class(name: String) -> Attribute(msg) { + attribute("className", name) } /// -pub fn classes (names: List(#(String, Bool))) -> Attribute(action) { - attribute("className", - names - |> list.filter(pair.second) - |> list.map(pair.first) - |> string.join(" ") - ) +pub fn classes(names: List(#(String, Bool))) -> Attribute(msg) { + attribute( + "className", + names + |> list.filter(pair.second) + |> list.map(pair.first) + |> string.join(" "), + ) } /// -pub fn id (name: String) -> Attribute(action) { - attribute("id", name) +pub fn id(name: String) -> Attribute(msg) { + attribute("id", name) } // INPUTS ---------------------------------------------------------------------- /// -pub fn type_ (name: String) -> Attribute(action) { - attribute("type", name) +pub fn type_(name: String) -> Attribute(msg) { + attribute("type", name) } /// -pub fn value (val: Dynamic) -> Attribute(action) { - property("value", val) +pub fn value(val: Dynamic) -> Attribute(msg) { + attribute("value", val) } /// -pub fn checked (is_checked: Bool) -> Attribute(action) { - property("checked", dynamic.from(is_checked)) +pub fn checked(is_checked: Bool) -> Attribute(msg) { + attribute("checked", is_checked) } /// -pub fn placeholder (text: String) -> Attribute(action) { - attribute("placeholder", text) +pub fn placeholder(text: String) -> Attribute(msg) { + attribute("placeholder", text) } /// -pub fn selected (is_selected: Bool) -> Attribute(action) { - property("selected", dynamic.from(is_selected)) +pub fn selected(is_selected: Bool) -> Attribute(msg) { + attribute("selected", is_selected) } // INPUT HELPERS --------------------------------------------------------------- /// -pub fn accept (types: List(String)) -> Attribute(action) { - attribute("accept", string.join(types, " ")) +pub fn accept(types: List(String)) -> Attribute(msg) { + attribute("accept", string.join(types, " ")) } /// -pub fn accept_charset (types: List(String)) -> Attribute(action) { - attribute("acceptCharset", string.join(types, " ")) +pub fn accept_charset(types: List(String)) -> Attribute(msg) { + attribute("acceptCharset", string.join(types, " ")) } /// -pub fn action (uri: String) -> Attribute(action) { - attribute("action", uri) +pub fn msg(uri: String) -> Attribute(msg) { + attribute("msg", uri) } /// -pub fn autocomplete (should_autocomplete: Bool) -> Attribute(action) { - property("autocomplete", dynamic.from(should_autocomplete)) +pub fn autocomplete(should_autocomplete: Bool) -> Attribute(msg) { + attribute("autocomplete", should_autocomplete) } /// -pub fn autofocus (should_autofocus: Bool) -> Attribute(action) { - property("autoFocus", dynamic.from(should_autofocus)) +pub fn autofocus(should_autofocus: Bool) -> Attribute(msg) { + attribute("autoFocus", should_autofocus) } /// -pub fn disabled (is_disabled: Bool) -> Attribute(action) { - property("disabled", dynamic.from(is_disabled)) +pub fn disabled(is_disabled: Bool) -> Attribute(msg) { + attribute("disabled", is_disabled) } /// -pub fn name (name: String) -> Attribute(action) { - attribute("name", name) +pub fn name(name: String) -> Attribute(msg) { + attribute("name", name) } /// -pub fn pattern (regex: String) -> Attribute(action) { - attribute("pattern", regex) +pub fn pattern(regex: String) -> Attribute(msg) { + attribute("pattern", regex) } /// -pub fn readonly (is_readonly: Bool) -> Attribute(action) { - property("readonly", dynamic.from(is_readonly)) +pub fn readonly(is_readonly: Bool) -> Attribute(msg) { + attribute("readonly", is_readonly) } /// -pub fn required (is_required: Bool) -> Attribute(action) { - property("required", dynamic.from(is_required)) +pub fn required(is_required: Bool) -> Attribute(msg) { + attribute("required", is_required) } /// -pub fn for (id: String) -> Attribute(action) { - attribute("for", id) +pub fn for(id: String) -> Attribute(msg) { + attribute("for", id) } // INPUT RANGES ---------------------------------------------------------------- /// -pub fn max (val: String) -> Attribute(action) { - attribute("max", val) +pub fn max(val: String) -> Attribute(msg) { + attribute("max", val) } /// -pub fn min (val: String) -> Attribute(action) { - attribute("min", val) +pub fn min(val: String) -> Attribute(msg) { + attribute("min", val) } /// -pub fn step (val: String) -> Attribute(action) { - attribute("step", val) +pub fn step(val: String) -> Attribute(msg) { + attribute("step", val) } // INPUT TEXT AREAS ------------------------------------------------------------ /// -pub fn cols (val: Int) -> Attribute(action) { - attribute("cols", int.to_string(val)) +pub fn cols(val: Int) -> Attribute(msg) { + attribute("cols", int.to_string(val)) } /// -pub fn rows (val: Int) -> Attribute(action) { - attribute("rows", int.to_string(val)) +pub fn rows(val: Int) -> Attribute(msg) { + attribute("rows", int.to_string(val)) } /// -pub fn wrap (mode: String) -> Attribute(action) { - attribute("wrap", mode) +pub fn wrap(mode: String) -> Attribute(msg) { + attribute("wrap", mode) } // LINKS AND AREAS ------------------------------------------------------------- /// -pub fn href (uri: String) -> Attribute(action) { - attribute("href", uri) +pub fn href(uri: String) -> Attribute(msg) { + attribute("href", uri) } /// -pub fn target (target: String) -> Attribute(action) { - attribute("target", target) +pub fn target(target: String) -> Attribute(msg) { + attribute("target", target) } /// -pub fn download (filename: String) -> Attribute(action) { - attribute("download", filename) +pub fn download(filename: String) -> Attribute(msg) { + attribute("download", filename) } /// -pub fn rel (relationship: String) -> Attribute(action) { - attribute("rel", relationship) +pub fn rel(relationship: String) -> Attribute(msg) { + attribute("rel", relationship) } // EMBEDDED CONTENT ------------------------------------------------------------ /// -pub fn src (uri: String) -> Attribute(action) { - attribute("src", uri) +pub fn src(uri: String) -> Attribute(msg) { + attribute("src", uri) } /// -pub fn height (val: Int) -> Attribute(action) { - attribute("height", int.to_string(val)) +pub fn height(val: Int) -> Attribute(msg) { + attribute("height", int.to_string(val)) } /// -pub fn width (val: Int) -> Attribute(action) { - attribute("width", int.to_string(val)) +pub fn width(val: Int) -> Attribute(msg) { + attribute("width", int.to_string(val)) } /// -pub fn alt (text: String) -> Attribute(action) { - attribute("alt", text) +pub fn alt(text: String) -> Attribute(msg) { + attribute("alt", text) } // AUDIO AND VIDEO ------------------------------------------------------------- /// -pub fn autoplay (should_autoplay: Bool) -> Attribute(action) { - property("autoplay", dynamic.from(should_autoplay)) +pub fn autoplay(should_autoplay: Bool) -> Attribute(msg) { + attribute("autoplay", should_autoplay) } /// -pub fn controls (visible: Bool) -> Attribute(action) { - property("controls", dynamic.from(visible)) +pub fn controls(visible: Bool) -> Attribute(msg) { + attribute("controls", visible) } /// -pub fn loop (should_loop: Bool) -> Attribute(action) { - property("loop", dynamic.from(should_loop)) +pub fn loop(should_loop: Bool) -> Attribute(msg) { + attribute("loop", should_loop) } |