This repository has been archived on 2023-11-26. You can view files and clone it, but cannot push or open issues or pull requests.
bdfr-browser/lib/bdfr_browser/render_utils.ex

40 lines
1.2 KiB
Elixir
Raw Normal View History

2023-08-15 11:09:32 +00:00
defmodule BdfrBrowser.RenderUtils do
def selftext(txt) when is_binary(txt) do
Earmark.as_html!(txt)
end
def comment(cmt) when is_binary(cmt) do
Earmark.as_html!(cmt)
end
def message(msg) when is_binary(msg) do
2023-08-16 14:49:48 +00:00
img_replacement =
"<p class=\"text-center\"><img src=\"/chat_media/\\1\" class=\"img-fluid\" loading=\"lazy\" /></p>"
2023-08-15 11:09:32 +00:00
msg
2023-08-16 18:14:18 +00:00
|> maybe_insert_image(img_replacement)
2023-08-15 11:09:32 +00:00
|> String.replace(~r/https:\/\/i\.redd\.it\/(.+)/, img_replacement)
|> Earmark.as_html!()
end
2023-08-16 18:14:18 +00:00
def link_to_user(name) when is_binary(name) and name in ~w([deleted] DELETED), do: name
def link_to_user(name) when is_binary(name), do: "<a href=\"/user/#{name}\">#{name}</a>"
2023-08-16 18:14:18 +00:00
# Helper
defp maybe_insert_image(<<"mxc://reddit.com/", filename::binary>> = msg, replacement) when is_binary(msg) do
2023-08-16 18:14:18 +00:00
chat_directory = Application.fetch_env!(:bdfr_browser, :chat_directory)
img_directory = Path.join([chat_directory, "images"])
imgs = Path.wildcard("#{img_directory}/#{filename}.*")
if Enum.empty?(imgs) do
msg
else
img = hd(imgs)
String.replace(replacement, "\\1", Path.basename(img))
end
end
defp maybe_insert_image(msg, _replacement) when is_binary(msg), do: msg
2023-08-15 11:09:32 +00:00
end