Files
phoenix-ausblick/lib/outlook_web/components/html_doc_component.ex
Thelonius Kort d7325d64c5 Add use <tunit> instead of <span> for Deepl translation
To avoid getting results like "... bla.&quot;</span>" ->
"... bla</span>.&quot;" from Deepl we need to set set splitting_tags
option to an element name (that's not as common as span).
2023-01-14 21:59:57 +01:00

51 lines
1.3 KiB
Elixir

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(%{tunit_tag: _} = assigns) do
~H"""
<%= for node <- @tree do %>
<.dnode node={node} tunit_tag={@tunit_tag} />
<% end %>
"""
end
def render_doc(assigns) do
assigns
|> assign(:tunit_tag, "span")
|> render_doc()
end
def dnode(%{node: %{status: status}} = assigns) do
~H"""
<.dynamic_tag name={@tunit_tag} class="tunit" nid={@node.nid} {Map.get(@node.eph, :attributes, %{})}>
<%= @node.content |> raw %>
</.dynamic_tag>
"""
end
def dnode(assigns) when assigns.node.type == :element do
~H"""
<.dynamic_tag name={@node.name} nid={@node.nid} {@node.attributes |> Map.merge(Map.get(@node.eph, :attributes, %{}))}>
<%= for child_node <- @node.content do %>
<.dnode node={child_node} tunit_tag={@tunit_tag} />
<% end %>
</.dynamic_tag>
"""
end
def dnode(assigns) when assigns.node.type == :text do
~H"<%= @node.content %>"
end
def dnode(assigns) when assigns.node.type == :comment do
~H"<!--<%= @node.content |> raw %>-->"
end
end