Compare commits

6 Commits

Author SHA1 Message Date
2111cfa1d1 Add iframe to elements that may be empty 2025-05-05 14:45:43 +02:00
c8d1639afa Fix ugly bug 2023-06-09 13:57:05 +02:00
43e11178db Fix darkmode-widget cover buttons 2023-06-08 16:33:03 +02:00
4828a68bcd Fix following links when editing translation 2023-05-29 13:19:42 +02:00
2b25c13095 Fix bug which omits element's attributes
There is a questionable design decision: for
getting the attributes from the %InternalNode{} into
the rendered html output they always have to be copied
into node.eph.attributes. (OutlookWeb.HtmlDocComponent.dnode())
2023-05-28 15:31:08 +02:00
357bcae450 Add ’ to partitioning regex 2023-05-28 15:23:25 +02:00
7 changed files with 9 additions and 6 deletions

View File

@ -6,6 +6,8 @@ let TranslationFormHook = {
this.tunit_editor = this.el.querySelector("#tunit-editor-content") this.tunit_editor = this.el.querySelector("#tunit-editor-content")
this.save_edit_button = this.el.querySelector("#save-edit-button") this.save_edit_button = this.el.querySelector("#save-edit-button")
this.save_publish_button = this.el.querySelector("#save-publish-button") this.save_publish_button = this.el.querySelector("#save-publish-button")
let article_preview_links = document.querySelectorAll(".article-preview a")
article_preview_links.forEach(el => el.addEventListener('click', e => e.preventDefault()))
}, },
keyupHandler(e) { keyupHandler(e) {
var push_event = true var push_event = true

View File

@ -56,6 +56,7 @@ defmodule Outlook.InternalTree do
def render_public_content(tree, translation, language) do def render_public_content(tree, translation, language) do
Translation.render_translation(tree, translation) Translation.render_translation(tree, translation)
|> garnish(%{})
|> Html.render_doc() |> Html.render_doc()
|> Hyphenation.hyphenate(language) |> Hyphenation.hyphenate(language)
end end

View File

@ -10,7 +10,7 @@ defmodule Outlook.InternalTree.RawInternalBasic do
@splitmarker "@@translationunit@@" @splitmarker "@@translationunit@@"
@nonperiodmarker "@@nonperiod@@" @nonperiodmarker "@@nonperiod@@"
@void_elements ~w(img br hr) @void_elements ~w(img br hr iframe)
def set_split_markers([ %InternalNode{type: :text} = textnode | rest ]) do def set_split_markers([ %InternalNode{type: :text} = textnode | rest ]) do
[ %InternalNode{textnode | [ %InternalNode{textnode |
@ -18,7 +18,7 @@ defmodule Outlook.InternalTree.RawInternalBasic do
|> String.replace(~r/\.\.\.+/u, "") |> String.replace(~r/\.\.\.+/u, "")
|> String.replace(~r/([[:upper:]])\./u, "\\1#{@nonperiodmarker}") |> String.replace(~r/([[:upper:]])\./u, "\\1#{@nonperiodmarker}")
|> String.replace(~r/(\d)\.(\d)/u, "\\1#{@nonperiodmarker}\\2") |> String.replace(~r/(\d)\.(\d)/u, "\\1#{@nonperiodmarker}\\2")
|> String.replace(~r|([.?!]["'”]?\s*)|u, "\\1#{@splitmarker}") |> String.replace(~r|([.?!]["'”]?\s*)|u, "\\1#{@splitmarker}")
|> String.replace(@nonperiodmarker, ".") |> String.replace(@nonperiodmarker, ".")
} | set_split_markers(rest) ] } | set_split_markers(rest) ]
end end

View File

@ -52,7 +52,7 @@ defmodule Outlook.InternalTree.TunitModifications do
end end
[%InternalNode{node| content: content} | apply_modifier(rest, modifier, tu_ids)] [%InternalNode{node| content: content} | apply_modifier(rest, modifier, tu_ids)]
end end
def apply_modifier([node, rest], modifier, tu_ids), do: [node | apply_modifier(rest, modifier, tu_ids)] def apply_modifier([node | rest], modifier, tu_ids), do: [node | apply_modifier(rest, modifier, tu_ids)]
def apply_modifier([],_, _), do: [] def apply_modifier([],_, _), do: []
def process_tunit_list(tunits, modifier, tu_ids) do def process_tunit_list(tunits, modifier, tu_ids) do

View File

@ -9,7 +9,7 @@ defmodule OutlookWeb.DarkModeComponent do
def dark_mode_widget(assigns) do def dark_mode_widget(assigns) do
~H""" ~H"""
<div id="dark-mode-widget" class="absolute flex w-full justify-between p-0" phx-hook="dark_mode_widget"> <div id="dark-mode-widget" class="relative flex w-full justify-between p-0" phx-hook="dark_mode_widget">
<div class="flex"></div> <div class="flex"></div>
<div class="flex"> <div class="flex">
<button class="p-2" type="button"> <button class="p-2" type="button">

View File

@ -8,7 +8,7 @@
</a> </a>
<.dark_mode_widget /> <.dark_mode_widget />
</header> </header>
<main class="px-2 py-4 sm:px-6 lg:px-8"> <main class="px-2 sm:px-6 lg:px-8">
<div class="mx-auto max-w-xl"> <div class="mx-auto max-w-xl">
<.flash kind={:info} title="Success!" flash={@flash} /> <.flash kind={:info} title="Success!" flash={@flash} />
<.flash kind={:error} title="Error!" flash={@flash} /> <.flash kind={:error} title="Error!" flash={@flash} />

View File

@ -51,7 +51,7 @@ defmodule OutlookWeb.TranslationLive.FormComponent do
</.simple_form> </.simple_form>
<.tunit_editor current_tunit={@current_tunit} target={@myself} /> <.tunit_editor current_tunit={@current_tunit} target={@myself} />
</div> </div>
<div class="article basis-1/2 max-h-screen overflow-auto"> <div class="article article-preview basis-1/2 max-h-screen overflow-auto">
<.button phx-disable-with="Translating..." phx-click="translate-deepl" phx-target={@myself} <.button phx-disable-with="Translating..." phx-click="translate-deepl" phx-target={@myself}
data-confirm-not="Are you sure? All previously translated text will be lost.">Translate with Deepl</.button> data-confirm-not="Are you sure? All previously translated text will be lost.">Translate with Deepl</.button>
<progress :if={@deepl_progress} max="100" value={@deepl_progress} /> <progress :if={@deepl_progress} max="100" value={@deepl_progress} />