diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/pleroma/formatter.ex | 11 | ||||
| -rw-r--r-- | lib/pleroma/user.ex | 15 | ||||
| -rw-r--r-- | lib/pleroma/web/common_api/utils.ex | 14 | 
3 files changed, 28 insertions, 12 deletions
| diff --git a/lib/pleroma/formatter.ex b/lib/pleroma/formatter.ex index 024c6e117..37737853a 100644 --- a/lib/pleroma/formatter.ex +++ b/lib/pleroma/formatter.ex @@ -120,7 +120,7 @@ defmodule Pleroma.Formatter do    end    @doc "Adds the links to mentioned users" -  def add_user_links({subs, text}, mentions) do +  def add_user_links({subs, text}, mentions, options \\ []) do      mentions =        mentions        |> Enum.sort_by(fn {name, _} -> -String.length(name) end) @@ -142,11 +142,16 @@ defmodule Pleroma.Formatter do                ap_id              end -          full_match = String.trim_leading(match, "@") +          nickname = +            if options[:format] == :full do +              User.full_nickname(match) +            else +              User.local_nickname(match) +            end            {uuid,             "<span class='h-card'><a data-user='#{id}' class='u-url mention' href='#{ap_id}'>" <> -             "@<span>#{full_match}</span></a></span>"} +             "@<span>#{nickname}</span></a></span>"}          end)      {subs, uuid_text} diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index a52e536d3..2dc3c8d56 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -447,8 +447,7 @@ defmodule Pleroma.User do    def get_by_nickname(nickname) do      Repo.get_by(User, nickname: nickname) ||        if Regex.match?(~r(@#{Pleroma.Web.Endpoint.host()})i, nickname) do -        [local_nickname, _] = String.split(nickname, "@") -        Repo.get_by(User, nickname: local_nickname) +        Repo.get_by(User, nickname: local_nickname(nickname))        end    end @@ -990,7 +989,7 @@ defmodule Pleroma.User do        end)      bio -    |> CommonUtils.format_input(mentions, tags, "text/plain") +    |> CommonUtils.format_input(mentions, tags, "text/plain", user_links: [format: :full])      |> Formatter.emojify(emoji)    end @@ -1041,6 +1040,16 @@ defmodule Pleroma.User do      end    end +  def local_nickname(nickname_or_mention) do +    nickname_or_mention +    |> full_nickname() +    |> String.split("@") +    |> hd() +  end + +  def full_nickname(nickname_or_mention), +    do: String.trim_leading(nickname_or_mention, "@") +    def error_user(ap_id) do      %User{        name: ap_id, diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index 7e30d224c..a36ab5c15 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -116,16 +116,18 @@ defmodule Pleroma.Web.CommonAPI.Utils do      Enum.join([text | attachment_text], "<br>")    end +  def format_input(text, mentions, tags, format, options \\ []) +    @doc """    Formatting text to plain text.    """ -  def format_input(text, mentions, tags, "text/plain") do +  def format_input(text, mentions, tags, "text/plain", options) do      text      |> Formatter.html_escape("text/plain")      |> String.replace(~r/\r?\n/, "<br>")      |> (&{[], &1}).()      |> Formatter.add_links() -    |> Formatter.add_user_links(mentions) +    |> Formatter.add_user_links(mentions, options[:user_links] || [])      |> Formatter.add_hashtag_links(tags)      |> Formatter.finalize()    end @@ -133,24 +135,24 @@ defmodule Pleroma.Web.CommonAPI.Utils do    @doc """    Formatting text to html.    """ -  def format_input(text, mentions, _tags, "text/html") do +  def format_input(text, mentions, _tags, "text/html", options) do      text      |> Formatter.html_escape("text/html")      |> (&{[], &1}).() -    |> Formatter.add_user_links(mentions) +    |> Formatter.add_user_links(mentions, options[:user_links] || [])      |> Formatter.finalize()    end    @doc """    Formatting text to markdown.    """ -  def format_input(text, mentions, tags, "text/markdown") do +  def format_input(text, mentions, tags, "text/markdown", options) do      text      |> Formatter.mentions_escape(mentions)      |> Earmark.as_html!()      |> Formatter.html_escape("text/html")      |> (&{[], &1}).() -    |> Formatter.add_user_links(mentions) +    |> Formatter.add_user_links(mentions, options[:user_links] || [])      |> Formatter.add_hashtag_links(tags)      |> Formatter.finalize()    end | 
