defmodule Mobilizon.Web.EmailView do use Phoenix.View, root: "lib/web/templates", pattern: "**/*", namespace: Mobilizon.Web alias Mobilizon.Actors.Actor alias Mobilizon.Service.Address alias Mobilizon.Service.DateTime, as: DateTimeRenderer alias Mobilizon.Service.Formatter.{HTML, Text} use Mobilizon.Web, :verified_routes import Mobilizon.Web.Gettext import Mobilizon.Service.Metadata.Utils, only: [process_description: 1] import Phoenix.HTML, only: [raw: 1, html_escape: 1, safe_to_string: 1] defdelegate datetime_to_string(datetime, locale \\ "en", format \\ :medium), to: DateTimeRenderer defdelegate datetime_to_time_string(datetime, locale \\ "en", format \\ :short), to: DateTimeRenderer defdelegate datetime_to_date_string(datetime, locale \\ "en", format \\ :short), to: DateTimeRenderer defdelegate datetime_tz_convert(datetime, timezone), to: DateTimeRenderer defdelegate datetime_relative(datetime, locale \\ "en"), to: DateTimeRenderer defdelegate render_address(address), to: Address defdelegate is_same_day?(one, two), to: DateTimeRenderer defdelegate display_name(actor), to: Actor defdelegate preferred_username_and_domain(actor), to: Actor @spec escape_html(String.t()) :: String.t() def escape_html(string) do string |> html_escape() |> safe_to_string() end @spec sanitize_to_basic_html(String.t()) :: String.t() def sanitize_to_basic_html(html) do case HTML.basic_html(html) do {:ok, html} -> html _ -> "" end end defdelegate html_to_text(html), to: HTML def mail_quote(text) do # https://www.emailonacid.com/blog/article/email-development/line-length-in-html-email/ Text.quote_paragraph(text, 78) end def escaped_display_name_and_username(actor) do actor |> display_name_and_username() |> escape_html() end def display_name_and_username(%Actor{preferred_username: "anonymous"}) do dgettext("activity", "An anonymous profile") end def display_name_and_username(actor), do: Actor.display_name_and_username(actor) end