Current section
Files
Jump to
Current section
Files
src/nakai@render.erl
-module(nakai@render).
-compile(no_auto_import).
-export([render_attr/1, render_attrs/1, render_children/1, render_doctype/1, render_node/1]).
-spec render_attr(gleam@html@attrs:attr()) -> gleam@string_builder:string_builder().
render_attr(Attr) ->
gleam@string_builder:from_strings(
[<<" "/utf8>>,
erlang:element(2, Attr),
<<"=\""/utf8>>,
erlang:element(3, Attr),
<<"\""/utf8>>]
).
-spec render_attrs(list(gleam@html@attrs:attr())) -> gleam@string_builder:string_builder().
render_attrs(Attrs) ->
_pipe = Attrs,
_pipe@1 = gleam@list:map(_pipe, fun render_attr/1),
gleam@string_builder:concat(_pipe@1).
-spec render_children(list(nakai@nakai:node_())) -> gleam@string_builder:string_builder().
render_children(Children) ->
_pipe = Children,
_pipe@1 = gleam@list:map(_pipe, fun render_node/1),
gleam@string_builder:concat(_pipe@1).
-spec render_doctype(gleam@html@doctype:doctype()) -> gleam@string_builder:string_builder().
render_doctype(Doctype) ->
gleam@string_builder:from_strings(
[<<"<!DOCTYPE "/utf8>>, erlang:element(2, Doctype), <<">"/utf8>>]
).
-spec render_node(nakai@nakai:node_()) -> gleam@string_builder:string_builder().
render_node(Tree) ->
case Tree of
{component, Factory} ->
render_node(Factory());
{fragment, Children} ->
render_children(Children);
{html_node, Html_node} ->
case Html_node of
{comment, Content} ->
gleam@string_builder:from_strings(
[<<"<!-- "/utf8>>, Content, <<" -->"/utf8>>]
);
{element, Tag, Attrs, Children@1} ->
gleam@string_builder:concat(
[gleam@string_builder:from_strings([<<"<"/utf8>>, Tag]),
render_attrs(Attrs),
gleam@string_builder:from_string(<<">"/utf8>>),
render_children(
gleam@list:map(
Children@1,
fun(A) -> {html_node, A} end
)
),
gleam@string_builder:from_strings(
[<<"</"/utf8>>, Tag, <<">"/utf8>>]
)]
);
{leaf_element, Tag@1, Attrs@1} ->
gleam@string_builder:concat(
[gleam@string_builder:from_strings(
[<<"<"/utf8>>, Tag@1]
),
render_attrs(Attrs@1),
gleam@string_builder:from_string(<<" />"/utf8>>)]
);
{text, Content@1} ->
gleam@string_builder:from_string(Content@1)
end;
none ->
gleam@string_builder:new()
end.