Current section
Files
Jump to
Current section
Files
src/sprocket@html@events.erl
-module(sprocket@html@events).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([event_dispatcher/2, event/2, on_blur/1, on_change/1, on_check/1, on_click/1, on_dblclick/1, on_drag/1, on_dragend/1, on_dragenter/1, on_dragleave/1, on_dragover/1, on_dragstart/1, on_drop/1, on_focus/1, on_focusin/1, on_focusout/1, on_input/1, on_keydown/1, on_keyup/1, on_mousedown/1, on_mouseenter/1, on_mouseleave/1, on_mousemove/1, on_mouseout/1, on_mouseover/1, on_mouseup/1, on_scroll/1, on_submit/1, on_touchcancel/1, on_touchend/1, on_touchmove/1, on_touchstart/1, on_wheel/1, decode_target_value/1, decode_target_checked/1, decode_mouse_event/1, decode_key_event/1, decode_form_data/1, decode_keypress/1]).
-export_type([mouse_event/0, key_event/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
-type mouse_event() :: {mouse_event,
integer(),
integer(),
boolean(),
boolean(),
boolean(),
boolean()}.
-type key_event() :: {key_event,
binary(),
binary(),
boolean(),
boolean(),
boolean(),
boolean()}.
-file("src/sprocket/html/events.gleam", 25).
?DOC(
" Creates a helper function that allows us to directly dispatch a message from an\n"
" event handler without needing to create a separate function for each event.\n"
" \n"
" Example:\n"
" ```gleam\n"
" use dispatch_event <- event_dispatcher(dispatch)\n"
" ...\n"
"\n"
" button([events.on_click(dispatch_event(UserClickedButton))], [])\n"
" ```\n"
).
-spec event_dispatcher(
fun((LGI) -> nil),
fun((fun((fun((gleam@dynamic:dynamic_()) -> LGI)) -> fun((gleam@dynamic:dynamic_()) -> nil))) -> {sprocket@internal@context:context(),
sprocket@internal@context:element()})
) -> {sprocket@internal@context:context(), sprocket@internal@context:element()}.
event_dispatcher(Dispatch, Cb) ->
Cb(fun(Msg) -> fun(E) -> Dispatch(Msg(E)) end end).
-file("src/sprocket/html/events.gleam", 37).
-spec event(binary(), fun((gleam@dynamic:dynamic_()) -> nil)) -> sprocket@internal@context:attribute().
event(Name, Cb) ->
{event, Name, Cb}.
-file("src/sprocket/html/events.gleam", 41).
-spec on_blur(fun((gleam@dynamic:dynamic_()) -> nil)) -> sprocket@internal@context:attribute().
on_blur(Cb) ->
event(<<"blur"/utf8>>, Cb).
-file("src/sprocket/html/events.gleam", 45).
-spec on_change(fun((gleam@dynamic:dynamic_()) -> nil)) -> sprocket@internal@context:attribute().
on_change(Cb) ->
event(<<"change"/utf8>>, Cb).
-file("src/sprocket/html/events.gleam", 49).
-spec on_check(fun((gleam@dynamic:dynamic_()) -> nil)) -> sprocket@internal@context:attribute().
on_check(Cb) ->
event(<<"check"/utf8>>, Cb).
-file("src/sprocket/html/events.gleam", 53).
-spec on_click(fun((gleam@dynamic:dynamic_()) -> nil)) -> sprocket@internal@context:attribute().
on_click(Cb) ->
event(<<"click"/utf8>>, Cb).
-file("src/sprocket/html/events.gleam", 57).
-spec on_dblclick(fun((gleam@dynamic:dynamic_()) -> nil)) -> sprocket@internal@context:attribute().
on_dblclick(Cb) ->
event(<<"dblclick"/utf8>>, Cb).
-file("src/sprocket/html/events.gleam", 61).
-spec on_drag(fun((gleam@dynamic:dynamic_()) -> nil)) -> sprocket@internal@context:attribute().
on_drag(Cb) ->
event(<<"drag"/utf8>>, Cb).
-file("src/sprocket/html/events.gleam", 65).
-spec on_dragend(fun((gleam@dynamic:dynamic_()) -> nil)) -> sprocket@internal@context:attribute().
on_dragend(Cb) ->
event(<<"dragend"/utf8>>, Cb).
-file("src/sprocket/html/events.gleam", 69).
-spec on_dragenter(fun((gleam@dynamic:dynamic_()) -> nil)) -> sprocket@internal@context:attribute().
on_dragenter(Cb) ->
event(<<"dragenter"/utf8>>, Cb).
-file("src/sprocket/html/events.gleam", 73).
-spec on_dragleave(fun((gleam@dynamic:dynamic_()) -> nil)) -> sprocket@internal@context:attribute().
on_dragleave(Cb) ->
event(<<"dragleave"/utf8>>, Cb).
-file("src/sprocket/html/events.gleam", 77).
-spec on_dragover(fun((gleam@dynamic:dynamic_()) -> nil)) -> sprocket@internal@context:attribute().
on_dragover(Cb) ->
event(<<"dragover"/utf8>>, Cb).
-file("src/sprocket/html/events.gleam", 81).
-spec on_dragstart(fun((gleam@dynamic:dynamic_()) -> nil)) -> sprocket@internal@context:attribute().
on_dragstart(Cb) ->
event(<<"dragstart"/utf8>>, Cb).
-file("src/sprocket/html/events.gleam", 85).
-spec on_drop(fun((gleam@dynamic:dynamic_()) -> nil)) -> sprocket@internal@context:attribute().
on_drop(Cb) ->
event(<<"drop"/utf8>>, Cb).
-file("src/sprocket/html/events.gleam", 89).
-spec on_focus(fun((gleam@dynamic:dynamic_()) -> nil)) -> sprocket@internal@context:attribute().
on_focus(Cb) ->
event(<<"focus"/utf8>>, Cb).
-file("src/sprocket/html/events.gleam", 93).
-spec on_focusin(fun((gleam@dynamic:dynamic_()) -> nil)) -> sprocket@internal@context:attribute().
on_focusin(Cb) ->
event(<<"focusin"/utf8>>, Cb).
-file("src/sprocket/html/events.gleam", 97).
-spec on_focusout(fun((gleam@dynamic:dynamic_()) -> nil)) -> sprocket@internal@context:attribute().
on_focusout(Cb) ->
event(<<"focusout"/utf8>>, Cb).
-file("src/sprocket/html/events.gleam", 101).
-spec on_input(fun((gleam@dynamic:dynamic_()) -> nil)) -> sprocket@internal@context:attribute().
on_input(Cb) ->
event(<<"input"/utf8>>, Cb).
-file("src/sprocket/html/events.gleam", 105).
-spec on_keydown(fun((gleam@dynamic:dynamic_()) -> nil)) -> sprocket@internal@context:attribute().
on_keydown(Cb) ->
event(<<"keydown"/utf8>>, Cb).
-file("src/sprocket/html/events.gleam", 109).
-spec on_keyup(fun((gleam@dynamic:dynamic_()) -> nil)) -> sprocket@internal@context:attribute().
on_keyup(Cb) ->
event(<<"keyup"/utf8>>, Cb).
-file("src/sprocket/html/events.gleam", 113).
-spec on_mousedown(fun((gleam@dynamic:dynamic_()) -> nil)) -> sprocket@internal@context:attribute().
on_mousedown(Cb) ->
event(<<"mousedown"/utf8>>, Cb).
-file("src/sprocket/html/events.gleam", 117).
-spec on_mouseenter(fun((gleam@dynamic:dynamic_()) -> nil)) -> sprocket@internal@context:attribute().
on_mouseenter(Cb) ->
event(<<"mouseenter"/utf8>>, Cb).
-file("src/sprocket/html/events.gleam", 121).
-spec on_mouseleave(fun((gleam@dynamic:dynamic_()) -> nil)) -> sprocket@internal@context:attribute().
on_mouseleave(Cb) ->
event(<<"mouseleave"/utf8>>, Cb).
-file("src/sprocket/html/events.gleam", 125).
-spec on_mousemove(fun((gleam@dynamic:dynamic_()) -> nil)) -> sprocket@internal@context:attribute().
on_mousemove(Cb) ->
event(<<"mousemove"/utf8>>, Cb).
-file("src/sprocket/html/events.gleam", 129).
-spec on_mouseout(fun((gleam@dynamic:dynamic_()) -> nil)) -> sprocket@internal@context:attribute().
on_mouseout(Cb) ->
event(<<"mouseout"/utf8>>, Cb).
-file("src/sprocket/html/events.gleam", 133).
-spec on_mouseover(fun((gleam@dynamic:dynamic_()) -> nil)) -> sprocket@internal@context:attribute().
on_mouseover(Cb) ->
event(<<"mouseover"/utf8>>, Cb).
-file("src/sprocket/html/events.gleam", 137).
-spec on_mouseup(fun((gleam@dynamic:dynamic_()) -> nil)) -> sprocket@internal@context:attribute().
on_mouseup(Cb) ->
event(<<"mouseup"/utf8>>, Cb).
-file("src/sprocket/html/events.gleam", 141).
-spec on_scroll(fun((gleam@dynamic:dynamic_()) -> nil)) -> sprocket@internal@context:attribute().
on_scroll(Cb) ->
event(<<"scroll"/utf8>>, Cb).
-file("src/sprocket/html/events.gleam", 145).
-spec on_submit(fun((gleam@dynamic:dynamic_()) -> nil)) -> sprocket@internal@context:attribute().
on_submit(Cb) ->
event(<<"submit"/utf8>>, Cb).
-file("src/sprocket/html/events.gleam", 149).
-spec on_touchcancel(fun((gleam@dynamic:dynamic_()) -> nil)) -> sprocket@internal@context:attribute().
on_touchcancel(Cb) ->
event(<<"touchcancel"/utf8>>, Cb).
-file("src/sprocket/html/events.gleam", 153).
-spec on_touchend(fun((gleam@dynamic:dynamic_()) -> nil)) -> sprocket@internal@context:attribute().
on_touchend(Cb) ->
event(<<"touchend"/utf8>>, Cb).
-file("src/sprocket/html/events.gleam", 157).
-spec on_touchmove(fun((gleam@dynamic:dynamic_()) -> nil)) -> sprocket@internal@context:attribute().
on_touchmove(Cb) ->
event(<<"touchmove"/utf8>>, Cb).
-file("src/sprocket/html/events.gleam", 161).
-spec on_touchstart(fun((gleam@dynamic:dynamic_()) -> nil)) -> sprocket@internal@context:attribute().
on_touchstart(Cb) ->
event(<<"touchstart"/utf8>>, Cb).
-file("src/sprocket/html/events.gleam", 165).
-spec on_wheel(fun((gleam@dynamic:dynamic_()) -> nil)) -> sprocket@internal@context:attribute().
on_wheel(Cb) ->
event(<<"wheel"/utf8>>, Cb).
-file("src/sprocket/html/events.gleam", 173).
?DOC(
" \n"
" Decode the value from an event `event.target.value`.\n"
).
-spec decode_target_value(gleam@dynamic:dynamic_()) -> {ok, binary()} |
{error, list(gleam@dynamic@decode:decode_error())}.
decode_target_value(Event) ->
gleam@dynamic@decode:run(
Event,
gleam@dynamic@decode:at(
[<<"target"/utf8>>, <<"value"/utf8>>],
{decoder, fun gleam@dynamic@decode:decode_string/1}
)
).
-file("src/sprocket/html/events.gleam", 178).
-spec decode_target_checked(gleam@dynamic:dynamic_()) -> {ok, boolean()} |
{error, list(gleam@dynamic@decode:decode_error())}.
decode_target_checked(Event) ->
gleam@dynamic@decode:run(
Event,
gleam@dynamic@decode:at(
[<<"target"/utf8>>, <<"checked"/utf8>>],
{decoder, fun gleam@dynamic@decode:decode_bool/1}
)
).
-file("src/sprocket/html/events.gleam", 194).
?DOC(" Decode a mouse event that includes position `clientX` and `clientY` and modifier keys.\n").
-spec decode_mouse_event(gleam@dynamic:dynamic_()) -> {ok, mouse_event()} |
{error, list(gleam@dynamic@decode:decode_error())}.
decode_mouse_event(Event) ->
_pipe = Event,
gleam@dynamic@decode:run(
_pipe,
begin
gleam@dynamic@decode:field(
<<"clientX"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_int/1},
fun(X) ->
gleam@dynamic@decode:field(
<<"clientY"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_int/1},
fun(Y) ->
gleam@dynamic@decode:field(
<<"ctrlKey"/utf8>>,
{decoder,
fun gleam@dynamic@decode:decode_bool/1},
fun(Ctrl_key) ->
gleam@dynamic@decode:field(
<<"shiftKey"/utf8>>,
{decoder,
fun gleam@dynamic@decode:decode_bool/1},
fun(Shift_key) ->
gleam@dynamic@decode:field(
<<"altKey"/utf8>>,
{decoder,
fun gleam@dynamic@decode:decode_bool/1},
fun(Alt_key) ->
gleam@dynamic@decode:field(
<<"metaKey"/utf8>>,
{decoder,
fun gleam@dynamic@decode:decode_bool/1},
fun(Meta_key) ->
gleam@dynamic@decode:success(
{mouse_event,
X,
Y,
Ctrl_key,
Shift_key,
Alt_key,
Meta_key}
)
end
)
end
)
end
)
end
)
end
)
end
)
end
).
-file("src/sprocket/html/events.gleam", 229).
-spec decode_key_event(gleam@dynamic:dynamic_()) -> {ok, key_event()} |
{error, list(gleam@dynamic@decode:decode_error())}.
decode_key_event(Event) ->
_pipe = Event,
gleam@dynamic@decode:run(
_pipe,
begin
gleam@dynamic@decode:field(
<<"key"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Key) ->
gleam@dynamic@decode:field(
<<"code"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Code) ->
gleam@dynamic@decode:field(
<<"ctrlKey"/utf8>>,
{decoder,
fun gleam@dynamic@decode:decode_bool/1},
fun(Ctrl_key) ->
gleam@dynamic@decode:field(
<<"shiftKey"/utf8>>,
{decoder,
fun gleam@dynamic@decode:decode_bool/1},
fun(Shift_key) ->
gleam@dynamic@decode:field(
<<"altKey"/utf8>>,
{decoder,
fun gleam@dynamic@decode:decode_bool/1},
fun(Alt_key) ->
gleam@dynamic@decode:field(
<<"metaKey"/utf8>>,
{decoder,
fun gleam@dynamic@decode:decode_bool/1},
fun(Meta_key) ->
gleam@dynamic@decode:success(
{key_event,
Key,
Code,
Ctrl_key,
Shift_key,
Alt_key,
Meta_key}
)
end
)
end
)
end
)
end
)
end
)
end
)
end
).
-file("src/sprocket/html/events.gleam", 251).
?DOC(" Decode the form data from a form submit event.\n").
-spec decode_form_data(gleam@dynamic:dynamic_()) -> {ok,
gleam@dict:dict(binary(), binary())} |
{error, list(gleam@dynamic@decode:decode_error())}.
decode_form_data(Event) ->
_pipe = Event,
gleam@dynamic@decode:run(
_pipe,
begin
gleam@dynamic@decode:field(
<<"formData"/utf8>>,
gleam@dynamic@decode:dict(
{decoder, fun gleam@dynamic@decode:decode_string/1},
{decoder, fun gleam@dynamic@decode:decode_string/1}
),
fun(Form_data) -> gleam@dynamic@decode:success(Form_data) end
)
end
).
-file("src/sprocket/html/events.gleam", 266).
?DOC(" Decode the key from a key press event.\n").
-spec decode_keypress(gleam@dynamic:dynamic_()) -> {ok, binary()} |
{error, list(gleam@dynamic@decode:decode_error())}.
decode_keypress(Event) ->
_pipe = Event,
gleam@dynamic@decode:run(
_pipe,
begin
gleam@dynamic@decode:field(
<<"key"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Key) -> gleam@dynamic@decode:success(Key) end
)
end
).