logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git

formatter.ex (1585B)


  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.Emoji.Formatter do
  5. alias Pleroma.Emoji
  6. alias Pleroma.HTML
  7. alias Pleroma.Web.Endpoint
  8. alias Pleroma.Web.MediaProxy
  9. def emojify(text) do
  10. emojify(text, Emoji.get_all())
  11. end
  12. def emojify(text, nil), do: text
  13. def emojify(text, emoji, strip \\ false) do
  14. Enum.reduce(emoji, text, fn
  15. {_, %Emoji{safe_code: emoji, safe_file: file}}, text ->
  16. String.replace(text, ":#{emoji}:", prepare_emoji_html(emoji, file, strip))
  17. {unsafe_emoji, unsafe_file}, text ->
  18. emoji = HTML.strip_tags(unsafe_emoji)
  19. file = HTML.strip_tags(unsafe_file)
  20. String.replace(text, ":#{emoji}:", prepare_emoji_html(emoji, file, strip))
  21. end)
  22. |> HTML.filter_tags()
  23. end
  24. defp prepare_emoji_html(_emoji, _file, true), do: ""
  25. defp prepare_emoji_html(emoji, file, _strip) do
  26. "<img class='emoji' alt='#{emoji}' title='#{emoji}' src='#{MediaProxy.url(file)}' />"
  27. end
  28. def demojify(text) do
  29. emojify(text, Emoji.get_all(), true)
  30. end
  31. def demojify(text, nil), do: text
  32. @doc "Outputs a list of the emoji-Maps in a text"
  33. def get_emoji_map(text) when is_binary(text) do
  34. Emoji.get_all()
  35. |> Enum.filter(fn {emoji, %Emoji{}} -> String.contains?(text, ":#{emoji}:") end)
  36. |> Enum.reduce(%{}, fn {name, %Emoji{file: file}}, acc ->
  37. Map.put(acc, name, to_string(URI.merge(Endpoint.url(), file)))
  38. end)
  39. end
  40. def get_emoji_map(_), do: %{}
  41. end