Current section

Files

Jump to
lustre src lustre@event.erl
Raw

src/lustre@event.erl

-module(lustre@event).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([emit/2, on/2, on_click/1, on_mouse_down/1, on_mouse_up/1, on_mouse_enter/1, on_mouse_leave/1, on_mouse_over/1, on_mouse_out/1, on_keypress/1, on_keydown/1, on_keyup/1, on_focus/1, on_blur/1, value/1, on_input/1, checked/1, on_check/1, mouse_position/1, prevent_default/1, on_submit/1, stop_propagation/1]).
-spec emit(binary(), gleam@json:json()) -> lustre@effect:effect(any()).
emit(Event, Data) ->
lustre@effect:event(Event, Data).
-spec on(
binary(),
fun((gleam@dynamic:dynamic_()) -> {ok, ROQ} |
{error, list(gleam@dynamic:decode_error())})
) -> lustre@internals@vdom:attribute(ROQ).
on(Name, Handler) ->
lustre@attribute:on(Name, Handler).
-spec on_click(ROT) -> lustre@internals@vdom:attribute(ROT).
on_click(Msg) ->
on(<<"click"/utf8>>, fun(_) -> {ok, Msg} end).
-spec on_mouse_down(ROV) -> lustre@internals@vdom:attribute(ROV).
on_mouse_down(Msg) ->
on(<<"mousedown"/utf8>>, fun(_) -> {ok, Msg} end).
-spec on_mouse_up(ROX) -> lustre@internals@vdom:attribute(ROX).
on_mouse_up(Msg) ->
on(<<"mouseup"/utf8>>, fun(_) -> {ok, Msg} end).
-spec on_mouse_enter(ROZ) -> lustre@internals@vdom:attribute(ROZ).
on_mouse_enter(Msg) ->
on(<<"mouseenter"/utf8>>, fun(_) -> {ok, Msg} end).
-spec on_mouse_leave(RPB) -> lustre@internals@vdom:attribute(RPB).
on_mouse_leave(Msg) ->
on(<<"mouseleave"/utf8>>, fun(_) -> {ok, Msg} end).
-spec on_mouse_over(RPD) -> lustre@internals@vdom:attribute(RPD).
on_mouse_over(Msg) ->
on(<<"mouseover"/utf8>>, fun(_) -> {ok, Msg} end).
-spec on_mouse_out(RPF) -> lustre@internals@vdom:attribute(RPF).
on_mouse_out(Msg) ->
on(<<"mouseout"/utf8>>, fun(_) -> {ok, Msg} end).
-spec on_keypress(fun((binary()) -> RPH)) -> lustre@internals@vdom:attribute(RPH).
on_keypress(Msg) ->
on(<<"keypress"/utf8>>, fun(Event) -> _pipe = Event,
_pipe@1 = (gleam@dynamic:field(
<<"key"/utf8>>,
fun gleam@dynamic:string/1
))(_pipe),
gleam@result:map(_pipe@1, Msg) end).
-spec on_keydown(fun((binary()) -> RPJ)) -> lustre@internals@vdom:attribute(RPJ).
on_keydown(Msg) ->
on(<<"keydown"/utf8>>, fun(Event) -> _pipe = Event,
_pipe@1 = (gleam@dynamic:field(
<<"key"/utf8>>,
fun gleam@dynamic:string/1
))(_pipe),
gleam@result:map(_pipe@1, Msg) end).
-spec on_keyup(fun((binary()) -> RPL)) -> lustre@internals@vdom:attribute(RPL).
on_keyup(Msg) ->
on(<<"keyup"/utf8>>, fun(Event) -> _pipe = Event,
_pipe@1 = (gleam@dynamic:field(
<<"key"/utf8>>,
fun gleam@dynamic:string/1
))(_pipe),
gleam@result:map(_pipe@1, Msg) end).
-spec on_focus(RPT) -> lustre@internals@vdom:attribute(RPT).
on_focus(Msg) ->
on(<<"focus"/utf8>>, fun(_) -> {ok, Msg} end).
-spec on_blur(RPV) -> lustre@internals@vdom:attribute(RPV).
on_blur(Msg) ->
on(<<"blur"/utf8>>, fun(_) -> {ok, Msg} end).
-spec value(gleam@dynamic:dynamic_()) -> {ok, binary()} |
{error, list(gleam@dynamic:decode_error())}.
value(Event) ->
_pipe = Event,
(gleam@dynamic:field(
<<"target"/utf8>>,
gleam@dynamic:field(<<"value"/utf8>>, fun gleam@dynamic:string/1)
))(_pipe).
-spec on_input(fun((binary()) -> RPN)) -> lustre@internals@vdom:attribute(RPN).
on_input(Msg) ->
on(<<"input"/utf8>>, fun(Event) -> _pipe = value(Event),
gleam@result:map(_pipe, Msg) end).
-spec checked(gleam@dynamic:dynamic_()) -> {ok, boolean()} |
{error, list(gleam@dynamic:decode_error())}.
checked(Event) ->
_pipe = Event,
(gleam@dynamic:field(
<<"target"/utf8>>,
gleam@dynamic:field(<<"checked"/utf8>>, fun gleam@dynamic:bool/1)
))(_pipe).
-spec on_check(fun((boolean()) -> RPP)) -> lustre@internals@vdom:attribute(RPP).
on_check(Msg) ->
on(<<"change"/utf8>>, fun(Event) -> _pipe = checked(Event),
gleam@result:map(_pipe, Msg) end).
-spec mouse_position(gleam@dynamic:dynamic_()) -> {ok, {float(), float()}} |
{error, list(gleam@dynamic:decode_error())}.
mouse_position(Event) ->
gleam@result:then(
(gleam@dynamic:field(<<"clientX"/utf8>>, fun gleam@dynamic:float/1))(
Event
),
fun(X) ->
gleam@result:then(
(gleam@dynamic:field(
<<"clientY"/utf8>>,
fun gleam@dynamic:float/1
))(Event),
fun(Y) -> {ok, {X, Y}} end
)
end
).
-spec prevent_default(gleam@dynamic:dynamic_()) -> nil.
prevent_default(_) ->
nil.
-spec on_submit(RPR) -> lustre@internals@vdom:attribute(RPR).
on_submit(Msg) ->
on(
<<"submit"/utf8>>,
fun(Event) ->
_ = prevent_default(Event),
{ok, Msg}
end
).
-spec stop_propagation(gleam@dynamic:dynamic_()) -> nil.
stop_propagation(_) ->
nil.