Fix hashtags.
[akkoma] / lib / pleroma / web / common_api / utils.ex
index 75c63e5f418bc79ed8938e59d94cc0c3e08b9a1e..3c09f0cc756753914806e170332913784e37333a 100644 (file)
@@ -78,13 +78,15 @@ defmodule Pleroma.Web.CommonAPI.Utils do
     Enum.join([text | attachment_text], "<br>")
   end
 
-  def format_input(text, mentions, _tags) do
+  def format_input(text, mentions, tags) do
     text
     |> Formatter.html_escape
-    |> Formatter.linkify
     |> String.replace("\n", "<br>")
-    |> add_user_links(mentions)
-    # |> add_tag_links(tags)
+    |> (&({[], &1})).()
+    |> Formatter.add_links
+    |> Formatter.add_user_links(mentions)
+    |> Formatter.add_hashtag_links(tags)
+    |> Formatter.finalize
   end
 
   def add_tag_links(text, tags) do
@@ -97,25 +99,6 @@ defmodule Pleroma.Web.CommonAPI.Utils do
     end)
   end
 
-  def add_user_links(text, mentions) do
-    mentions = mentions
-    |> Enum.sort_by(fn ({name, _}) -> -String.length(name) end)
-    |> Enum.map(fn({name, user}) -> {name, user, Ecto.UUID.generate} end)
-
-    # This replaces the mention with a unique reference first so it doesn't
-    # contain parts of other replaced mentions. There probably is a better
-    # solution for this...
-    step_one = mentions
-    |> Enum.reduce(text, fn ({match, _user, uuid}, text) ->
-      String.replace(text, match, uuid)
-    end)
-
-    Enum.reduce(mentions, step_one, fn ({match, %User{ap_id: ap_id}, uuid}, text) ->
-      short_match = String.split(match, "@") |> tl() |> hd()
-      String.replace(text, uuid, "<span><a href='#{ap_id}'>@<span>#{short_match}</span></a></span>")
-    end)
-  end
-
   def make_note_data(actor, to, context, content_html, attachments, inReplyTo, tags, cw \\ nil, cc \\ []) do
       object = %{
         "type" => "Note",