51 lines
1.2 KiB
Elixir
51 lines
1.2 KiB
Elixir
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"""
|
|
<span title={@node.content} {@node.eph.attributes}><%= elipsed_text(@node.content, 30) %></span><br>
|
|
"""
|
|
end
|
|
|
|
def tnode(assigns) when assigns.node.type == :element do
|
|
~H"""
|
|
<<%= @node.name %><.attributes :for={{k,v} <- @node.attributes} name={k} value={v}
|
|
/>><br>
|
|
<div class="ml-8">
|
|
<.tnode :for={child_node <- @node.content} node={child_node} />
|
|
</div>
|
|
"""
|
|
end
|
|
|
|
def tnode(assigns) when assigns.node.type == :text do
|
|
~H"""
|
|
"<%= elipsed_text(@node.content, 30) %><br>
|
|
"""
|
|
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
|