-module(datastar_gleam@event).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/datastar_gleam/event.gleam").
-export([new_elements/1, new_remove/1, with_id/2, with_retry/2, with_selector/2, with_mode/2, with_use_view_transition/2, patch_elements_to_datastar_event/1, new_signals/1, with_signals_id/2, with_signals_retry/2, with_only_if_missing/2, patch_signals_to_datastar_event/1, new_script/1, with_script_id/2, with_script_retry/2, with_auto_remove/2, with_attributes/2, execute_script_to_datastar_event/1]).
-export_type([patch_elements/0, patch_signals/0, execute_script/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 patch_elements() :: {patch_elements,
gleam@option:option(binary()),
integer(),
gleam@option:option(binary()),
gleam@option:option(binary()),
datastar_gleam@consts:element_patch_mode(),
boolean()}.
-type patch_signals() :: {patch_signals,
gleam@option:option(binary()),
integer(),
binary(),
boolean()}.
-type execute_script() :: {execute_script,
gleam@option:option(binary()),
integer(),
binary(),
gleam@option:option(boolean()),
list(binary())}.
-file("src/datastar_gleam/event.gleam", 44).
?DOC(
" Create a `PatchElements` builder that inserts the given HTML fragment.\n"
"\n"
" ```gleam\n"
" let patch =\n"
" event.new_elements(\"<div id='message'>Hello!</div>\")\n"
" |> event.with_selector(\"#target\")\n"
" |> event.with_mode(event.Append)\n"
" ```\n"
).
-spec new_elements(binary()) -> patch_elements().
new_elements(Html) ->
{patch_elements, none, 1000, {some, Html}, none, outer, false}.
-file("src/datastar_gleam/event.gleam", 57).
?DOC(
" Create a `PatchElements` builder that removes the element matched by\n"
" `selector`.\n"
).
-spec new_remove(binary()) -> patch_elements().
new_remove(Selector) ->
{patch_elements, none, 1000, none, {some, Selector}, remove, false}.
-file("src/datastar_gleam/event.gleam", 69).
?DOC(" Set the SSE event ID.\n").
-spec with_id(patch_elements(), binary()) -> patch_elements().
with_id(P, Id) ->
{patch_elements,
{some, Id},
erlang:element(3, P),
erlang:element(4, P),
erlang:element(5, P),
erlang:element(6, P),
erlang:element(7, P)}.
-file("src/datastar_gleam/event.gleam", 74).
?DOC(" Set the SSE retry duration in milliseconds.\n").
-spec with_retry(patch_elements(), integer()) -> patch_elements().
with_retry(P, Retry) ->
{patch_elements,
erlang:element(2, P),
Retry,
erlang:element(4, P),
erlang:element(5, P),
erlang:element(6, P),
erlang:element(7, P)}.
-file("src/datastar_gleam/event.gleam", 79).
?DOC(" Set the CSS selector that identifies the target element.\n").
-spec with_selector(patch_elements(), binary()) -> patch_elements().
with_selector(P, Selector) ->
{patch_elements,
erlang:element(2, P),
erlang:element(3, P),
erlang:element(4, P),
{some, Selector},
erlang:element(6, P),
erlang:element(7, P)}.
-file("src/datastar_gleam/event.gleam", 84).
?DOC(" Set the insertion mode (default `Outer`).\n").
-spec with_mode(patch_elements(), datastar_gleam@consts:element_patch_mode()) -> patch_elements().
with_mode(P, Mode) ->
{patch_elements,
erlang:element(2, P),
erlang:element(3, P),
erlang:element(4, P),
erlang:element(5, P),
Mode,
erlang:element(7, P)}.
-file("src/datastar_gleam/event.gleam", 89).
?DOC(" Enable or disable view transitions.\n").
-spec with_use_view_transition(patch_elements(), boolean()) -> patch_elements().
with_use_view_transition(P, Enabled) ->
{patch_elements,
erlang:element(2, P),
erlang:element(3, P),
erlang:element(4, P),
erlang:element(5, P),
erlang:element(6, P),
Enabled}.
-file("src/datastar_gleam/event.gleam", 94).
?DOC(" Convert a `PatchElements` builder into a `DatastarEvent`.\n").
-spec patch_elements_to_datastar_event(patch_elements()) -> datastar_gleam:datastar_event().
patch_elements_to_datastar_event(P) ->
Data = [],
Data@1 = case erlang:element(5, P) of
{some, Sel} ->
lists:append(
Data,
[<<<<"selector"/utf8, " "/utf8>>/binary, Sel/binary>>]
);
none ->
Data
end,
Data@2 = case erlang:element(6, P) of
outer ->
Data@1;
_ ->
lists:append(
Data@1,
[<<<<"mode"/utf8, " "/utf8>>/binary,
(datastar_gleam@consts:element_patch_mode_string(
erlang:element(6, P)
))/binary>>]
)
end,
Data@3 = case erlang:element(7, P) of
true ->
lists:append(Data@2, [<<"useViewTransition"/utf8, " True"/utf8>>]);
false ->
Data@2
end,
Data@4 = case erlang:element(4, P) of
{some, El} ->
_pipe = gleam@string:split(El, <<"\n"/utf8>>),
_pipe@1 = gleam@list:map(
_pipe,
fun(Line) ->
<<<<"elements"/utf8, " "/utf8>>/binary, Line/binary>>
end
),
lists:append(Data@3, _pipe@1);
none ->
Data@3
end,
{datastar_event,
patch_elements,
erlang:element(2, P),
erlang:element(3, P),
Data@4}.
-file("src/datastar_gleam/event.gleam", 146).
?DOC(
" Create a `PatchSignals` builder with the given JSON-encoded signals.\n"
"\n"
" ```gleam\n"
" let patch =\n"
" event.new_signals(\"{ \\\"count\\\": 42 }\")\n"
" |> event.with_only_if_missing(True)\n"
" ```\n"
).
-spec new_signals(binary()) -> patch_signals().
new_signals(Signals) ->
{patch_signals, none, 1000, Signals, false}.
-file("src/datastar_gleam/event.gleam", 156).
?DOC(" Set the SSE event ID.\n").
-spec with_signals_id(patch_signals(), binary()) -> patch_signals().
with_signals_id(P, Id) ->
{patch_signals,
{some, Id},
erlang:element(3, P),
erlang:element(4, P),
erlang:element(5, P)}.
-file("src/datastar_gleam/event.gleam", 161).
?DOC(" Set the SSE retry duration in milliseconds.\n").
-spec with_signals_retry(patch_signals(), integer()) -> patch_signals().
with_signals_retry(P, Retry) ->
{patch_signals,
erlang:element(2, P),
Retry,
erlang:element(4, P),
erlang:element(5, P)}.
-file("src/datastar_gleam/event.gleam", 166).
?DOC(" Only patch signals that are not already present in the frontend store.\n").
-spec with_only_if_missing(patch_signals(), boolean()) -> patch_signals().
with_only_if_missing(P, Only_if_missing) ->
{patch_signals,
erlang:element(2, P),
erlang:element(3, P),
erlang:element(4, P),
Only_if_missing}.
-file("src/datastar_gleam/event.gleam", 171).
?DOC(" Convert a `PatchSignals` builder into a `DatastarEvent`.\n").
-spec patch_signals_to_datastar_event(patch_signals()) -> datastar_gleam:datastar_event().
patch_signals_to_datastar_event(P) ->
Data = [],
Data@1 = case erlang:element(5, P) of
true ->
lists:append(Data, [<<"onlyIfMissing"/utf8, " True"/utf8>>]);
false ->
Data
end,
Data@2 = begin
_pipe = gleam@string:split(erlang:element(4, P), <<"\n"/utf8>>),
_pipe@1 = gleam@list:map(
_pipe,
fun(Line) ->
<<<<"signals"/utf8, " "/utf8>>/binary, Line/binary>>
end
),
lists:append(Data@1, _pipe@1)
end,
{datastar_event,
patch_signals,
erlang:element(2, P),
erlang:element(3, P),
Data@2}.
-file("src/datastar_gleam/event.gleam", 213).
?DOC(
" Create an `ExecuteScript` builder with the given JavaScript source.\n"
"\n"
" ```gleam\n"
" let script =\n"
" event.new_script(\"console.log('Hello from Gleam!')\")\n"
" |> event.with_auto_remove(True)\n"
" ```\n"
).
-spec new_script(binary()) -> execute_script().
new_script(Script) ->
{execute_script, none, 1000, Script, none, []}.
-file("src/datastar_gleam/event.gleam", 224).
?DOC(" Set the SSE event ID.\n").
-spec with_script_id(execute_script(), binary()) -> execute_script().
with_script_id(S, Id) ->
{execute_script,
{some, Id},
erlang:element(3, S),
erlang:element(4, S),
erlang:element(5, S),
erlang:element(6, S)}.
-file("src/datastar_gleam/event.gleam", 229).
?DOC(" Set the SSE retry duration in milliseconds.\n").
-spec with_script_retry(execute_script(), integer()) -> execute_script().
with_script_retry(S, Retry) ->
{execute_script,
erlang:element(2, S),
Retry,
erlang:element(4, S),
erlang:element(5, S),
erlang:element(6, S)}.
-file("src/datastar_gleam/event.gleam", 234).
?DOC(" Automatically remove the `<script>` tag after it executes.\n").
-spec with_auto_remove(execute_script(), boolean()) -> execute_script().
with_auto_remove(S, Auto_remove) ->
{execute_script,
erlang:element(2, S),
erlang:element(3, S),
erlang:element(4, S),
{some, Auto_remove},
erlang:element(6, S)}.
-file("src/datastar_gleam/event.gleam", 239).
?DOC(" Add extra attributes to the generated `<script>` tag.\n").
-spec with_attributes(execute_script(), list(binary())) -> execute_script().
with_attributes(S, Attributes) ->
{execute_script,
erlang:element(2, S),
erlang:element(3, S),
erlang:element(4, S),
erlang:element(5, S),
Attributes}.
-file("src/datastar_gleam/event.gleam", 288).
-spec append_to_last(list(binary()), binary()) -> list(binary()).
append_to_last(Items, Suffix) ->
case lists:reverse(Items) of
[Last | Front] ->
lists:reverse([<<Last/binary, Suffix/binary>> | Front]);
[] ->
[]
end.
-file("src/datastar_gleam/event.gleam", 247).
?DOC(" Convert an `ExecuteScript` builder into a `DatastarEvent`.\n").
-spec execute_script_to_datastar_event(execute_script()) -> datastar_gleam:datastar_event().
execute_script_to_datastar_event(S) ->
Data = [<<"selector"/utf8, " body"/utf8>>],
Data@1 = lists:append(
Data,
[<<<<"mode"/utf8, " "/utf8>>/binary,
(datastar_gleam@consts:element_patch_mode_string(append))/binary>>]
),
Script_tag = begin
Auto_remove_attr = case erlang:element(5, S) of
{some, false} ->
<<""/utf8>>;
_ ->
<<" data-effect=\"el.remove()\""/utf8>>
end,
Attrs = gleam@string:join(erlang:element(6, S), <<" "/utf8>>),
Attr_str = case Attrs of
<<""/utf8>> ->
<<""/utf8>>;
_ ->
<<" "/utf8, Attrs/binary>>
end,
<<<<<<"<script"/utf8, Auto_remove_attr/binary>>/binary,
Attr_str/binary>>/binary,
">"/utf8>>
end,
Lines = gleam@string:split(erlang:element(4, S), <<"\n"/utf8>>),
{First, Rest} = case Lines of
[F | R] ->
{F, R};
[] ->
{<<""/utf8>>, []}
end,
First_el = <<<<<<"elements"/utf8, " "/utf8>>/binary, Script_tag/binary>>/binary,
First/binary>>,
Rest_els = gleam@list:map(
Rest,
fun(L) -> <<<<"elements"/utf8, " "/utf8>>/binary, L/binary>> end
),
All_els = [First_el | Rest_els],
All_els@1 = append_to_last(All_els, <<"</script>"/utf8>>),
Data@2 = lists:append(Data@1, All_els@1),
{datastar_event,
patch_elements,
erlang:element(2, S),
erlang:element(3, S),
Data@2}.