Improve opengraph embeds
This brings them more in line with Mastodon. - Deduplicates display name from the title and content - Removes arbitrary limits on the size of the embedded image - Removes angled double quotes from embed descriptions. These would normally just indicate that the content is a quote, but that is already implied by the content being in an embed.
This commit is contained in:
parent
a5dce42c85
commit
2c401dafa1
|
@ -19,31 +19,18 @@ def build_tags(%{
|
||||||
}) do
|
}) do
|
||||||
attachments = build_attachments(object)
|
attachments = build_attachments(object)
|
||||||
scrubbed_content = Utils.scrub_html_and_truncate(object)
|
scrubbed_content = Utils.scrub_html_and_truncate(object)
|
||||||
# Zero width space
|
|
||||||
content =
|
|
||||||
if scrubbed_content != "" and scrubbed_content != "\u200B" do
|
|
||||||
": “" <> scrubbed_content <> "”"
|
|
||||||
else
|
|
||||||
""
|
|
||||||
end
|
|
||||||
|
|
||||||
# Most previews only show og:title which is inconvenient. Instagram
|
|
||||||
# hacks this by putting the description in the title and making the
|
|
||||||
# description longer prefixed by how many likes and shares the post
|
|
||||||
# has. Here we use the descriptive nickname in the title, and expand
|
|
||||||
# the full account & nickname in the description. We also use the cute^Wevil
|
|
||||||
# smart quotes around the status text like Instagram, too.
|
|
||||||
[
|
[
|
||||||
{:meta,
|
{:meta,
|
||||||
[
|
[
|
||||||
property: "og:title",
|
property: "og:title",
|
||||||
content: "#{user.name}" <> content
|
content: Utils.user_name_string(user)
|
||||||
], []},
|
], []},
|
||||||
{:meta, [property: "og:url", content: url], []},
|
{:meta, [property: "og:url", content: url], []},
|
||||||
{:meta,
|
{:meta,
|
||||||
[
|
[
|
||||||
property: "og:description",
|
property: "og:description",
|
||||||
content: "#{Utils.user_name_string(user)}" <> content
|
content: scrubbed_content
|
||||||
], []},
|
], []},
|
||||||
{:meta, [property: "og:type", content: "website"], []}
|
{:meta, [property: "og:type", content: "website"], []}
|
||||||
] ++
|
] ++
|
||||||
|
@ -95,8 +82,7 @@ defp build_attachments(%{data: %{"attachment" => attachments}}) do
|
||||||
"image" ->
|
"image" ->
|
||||||
[
|
[
|
||||||
{:meta, [property: "og:image", content: Utils.attachment_url(url["href"])], []},
|
{:meta, [property: "og:image", content: Utils.attachment_url(url["href"])], []},
|
||||||
{:meta, [property: "og:image:width", content: 150], []},
|
{:meta, [property: "og:image:alt", content: attachment["name"]], []}
|
||||||
{:meta, [property: "og:image:height", content: 150], []}
|
|
||||||
| acc
|
| acc
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -16,17 +16,10 @@ defmodule Pleroma.Web.Metadata.Providers.TwitterCard do
|
||||||
def build_tags(%{activity_id: id, object: object, user: user}) do
|
def build_tags(%{activity_id: id, object: object, user: user}) do
|
||||||
attachments = build_attachments(id, object)
|
attachments = build_attachments(id, object)
|
||||||
scrubbed_content = Utils.scrub_html_and_truncate(object)
|
scrubbed_content = Utils.scrub_html_and_truncate(object)
|
||||||
# Zero width space
|
|
||||||
content =
|
|
||||||
if scrubbed_content != "" and scrubbed_content != "\u200B" do
|
|
||||||
"“" <> scrubbed_content <> "”"
|
|
||||||
else
|
|
||||||
""
|
|
||||||
end
|
|
||||||
|
|
||||||
[
|
[
|
||||||
title_tag(user),
|
title_tag(user),
|
||||||
{:meta, [property: "twitter:description", content: content], []}
|
{:meta, [property: "twitter:description", content: scrubbed_content], []}
|
||||||
] ++
|
] ++
|
||||||
if attachments == [] or Metadata.activity_nsfw?(object) do
|
if attachments == [] or Metadata.activity_nsfw?(object) do
|
||||||
[
|
[
|
||||||
|
@ -91,7 +84,9 @@ defp build_attachments(id, %{data: %{"attachment" => attachments}}) do
|
||||||
{:meta, [property: "twitter:card", content: "player"], []},
|
{:meta, [property: "twitter:card", content: "player"], []},
|
||||||
{:meta, [property: "twitter:player", content: player_url(id)], []},
|
{:meta, [property: "twitter:player", content: player_url(id)], []},
|
||||||
{:meta, [property: "twitter:player:width", content: "480"], []},
|
{:meta, [property: "twitter:player:width", content: "480"], []},
|
||||||
{:meta, [property: "twitter:player:height", content: "480"], []}
|
{:meta, [property: "twitter:player:height", content: "480"], []},
|
||||||
|
{:meta, [property: "twitter:player:stream", content: url["href"]], []},
|
||||||
|
{:meta, [property: "twitter:player:stream:content_type", content: url["mediaType"]], []}
|
||||||
| acc
|
| acc
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -46,7 +46,7 @@ test "it uses summary twittercard if post has no attachment" do
|
||||||
|
|
||||||
assert [
|
assert [
|
||||||
{:meta, [property: "twitter:title", content: Utils.user_name_string(user)], []},
|
{:meta, [property: "twitter:title", content: Utils.user_name_string(user)], []},
|
||||||
{:meta, [property: "twitter:description", content: "“pleroma in a nutshell”"], []},
|
{:meta, [property: "twitter:description", content: "pleroma in a nutshell"], []},
|
||||||
{:meta, [property: "twitter:image", content: "http://localhost:4001/images/avi.png"],
|
{:meta, [property: "twitter:image", content: "http://localhost:4001/images/avi.png"],
|
||||||
[]},
|
[]},
|
||||||
{:meta, [property: "twitter:card", content: "summary"], []}
|
{:meta, [property: "twitter:card", content: "summary"], []}
|
||||||
|
@ -91,7 +91,7 @@ test "it renders avatar not attachment if post is nsfw and unfurl_nsfw is disabl
|
||||||
|
|
||||||
assert [
|
assert [
|
||||||
{:meta, [property: "twitter:title", content: Utils.user_name_string(user)], []},
|
{:meta, [property: "twitter:title", content: Utils.user_name_string(user)], []},
|
||||||
{:meta, [property: "twitter:description", content: "“pleroma in a nutshell”"], []},
|
{:meta, [property: "twitter:description", content: "pleroma in a nutshell"], []},
|
||||||
{:meta, [property: "twitter:image", content: "http://localhost:4001/images/avi.png"],
|
{:meta, [property: "twitter:image", content: "http://localhost:4001/images/avi.png"],
|
||||||
[]},
|
[]},
|
||||||
{:meta, [property: "twitter:card", content: "summary"], []}
|
{:meta, [property: "twitter:card", content: "summary"], []}
|
||||||
|
@ -134,7 +134,7 @@ test "it renders supported types of attachments and skips unknown types" do
|
||||||
|
|
||||||
assert [
|
assert [
|
||||||
{:meta, [property: "twitter:title", content: Utils.user_name_string(user)], []},
|
{:meta, [property: "twitter:title", content: Utils.user_name_string(user)], []},
|
||||||
{:meta, [property: "twitter:description", content: "“pleroma in a nutshell”"], []},
|
{:meta, [property: "twitter:description", content: "pleroma in a nutshell"], []},
|
||||||
{:meta, [property: "twitter:card", content: "summary_large_image"], []},
|
{:meta, [property: "twitter:card", content: "summary_large_image"], []},
|
||||||
{:meta, [property: "twitter:player", content: "https://pleroma.gov/tenshi.png"], []},
|
{:meta, [property: "twitter:player", content: "https://pleroma.gov/tenshi.png"], []},
|
||||||
{:meta, [property: "twitter:card", content: "player"], []},
|
{:meta, [property: "twitter:card", content: "player"], []},
|
||||||
|
@ -144,7 +144,9 @@ test "it renders supported types of attachments and skips unknown types" do
|
||||||
content: Router.Helpers.o_status_url(Endpoint, :notice_player, activity.id)
|
content: Router.Helpers.o_status_url(Endpoint, :notice_player, activity.id)
|
||||||
], []},
|
], []},
|
||||||
{:meta, [property: "twitter:player:width", content: "480"], []},
|
{:meta, [property: "twitter:player:width", content: "480"], []},
|
||||||
{:meta, [property: "twitter:player:height", content: "480"], []}
|
{:meta, [property: "twitter:player:height", content: "480"], []},
|
||||||
|
{:meta, [property: "twitter:player:stream", content: "https://pleroma.gov/about/juche.webm"], []},
|
||||||
|
{:meta, [property: "twitter:player:stream:content_type", content: "video/webm"], []}
|
||||||
] == result
|
] == result
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue