forked from AkkomaGang/akkoma
Merge branch '491_full_mentions_in_user_bio' into 'develop'
[#491] Made user bio preserve full nicknames (nick@host) Closes #491 See merge request pleroma/pleroma!676
This commit is contained in:
commit
651ce1c97b
5 changed files with 45 additions and 15 deletions
|
@ -120,7 +120,7 @@ def add_links({subs, text}) do
|
||||||
end
|
end
|
||||||
|
|
||||||
@doc "Adds the links to mentioned users"
|
@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 =
|
||||||
mentions
|
mentions
|
||||||
|> Enum.sort_by(fn {name, _} -> -String.length(name) end)
|
|> Enum.sort_by(fn {name, _} -> -String.length(name) end)
|
||||||
|
@ -142,12 +142,16 @@ def add_user_links({subs, text}, mentions) do
|
||||||
ap_id
|
ap_id
|
||||||
end
|
end
|
||||||
|
|
||||||
short_match = String.split(match, "@") |> tl() |> hd()
|
nickname =
|
||||||
|
if options[:format] == :full do
|
||||||
|
User.full_nickname(match)
|
||||||
|
else
|
||||||
|
User.local_nickname(match)
|
||||||
|
end
|
||||||
|
|
||||||
{uuid,
|
{uuid,
|
||||||
"<span class='h-card'><a data-user='#{id}' class='u-url mention' href='#{ap_id}'>@<span>#{
|
"<span class='h-card'><a data-user='#{id}' class='u-url mention' href='#{ap_id}'>" <>
|
||||||
short_match
|
"@<span>#{nickname}</span></a></span>"}
|
||||||
}</span></a></span>"}
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
{subs, uuid_text}
|
{subs, uuid_text}
|
||||||
|
|
|
@ -447,8 +447,7 @@ def get_cached_by_nickname(nickname) do
|
||||||
def get_by_nickname(nickname) do
|
def get_by_nickname(nickname) do
|
||||||
Repo.get_by(User, nickname: nickname) ||
|
Repo.get_by(User, nickname: nickname) ||
|
||||||
if Regex.match?(~r(@#{Pleroma.Web.Endpoint.host()})i, nickname) do
|
if Regex.match?(~r(@#{Pleroma.Web.Endpoint.host()})i, nickname) do
|
||||||
[local_nickname, _] = String.split(nickname, "@")
|
Repo.get_by(User, nickname: local_nickname(nickname))
|
||||||
Repo.get_by(User, nickname: local_nickname)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -997,7 +996,7 @@ def parse_bio(bio, user) do
|
||||||
end)
|
end)
|
||||||
|
|
||||||
bio
|
bio
|
||||||
|> CommonUtils.format_input(mentions, tags, "text/plain")
|
|> CommonUtils.format_input(mentions, tags, "text/plain", user_links: [format: :full])
|
||||||
|> Formatter.emojify(emoji)
|
|> Formatter.emojify(emoji)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1048,6 +1047,16 @@ defp local_nickname_regex() do
|
||||||
end
|
end
|
||||||
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
|
def error_user(ap_id) do
|
||||||
%User{
|
%User{
|
||||||
name: ap_id,
|
name: ap_id,
|
||||||
|
|
|
@ -116,16 +116,18 @@ def add_attachments(text, attachments) do
|
||||||
Enum.join([text | attachment_text], "<br>")
|
Enum.join([text | attachment_text], "<br>")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def format_input(text, mentions, tags, format, options \\ [])
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Formatting text to plain text.
|
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
|
text
|
||||||
|> Formatter.html_escape("text/plain")
|
|> Formatter.html_escape("text/plain")
|
||||||
|> String.replace(~r/\r?\n/, "<br>")
|
|> String.replace(~r/\r?\n/, "<br>")
|
||||||
|> (&{[], &1}).()
|
|> (&{[], &1}).()
|
||||||
|> Formatter.add_links()
|
|> Formatter.add_links()
|
||||||
|> Formatter.add_user_links(mentions)
|
|> Formatter.add_user_links(mentions, options[:user_links] || [])
|
||||||
|> Formatter.add_hashtag_links(tags)
|
|> Formatter.add_hashtag_links(tags)
|
||||||
|> Formatter.finalize()
|
|> Formatter.finalize()
|
||||||
end
|
end
|
||||||
|
@ -133,24 +135,24 @@ def format_input(text, mentions, tags, "text/plain") do
|
||||||
@doc """
|
@doc """
|
||||||
Formatting text to html.
|
Formatting text to html.
|
||||||
"""
|
"""
|
||||||
def format_input(text, mentions, _tags, "text/html") do
|
def format_input(text, mentions, _tags, "text/html", options) do
|
||||||
text
|
text
|
||||||
|> Formatter.html_escape("text/html")
|
|> Formatter.html_escape("text/html")
|
||||||
|> (&{[], &1}).()
|
|> (&{[], &1}).()
|
||||||
|> Formatter.add_user_links(mentions)
|
|> Formatter.add_user_links(mentions, options[:user_links] || [])
|
||||||
|> Formatter.finalize()
|
|> Formatter.finalize()
|
||||||
end
|
end
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Formatting text to markdown.
|
Formatting text to markdown.
|
||||||
"""
|
"""
|
||||||
def format_input(text, mentions, tags, "text/markdown") do
|
def format_input(text, mentions, tags, "text/markdown", options) do
|
||||||
text
|
text
|
||||||
|> Formatter.mentions_escape(mentions)
|
|> Formatter.mentions_escape(mentions)
|
||||||
|> Earmark.as_html!()
|
|> Earmark.as_html!()
|
||||||
|> Formatter.html_escape("text/html")
|
|> Formatter.html_escape("text/html")
|
||||||
|> (&{[], &1}).()
|
|> (&{[], &1}).()
|
||||||
|> Formatter.add_user_links(mentions)
|
|> Formatter.add_user_links(mentions, options[:user_links] || [])
|
||||||
|> Formatter.add_hashtag_links(tags)
|
|> Formatter.add_hashtag_links(tags)
|
||||||
|> Formatter.finalize()
|
|> Formatter.finalize()
|
||||||
end
|
end
|
||||||
|
|
|
@ -124,7 +124,7 @@ test "turning urls into links" do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "add_user_links" do
|
describe "add_user_links" do
|
||||||
test "gives a replacement for user links" do
|
test "gives a replacement for user links, using local nicknames in user links text" do
|
||||||
text = "@gsimg According to @archa_eme_, that is @daggsy. Also hello @archaeme@archae.me"
|
text = "@gsimg According to @archa_eme_, that is @daggsy. Also hello @archaeme@archae.me"
|
||||||
gsimg = insert(:user, %{nickname: "gsimg"})
|
gsimg = insert(:user, %{nickname: "gsimg"})
|
||||||
|
|
||||||
|
|
|
@ -874,4 +874,19 @@ test "returns true when the account is unauthenticated and being viewed by a pri
|
||||||
Pleroma.Config.put([:instance, :account_activation_required], false)
|
Pleroma.Config.put([:instance, :account_activation_required], false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "parse_bio/2" do
|
||||||
|
test "preserves hosts in user links text" do
|
||||||
|
remote_user = insert(:user, local: false, nickname: "nick@domain.com")
|
||||||
|
user = insert(:user)
|
||||||
|
bio = "A.k.a. @nick@domain.com"
|
||||||
|
|
||||||
|
expected_text =
|
||||||
|
"A.k.a. <span class='h-card'><a data-user='#{remote_user.id}' class='u-url mention' href='#{
|
||||||
|
remote_user.ap_id
|
||||||
|
}'>" <> "@<span>nick@domain.com</span></a></span>"
|
||||||
|
|
||||||
|
assert expected_text == User.parse_bio(bio, user)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue