defmodule OutlookWeb.HtmlDocComponent do
use Phoenix.Component
# use OutlookWeb, :html
import OutlookWeb.CoreComponents
import Phoenix.HTML
alias Phoenix.LiveView.JS
attr :tree, :list, required: true
def render_doc(assigns) do
~H"""
<%= for node <- @tree do %>
<.dnode node={node} />
<% end %>
"""
end
def dnode(%{node: %{status: status}} = assigns) do
~H"""
<.dynamic_tag name="span" class="tunit" uuid={@node.uuid} {Map.get(@node.eph, :attributes, %{})}>
<%= @node.content |> raw %>
"""
end
def dnode(assigns) when assigns.node.type == :element do
~H"""
<.dynamic_tag name={@node.name} uuid={@node.uuid} {Map.get(@node.eph, :attributes, %{})}>
<%= for child_node <- @node.content do %>
<.dnode node={child_node} />
<% end %>
"""
end
def dnode(assigns) when assigns.node.type == :text do
~H"<%= @node.content %>"
end
def dnode(assigns) when assigns.node.type == :comment do
~H""
end
end