X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fformatter.ex;h=d199c924348f6cbf5bd70c0a36cdd1b558a05d0d;hb=37b802682ce1231f99976538a11c1584d48f47f4;hp=515909af1bb8b00e3ceb4de8df5b08f1281b9ce5;hpb=8f9bcc4ab0b16efa9168f49f6e2cc14bc424d398;p=akkoma diff --git a/lib/pleroma/formatter.ex b/lib/pleroma/formatter.ex index 515909af1..d199c9243 100644 --- a/lib/pleroma/formatter.ex +++ b/lib/pleroma/formatter.ex @@ -116,7 +116,28 @@ defmodule Pleroma.Formatter do _ -> [] end) - @emoji @finmoji_with_filenames ++ @emoji_from_file + @emoji_from_globs ( + static_path = Path.join(:code.priv_dir(:pleroma), "static") + + globs = + Application.get_env(:pleroma, :emoji, []) + |> Keyword.get(:shortcode_globs, []) + + paths = + Enum.map(globs, fn glob -> + Path.join(static_path, glob) + |> Path.wildcard() + end) + |> Enum.concat() + + Enum.map(paths, fn path -> + shortcode = Path.basename(path, Path.extname(path)) + external_path = Path.join("/", Path.relative_to(path, static_path)) + {shortcode, external_path} + end) + ) + + @emoji @finmoji_with_filenames ++ @emoji_from_globs ++ @emoji_from_file def emojify(text, emoji \\ @emoji) def emojify(text, nil), do: text @@ -144,7 +165,7 @@ defmodule Pleroma.Formatter do @emoji end - @link_regex ~r/https?:\/\/[\w\.\/?=\-#\+%&@~\(\):]+[\w\/]/u + @link_regex ~r/https?:\/\/[\w\.\/?=\-#\+%&@~'\(\):]+[\w\/]/u def html_escape(text) do Regex.split(@link_regex, text, include_captures: true) @@ -160,6 +181,7 @@ defmodule Pleroma.Formatter do links = Regex.scan(@link_regex, text) |> Enum.map(fn [url] -> {Ecto.UUID.generate(), url} end) + |> Enum.sort_by(fn {_, url} -> -String.length(url) end) uuid_text = links @@ -168,7 +190,13 @@ defmodule Pleroma.Formatter do subs = subs ++ Enum.map(links, fn {uuid, url} -> - {uuid, "#{url}"} + {:safe, link} = Phoenix.HTML.Link.link(url, to: url) + + link = + link + |> IO.iodata_to_binary() + + {uuid, link} end) {subs, uuid_text} @@ -193,7 +221,9 @@ defmodule Pleroma.Formatter do ap_id = info["source_data"]["url"] || ap_id short_match = String.split(match, "@") |> tl() |> hd() - {uuid, "@#{short_match}"} + + {uuid, + "@#{short_match}"} end) {subs, uuid_text} @@ -214,8 +244,8 @@ defmodule Pleroma.Formatter do subs = subs ++ - Enum.map(tags, fn {_, tag, uuid} -> - url = "" + Enum.map(tags, fn {tag_text, tag, uuid} -> + url = "" {uuid, url} end)