defmodule OutlookWeb.HtmlTreeComponent do use Phoenix.Component # use OutlookWeb, :html import OutlookWeb.CoreComponents import OutlookWeb.ViewHelpers alias Phoenix.LiveView.JS attr :tree, :list, required: true def render_tree(assigns) do ~H""" <.tnode :for={node <- @tree} node={node} /> """ end def attributes(assigns) do ~H"  <%= @name %>="<%= elipsed_text(@value, 16) %>"" end def tnode(%{node: %{status: _}} = assigns) do ~H""" <%= elipsed_text(@node.content, 30) %>
""" end def tnode(assigns) when assigns.node.type == :element do ~H""" <<%= @node.name %><.attributes :for={{k,v} <- @node.attributes} name={k} value={v} />>
<.tnode :for={child_node <- @node.content} node={child_node} />
""" end def tnode(assigns) when assigns.node.type == :text do ~H""" "<%= elipsed_text(@node.content, 30) %>
""" end def tnode(assigns) when assigns.node.type == :comment do ~H""" <!--<%= String.slice(@node.content, 0..35) %> <%= if String.length(@node.content) > 35 do %>"..."<% end %>--> """ end end