+1
-1
gleam.toml
+1
-1
gleam.toml
+8
src/element_ffi.mjs
+8
src/element_ffi.mjs
···
1
1
import { Ok, Error } from "./gleam.mjs";
2
2
3
+
export function cast(raw) {
4
+
if (raw instanceof Element) {
5
+
return new Ok(raw)
6
+
} else {
7
+
return new Error()
8
+
}
9
+
}
10
+
3
11
export function getAttribute(element, name) {
4
12
let attribute = element.getAttribute(name);
5
13
if (attribute) {
+10
src/event_ffi.mjs
+10
src/event_ffi.mjs
+11
src/plinth/browser/element.gleam
+11
src/plinth/browser/element.gleam
···
1
+
import gleam/dynamic.{type Dynamic, DecodeError}
1
2
import gleam/javascript/promise.{type Promise}
2
3
import plinth/browser/event.{type Event}
3
4
4
5
pub type Element
6
+
7
+
@external(javascript, "../../element_ffi.mjs", "cast")
8
+
fn do_cast(raw: Dynamic) -> Result(Element, Nil)
9
+
10
+
pub fn cast(raw) {
11
+
case do_cast(raw) {
12
+
Ok(element) -> Ok(element)
13
+
Error(Nil) -> Error(DecodeError("Element", dynamic.classify(raw), []))
14
+
}
15
+
}
5
16
6
17
@external(javascript, "../../element_ffi.mjs", "addEventListener")
7
18
pub fn add_event_listener(
+11
-1
src/plinth/browser/event.gleam
+11
-1
src/plinth/browser/event.gleam
···
1
-
import gleam/dynamic.{type Dynamic}
1
+
import gleam/dynamic.{type Dynamic, DecodeError}
2
2
3
3
pub type Event
4
+
5
+
@external(javascript, "../../event_ffi.mjs", "cast")
6
+
fn do_cast(raw: Dynamic) -> Result(Event, Nil)
7
+
8
+
pub fn cast(raw) {
9
+
case do_cast(raw) {
10
+
Ok(event) -> Ok(event)
11
+
Error(Nil) -> Error(DecodeError("Event", dynamic.classify(raw), []))
12
+
}
13
+
}
4
14
5
15
// event only knows about event target not Element/Document etc
6
16
@external(javascript, "../../event_ffi.mjs", "target")