Current section
Files
Jump to
Current section
Files
src/nakai@internal@document.erl
-module(nakai@internal@document).
-compile([no_auto_import, nowarn_unused_vars]).
-export([new/0, merge/2, from_doctype/1, append_html_attrs/2, from_head/1, append_head/2, from_body/1, append_body/2, replace_body/2, into_head/1, debug/1]).
-export_type([document/0]).
-type document() :: {document,
gleam@option:option(binary()),
gleam@string_builder:string_builder(),
gleam@string_builder:string_builder(),
gleam@string_builder:string_builder(),
list(gleam@string_builder:string_builder())}.
-spec new() -> document().
new() ->
{document,
none,
gleam@string_builder:new(),
gleam@string_builder:new(),
gleam@string_builder:new(),
[]}.
-spec merge(document(), document()) -> document().
merge(Self, New) ->
{document,
gleam@option:'or'(erlang:element(2, New), erlang:element(2, Self)),
gleam@string_builder:append_builder(
erlang:element(3, Self),
erlang:element(3, New)
),
gleam@string_builder:append_builder(
erlang:element(4, Self),
erlang:element(4, New)
),
gleam@string_builder:append_builder(
erlang:element(5, Self),
erlang:element(5, New)
),
gleam@list:append(erlang:element(6, Self), erlang:element(6, New))}.
-spec from_doctype(binary()) -> document().
from_doctype(Doctype) ->
erlang:setelement(2, new(), {some, Doctype}).
-spec append_html_attrs(document(), gleam@string_builder:string_builder()) -> document().
append_html_attrs(Self, Html_attrs) ->
erlang:setelement(
3,
Self,
gleam@string_builder:append_builder(erlang:element(3, Self), Html_attrs)
).
-spec from_head(gleam@string_builder:string_builder()) -> document().
from_head(Head) ->
erlang:setelement(4, new(), Head).
-spec append_head(document(), gleam@string_builder:string_builder()) -> document().
append_head(Self, Head) ->
erlang:setelement(
4,
Self,
gleam@string_builder:append_builder(erlang:element(4, Self), Head)
).
-spec from_body(gleam@string_builder:string_builder()) -> document().
from_body(Body) ->
erlang:setelement(5, new(), Body).
-spec append_body(document(), gleam@string_builder:string_builder()) -> document().
append_body(Self, Body) ->
erlang:setelement(
5,
Self,
gleam@string_builder:append_builder(erlang:element(5, Self), Body)
).
-spec replace_body(document(), gleam@string_builder:string_builder()) -> document().
replace_body(Self, Body) ->
erlang:setelement(5, Self, Body).
-spec into_head(document()) -> document().
into_head(State) ->
erlang:setelement(
5,
erlang:setelement(
4,
State,
gleam@string_builder:append_builder(
erlang:element(4, State),
erlang:element(5, State)
)
),
gleam@string_builder:new()
).
-spec debug(document()) -> document().
debug(State) ->
Doctype_line = begin
_pipe = erlang:element(2, State),
_pipe@1 = gleam@option:map(
_pipe,
fun(Doctype) ->
<<<<"doctype: "/utf8, Doctype/binary>>/binary, "\n"/utf8>>
end
),
gleam@option:unwrap(_pipe@1, <<""/utf8>>)
end,
_pipe@3 = gleam@string:concat(
[Doctype_line,
<<"html_attrs: "/utf8>>,
gleam@string_builder:to_string(erlang:element(3, State)),
<<"\nhead: "/utf8>>,
gleam@string_builder:to_string(erlang:element(4, State)),
<<"\nbody: "/utf8>>,
gleam@string_builder:to_string(erlang:element(5, State)),
<<"\nscripts: "/utf8>>,
begin
_pipe@2 = gleam@string_builder:join(
erlang:element(6, State),
<<"\n"/utf8>>
),
gleam@string_builder:to_string(_pipe@2)
end,
<<"\n\n\n"/utf8>>]
),
gleam@io:println(_pipe@3),
State.