Add rendering the translation with title tags
This commit is contained in:
@ -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
|
||||||
|
|||||||
35
lib/outlook/internal_tree/translation.ex
Normal file
35
lib/outlook/internal_tree/translation.ex
Normal 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
|
||||||
@ -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
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user