Add rendering the translation with title tags

This commit is contained in:
Thelonius Kort
2023-01-14 22:04:28 +01:00
parent 705c7d2b53
commit a95131bdbb
4 changed files with 45 additions and 2 deletions

View File

@ -1,6 +1,6 @@
defmodule Outlook.InternalTree do defmodule Outlook.InternalTree do
alias Outlook.InternalTree.{Html,Modifiers,RawInternalBasic,InternalTree} alias Outlook.InternalTree.{Html,Modifiers,RawInternalBasic,InternalTree,Translation}
alias Outlook.HtmlPreparations.HtmlPreparation alias Outlook.HtmlPreparations.HtmlPreparation
def render_html(tree) do def render_html(tree) do
@ -35,4 +35,8 @@ defmodule Outlook.InternalTree do
) )
InternalTree.garnish(tree, options) InternalTree.garnish(tree, options)
end end
def render_translation(tree, translation) do
Translation.render_translation(tree, translation)
end
end end

View File

@ -0,0 +1,35 @@
defmodule Outlook.InternalTree.Translation do
alias Outlook.InternalTree.{InternalNode,TranslationUnit}
def render_translation([%TranslationUnit{} = tunit | rest], translation) do
[ %TranslationUnit{tunit |
eph: add_title_attribute(tunit.eph, tunit.content),
content: Map.get(translation, tunit.nid, %{content: "ERROR!!! Missing Tunit in translation!"})
|> Map.get(:content)
} | render_translation(rest, translation) ]
end
def render_translation([%InternalNode{type: :element} = node | rest], translation) do
[ %InternalNode{node |
content: render_translation(node.content, translation)
} | render_translation(rest, translation) ]
end
def render_translation([node | rest], translation) do
[ node | render_translation(rest, translation) ]
end
def render_translation([], _), do: []
defp add_title_attribute(eph, html_string) do
attributes = Map.get(eph, :attributes, %{})
|> Map.put(:title,
html_string
|> Floki.parse_fragment!()
|> Floki.text()
)
Map.put(eph, :attributes, attributes)
end
end

View File

@ -1,7 +1,7 @@
defmodule OutlookWeb.TranslationLive.Show do defmodule OutlookWeb.TranslationLive.Show do
use OutlookWeb, :live_view use OutlookWeb, :live_view
alias Outlook.Translations alias Outlook.{Translations,InternalTree}
@impl true @impl true
def mount(_params, _session, socket) do def mount(_params, _session, socket) do

View File

@ -18,4 +18,8 @@
<:item title="Unauthorized"><%= @translation.unauthorized %></:item> <:item title="Unauthorized"><%= @translation.unauthorized %></:item>
</.list> </.list>
<div class="article">
<.render_doc tree={InternalTree.render_translation(@translation.article.content, @translation.content)} />
</div>
<.back navigate={~p"/translations"}>Back to translations</.back> <.back navigate={~p"/translations"}>Back to translations</.back>