Packages
plinth
0.8.2
0.10.2
0.10.1
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.15
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.0
0.2.0
0.1.13
0.1.12
0.1.11
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Bindings to Node.js and browser platform APIs
Current section
Files
Jump to
Current section
Files
src/plinth/browser/event.gleam
import gleam/dynamic
import gleam/dynamic/decode.{type Dynamic, DecodeError}
fn wrap_cast(raw, f) {
case f(raw) {
Ok(event) -> Ok(event)
Error(Nil) -> Error(DecodeError("Event", dynamic.classify(raw), []))
}
}
pub type Event(sub)
@external(javascript, "../../event_ffi.mjs", "castEvent")
fn do_cast_event(raw: Dynamic) -> Result(Event(Dynamic), Nil)
pub fn cast_event(raw) {
wrap_cast(raw, do_cast_event)
}
pub type UIEvent(sub)
// event only knows about event target not Element/Document etc
@external(javascript, "../../event_ffi.mjs", "target")
pub fn target(event: Event(t)) -> Dynamic
@external(javascript, "../../event_ffi.mjs", "currentTarget")
pub fn current_target(event: Event(t)) -> Dynamic
@external(javascript, "../../event_ffi.mjs", "preventDefault")
pub fn prevent_default(event: Event(t)) -> Nil
@external(javascript, "../../event_ffi.mjs", "stopPropagation")
pub fn stop_propagation(event: Event(t)) -> Nil
pub type KeyboardEvent
@external(javascript, "../../event_ffi.mjs", "castKeyboardEvent")
fn do_cast_keyboard_event(
raw: Dynamic,
) -> Result(Event(UIEvent(KeyboardEvent)), Nil)
pub fn cast_keyboard_event(raw) {
wrap_cast(raw, do_cast_keyboard_event)
}
@external(javascript, "../../event_ffi.mjs", "altKey")
pub fn alt_key(event: Event(UIEvent(KeyboardEvent))) -> Bool
@external(javascript, "../../event_ffi.mjs", "code")
pub fn code(event: Event(UIEvent(KeyboardEvent))) -> String
@external(javascript, "../../event_ffi.mjs", "ctrlKey")
pub fn ctrl_key(event: Event(UIEvent(KeyboardEvent))) -> Bool
@external(javascript, "../../event_ffi.mjs", "isComposing")
pub fn is_composing(event: Event(UIEvent(KeyboardEvent))) -> Bool
@external(javascript, "../../event_ffi.mjs", "key")
pub fn key(event: Event(UIEvent(KeyboardEvent))) -> String
@external(javascript, "../../event_ffi.mjs", "metaKey")
pub fn meta_key(event: Event(UIEvent(KeyboardEvent))) -> Bool
@external(javascript, "../../event_ffi.mjs", "shiftKey")
pub fn shift_key(event: Event(UIEvent(KeyboardEvent))) -> Bool