forked from AkkomaGang/akkoma
Metadata/Utils: use summary as description if set
When generating OpenGraph and TwitterCard metadata for a post, the summary field will be used first if it is set to generate the post description.
This commit is contained in:
parent
0b14f02ed2
commit
8683252fc5
3 changed files with 81 additions and 3 deletions
|
@ -8,8 +8,8 @@ defmodule Pleroma.Web.Metadata.Utils do
|
||||||
alias Pleroma.Formatter
|
alias Pleroma.Formatter
|
||||||
alias Pleroma.HTML
|
alias Pleroma.HTML
|
||||||
|
|
||||||
def scrub_html_and_truncate(%{data: %{"content" => content}} = object) do
|
defp scrub_html_and_truncate_object_field(field, object) do
|
||||||
content
|
field
|
||||||
# html content comes from DB already encoded, decode first and scrub after
|
# html content comes from DB already encoded, decode first and scrub after
|
||||||
|> HtmlEntities.decode()
|
|> HtmlEntities.decode()
|
||||||
|> String.replace(~r/<br\s?\/?>/, " ")
|
|> String.replace(~r/<br\s?\/?>/, " ")
|
||||||
|
@ -19,6 +19,17 @@ def scrub_html_and_truncate(%{data: %{"content" => content}} = object) do
|
||||||
|> Formatter.truncate()
|
|> Formatter.truncate()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def scrub_html_and_truncate(%{data: %{"summary" => summary}} = object)
|
||||||
|
when is_binary(summary) and summary != "" do
|
||||||
|
summary
|
||||||
|
|> scrub_html_and_truncate_object_field(object)
|
||||||
|
end
|
||||||
|
|
||||||
|
def scrub_html_and_truncate(%{data: %{"content" => content}} = object) do
|
||||||
|
content
|
||||||
|
|> scrub_html_and_truncate_object_field(object)
|
||||||
|
end
|
||||||
|
|
||||||
def scrub_html_and_truncate(content, max_length \\ 200) when is_binary(content) do
|
def scrub_html_and_truncate(content, max_length \\ 200) when is_binary(content) do
|
||||||
content
|
content
|
||||||
|> scrub_html
|
|> scrub_html
|
||||||
|
|
|
@ -39,6 +39,7 @@ test "it uses summary twittercard if post has no attachment" do
|
||||||
"actor" => user.ap_id,
|
"actor" => user.ap_id,
|
||||||
"tag" => [],
|
"tag" => [],
|
||||||
"id" => "https://pleroma.gov/objects/whatever",
|
"id" => "https://pleroma.gov/objects/whatever",
|
||||||
|
"summary" => "",
|
||||||
"content" => "pleroma in a nutshell"
|
"content" => "pleroma in a nutshell"
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -54,6 +55,36 @@ test "it uses summary twittercard if post has no attachment" do
|
||||||
] == result
|
] == result
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "it uses summary as description if post has one" do
|
||||||
|
user = insert(:user, name: "Jimmy Hendriks", bio: "born 19 March 1994")
|
||||||
|
{:ok, activity} = CommonAPI.post(user, %{status: "HI"})
|
||||||
|
|
||||||
|
note =
|
||||||
|
insert(:note, %{
|
||||||
|
data: %{
|
||||||
|
"actor" => user.ap_id,
|
||||||
|
"tag" => [],
|
||||||
|
"id" => "https://pleroma.gov/objects/whatever",
|
||||||
|
"summary" => "Public service announcement on caffeine consumption",
|
||||||
|
"content" => "cofe"
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
result = TwitterCard.build_tags(%{object: note, user: user, activity_id: activity.id})
|
||||||
|
|
||||||
|
assert [
|
||||||
|
{:meta, [property: "twitter:title", content: Utils.user_name_string(user)], []},
|
||||||
|
{:meta,
|
||||||
|
[
|
||||||
|
property: "twitter:description",
|
||||||
|
content: "Public service announcement on caffeine consumption"
|
||||||
|
], []},
|
||||||
|
{:meta, [property: "twitter:image", content: "http://localhost:4001/images/avi.png"],
|
||||||
|
[]},
|
||||||
|
{:meta, [property: "twitter:card", content: "summary"], []}
|
||||||
|
] == result
|
||||||
|
end
|
||||||
|
|
||||||
test "it renders avatar not attachment if post is nsfw and unfurl_nsfw is disabled" do
|
test "it renders avatar not attachment if post is nsfw and unfurl_nsfw is disabled" do
|
||||||
clear_config([Pleroma.Web.Metadata, :unfurl_nsfw], false)
|
clear_config([Pleroma.Web.Metadata, :unfurl_nsfw], false)
|
||||||
user = insert(:user, name: "Jimmy Hendriks", bio: "born 19 March 1994")
|
user = insert(:user, name: "Jimmy Hendriks", bio: "born 19 March 1994")
|
||||||
|
@ -65,6 +96,7 @@ test "it renders avatar not attachment if post is nsfw and unfurl_nsfw is disabl
|
||||||
"actor" => user.ap_id,
|
"actor" => user.ap_id,
|
||||||
"tag" => [],
|
"tag" => [],
|
||||||
"id" => "https://pleroma.gov/objects/whatever",
|
"id" => "https://pleroma.gov/objects/whatever",
|
||||||
|
"summary" => "",
|
||||||
"content" => "pleroma in a nutshell",
|
"content" => "pleroma in a nutshell",
|
||||||
"sensitive" => true,
|
"sensitive" => true,
|
||||||
"attachment" => [
|
"attachment" => [
|
||||||
|
@ -109,6 +141,7 @@ test "it renders supported types of attachments and skips unknown types" do
|
||||||
"actor" => user.ap_id,
|
"actor" => user.ap_id,
|
||||||
"tag" => [],
|
"tag" => [],
|
||||||
"id" => "https://pleroma.gov/objects/whatever",
|
"id" => "https://pleroma.gov/objects/whatever",
|
||||||
|
"summary" => "",
|
||||||
"content" => "pleroma in a nutshell",
|
"content" => "pleroma in a nutshell",
|
||||||
"attachment" => [
|
"attachment" => [
|
||||||
%{
|
%{
|
||||||
|
|
|
@ -8,7 +8,7 @@ defmodule Pleroma.Web.Metadata.UtilsTest do
|
||||||
alias Pleroma.Web.Metadata.Utils
|
alias Pleroma.Web.Metadata.Utils
|
||||||
|
|
||||||
describe "scrub_html_and_truncate/1" do
|
describe "scrub_html_and_truncate/1" do
|
||||||
test "it returns text without encode HTML" do
|
test "it returns content text without encode HTML if summary is nil" do
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
|
|
||||||
note =
|
note =
|
||||||
|
@ -16,6 +16,7 @@ test "it returns text without encode HTML" do
|
||||||
data: %{
|
data: %{
|
||||||
"actor" => user.ap_id,
|
"actor" => user.ap_id,
|
||||||
"id" => "https://pleroma.gov/objects/whatever",
|
"id" => "https://pleroma.gov/objects/whatever",
|
||||||
|
"summary" => nil,
|
||||||
"content" => "Pleroma's really cool!"
|
"content" => "Pleroma's really cool!"
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -23,6 +24,39 @@ test "it returns text without encode HTML" do
|
||||||
assert Utils.scrub_html_and_truncate(note) == "Pleroma's really cool!"
|
assert Utils.scrub_html_and_truncate(note) == "Pleroma's really cool!"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "it returns context text without encode HTML if summary is empty" do
|
||||||
|
user = insert(:user)
|
||||||
|
|
||||||
|
note =
|
||||||
|
insert(:note, %{
|
||||||
|
data: %{
|
||||||
|
"actor" => user.ap_id,
|
||||||
|
"id" => "https://pleroma.gov/objects/whatever",
|
||||||
|
"summary" => "",
|
||||||
|
"content" => "Pleroma's really cool!"
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
assert Utils.scrub_html_and_truncate(note) == "Pleroma's really cool!"
|
||||||
|
end
|
||||||
|
|
||||||
|
test "it returns summary text without encode HTML if summary is filled" do
|
||||||
|
user = insert(:user)
|
||||||
|
|
||||||
|
note =
|
||||||
|
insert(:note, %{
|
||||||
|
data: %{
|
||||||
|
"actor" => user.ap_id,
|
||||||
|
"id" => "https://pleroma.gov/objects/whatever",
|
||||||
|
"summary" => "Public service announcement on caffeine consumption",
|
||||||
|
"content" => "cofe"
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
assert Utils.scrub_html_and_truncate(note) ==
|
||||||
|
"Public service announcement on caffeine consumption"
|
||||||
|
end
|
||||||
|
|
||||||
test "it does not return old content after editing" do
|
test "it does not return old content after editing" do
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue