-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( [<<">, 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>>] ); {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( [<<">, 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.