defmodule OutlookWeb.HtmlTreeComponent do use Phoenix.Component # use OutlookWeb, :html import OutlookWeb.CoreComponents alias Phoenix.LiveView.JS attr :tree_items, :list, required: true def treeview(assigns) do ~H"""
<%= for tree_item <- @tree_items do %> <%= case tree_item do %> <% %{node: %{type: :element}} = item -> %> <.tree_element node={item.node} level={item.level}> <% %{node: %{type: :text}} = item -> %> <.tree_text node={item.node} level={item.level}> <% %{node: %{type: :comment}} = item -> %> <.tree_comment node={item.node} level={item.level}> <% end %> <% end %>
<.link phx-click={JS.push("apply_modifier", value: %{modifier: :unwrap})}> <.button title="unwraps selected elements">Unwrap <.link phx-click={JS.push("partition_text", value: %{modifier: :unwrap})}> <.button title="splits text into sentences">Partition """ end def tree_element(assigns) do ~H"""
<%= "#{String.duplicate("  ", @level)}<#{@node.name}>" %>
""" end def tree_text(assigns) do ~H"""
<%= "#{String.duplicate("  ", @level)}\"#{String.slice(@node.content, 0, 15)}...\"\n" %>
""" end def tree_comment(assigns) do ~H"""
<%= "#{String.duplicate("  ", @level)}\n" %>
""" end end