node and browser bindings for gleam

add casting of event and element types

Changed files
+41 -2
src
+1 -1
gleam.toml
··· 1 1 name = "plinth" 2 - version = "0.4.13" 2 + version = "0.4.14" 3 3 description = "Bindings to Node.js and browser platform APIs" 4 4 target = "javascript" 5 5
+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
··· 1 + import { Ok, Error } from "./gleam.mjs"; 2 + 3 + export function cast(raw) { 4 + if (raw instanceof Event) { 5 + return new Ok(raw) 6 + } else { 7 + return new Error() 8 + } 9 + } 10 + 1 11 export function target(event) { 2 12 return event.target; 3 13 }
+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
··· 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")