Allow more flexibility in InlineQuotePolicy
This commit is contained in:
parent
762794eed9
commit
163e563733
6 changed files with 50 additions and 9 deletions
|
@ -434,7 +434,7 @@ config :pleroma, :mrf_object_age,
|
||||||
|
|
||||||
config :pleroma, :mrf_follow_bot, follower_nickname: nil
|
config :pleroma, :mrf_follow_bot, follower_nickname: nil
|
||||||
|
|
||||||
config :pleroma, :mrf_inline_quote, prefix: "RT"
|
config :pleroma, :mrf_inline_quote, template: "<bdi>RT:</bdi> {url}"
|
||||||
|
|
||||||
config :pleroma, :rich_media,
|
config :pleroma, :rich_media,
|
||||||
enabled: true,
|
enabled: true,
|
||||||
|
|
|
@ -2994,6 +2994,24 @@ config :pleroma, :config_description, [
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
%{
|
||||||
|
group: :pleroma,
|
||||||
|
key: :mrf_inline_quote,
|
||||||
|
tab: :mrf,
|
||||||
|
related_policy: "Pleroma.Web.ActivityPub.MRF.InlineQuotePolicy",
|
||||||
|
label: "MRF Inline Quote Policy",
|
||||||
|
type: :group,
|
||||||
|
description: "Force quote url to appear in post content.",
|
||||||
|
children: [
|
||||||
|
%{
|
||||||
|
key: :template,
|
||||||
|
type: :string,
|
||||||
|
description:
|
||||||
|
"The template to append to the post. `{url}` will be replaced with the actual link to the quoted post.",
|
||||||
|
suggestions: ["<bdi>RT:</bdi> {url}"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
%{
|
%{
|
||||||
group: :pleroma,
|
group: :pleroma,
|
||||||
key: :modules,
|
key: :modules,
|
||||||
|
|
|
@ -269,7 +269,7 @@ Notes:
|
||||||
* `federated_timeline_removal_shortcode`: A list of patterns which result in message with emojis whose shortcodes match being removed from federated timelines (a.k.a unlisted). This will apply only to statuses. Each pattern can be a string or a [regular expression](https://hexdocs.pm/elixir/Regex.html).
|
* `federated_timeline_removal_shortcode`: A list of patterns which result in message with emojis whose shortcodes match being removed from federated timelines (a.k.a unlisted). This will apply only to statuses. Each pattern can be a string or a [regular expression](https://hexdocs.pm/elixir/Regex.html).
|
||||||
|
|
||||||
#### :mrf_inline_quote
|
#### :mrf_inline_quote
|
||||||
* `prefix`: Prefix before the link (default: `RT`)
|
* `template`: The template to append to the post. `{url}` will be replaced with the actual link to the quoted post. Default: `<bdi>RT:</bdi> {url}`
|
||||||
|
|
||||||
### :activitypub
|
### :activitypub
|
||||||
* `unfollow_blocked`: Whether blocks result in people getting unfollowed
|
* `unfollow_blocked`: Whether blocks result in people getting unfollowed
|
||||||
|
|
|
@ -6,8 +6,10 @@ defmodule Pleroma.Web.ActivityPub.MRF.InlineQuotePolicy do
|
||||||
@moduledoc "Force a quote line into the message content."
|
@moduledoc "Force a quote line into the message content."
|
||||||
@behaviour Pleroma.Web.ActivityPub.MRF.Policy
|
@behaviour Pleroma.Web.ActivityPub.MRF.Policy
|
||||||
|
|
||||||
defp build_inline_quote(prefix, url) do
|
defp build_inline_quote(template, url) do
|
||||||
"<span class=\"quote-inline\"><br/><br/>#{prefix}: <a href=\"#{url}\">#{url}</a></span>"
|
quote_line = String.replace(template, "{url}", "<a href=\"#{url}\">#{url}</a>")
|
||||||
|
|
||||||
|
"<span class=\"quote-inline\"><br/><br/>#{quote_line}</span>"
|
||||||
end
|
end
|
||||||
|
|
||||||
defp has_inline_quote?(content, quote_url) do
|
defp has_inline_quote?(content, quote_url) do
|
||||||
|
@ -27,14 +29,14 @@ defmodule Pleroma.Web.ActivityPub.MRF.InlineQuotePolicy do
|
||||||
if has_inline_quote?(content, quote_url) do
|
if has_inline_quote?(content, quote_url) do
|
||||||
object
|
object
|
||||||
else
|
else
|
||||||
prefix = Pleroma.Config.get([:mrf_inline_quote, :prefix])
|
template = Pleroma.Config.get([:mrf_inline_quote, :template])
|
||||||
|
|
||||||
content =
|
content =
|
||||||
if String.ends_with?(content, "</p>"),
|
if String.ends_with?(content, "</p>"),
|
||||||
do:
|
do:
|
||||||
String.trim_trailing(content, "</p>") <>
|
String.trim_trailing(content, "</p>") <>
|
||||||
build_inline_quote(prefix, quote_url) <> "</p>",
|
build_inline_quote(template, quote_url) <> "</p>",
|
||||||
else: content <> build_inline_quote(prefix, quote_url)
|
else: content <> build_inline_quote(template, quote_url)
|
||||||
|
|
||||||
Map.put(object, "content", content)
|
Map.put(object, "content", content)
|
||||||
end
|
end
|
||||||
|
|
|
@ -38,6 +38,7 @@ defmodule Pleroma.HTML.Scrubber.Default do
|
||||||
Meta.allow_tag_with_these_attributes(:abbr, ["title", "lang"])
|
Meta.allow_tag_with_these_attributes(:abbr, ["title", "lang"])
|
||||||
|
|
||||||
Meta.allow_tag_with_these_attributes(:b, ["lang"])
|
Meta.allow_tag_with_these_attributes(:b, ["lang"])
|
||||||
|
Meta.allow_tag_with_these_attributes(:bdi, [])
|
||||||
Meta.allow_tag_with_these_attributes(:blockquote, ["lang"])
|
Meta.allow_tag_with_these_attributes(:blockquote, ["lang"])
|
||||||
Meta.allow_tag_with_these_attributes(:br, ["lang"])
|
Meta.allow_tag_with_these_attributes(:br, ["lang"])
|
||||||
Meta.allow_tag_with_these_attributes(:code, ["lang"])
|
Meta.allow_tag_with_these_attributes(:code, ["lang"])
|
||||||
|
|
|
@ -22,7 +22,27 @@ defmodule Pleroma.Web.ActivityPub.MRF.InlineQuotePolicyTest do
|
||||||
{:ok, %{"object" => %{"content" => filtered}}} = InlineQuotePolicy.filter(activity)
|
{:ok, %{"object" => %{"content" => filtered}}} = InlineQuotePolicy.filter(activity)
|
||||||
|
|
||||||
assert filtered ==
|
assert filtered ==
|
||||||
"Nice post<span class=\"quote-inline\"><br/><br/>RT: <a href=\"https://gleasonator.com/objects/1234\">https://gleasonator.com/objects/1234</a></span>"
|
"Nice post<span class=\"quote-inline\"><br/><br/><bdi>RT:</bdi> <a href=\"https://gleasonator.com/objects/1234\">https://gleasonator.com/objects/1234</a></span>"
|
||||||
|
end
|
||||||
|
|
||||||
|
test "adds quote URL to post content, custom template" do
|
||||||
|
clear_config([:mrf_inline_quote, :template], "{url}'s quoting")
|
||||||
|
quote_url = "https://gleasonator.com/objects/1234"
|
||||||
|
|
||||||
|
activity = %{
|
||||||
|
"type" => "Create",
|
||||||
|
"actor" => "https://gleasonator.com/users/alex",
|
||||||
|
"object" => %{
|
||||||
|
"type" => "Note",
|
||||||
|
"content" => "Nice post",
|
||||||
|
"quoteUrl" => quote_url
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{:ok, %{"object" => %{"content" => filtered}}} = InlineQuotePolicy.filter(activity)
|
||||||
|
|
||||||
|
assert filtered ==
|
||||||
|
"Nice post<span class=\"quote-inline\"><br/><br/><a href=\"https://gleasonator.com/objects/1234\">https://gleasonator.com/objects/1234</a>'s quoting</span>"
|
||||||
end
|
end
|
||||||
|
|
||||||
test "doesn't add line breaks to markdown posts" do
|
test "doesn't add line breaks to markdown posts" do
|
||||||
|
@ -41,7 +61,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.InlineQuotePolicyTest do
|
||||||
{:ok, %{"object" => %{"content" => filtered}}} = InlineQuotePolicy.filter(activity)
|
{:ok, %{"object" => %{"content" => filtered}}} = InlineQuotePolicy.filter(activity)
|
||||||
|
|
||||||
assert filtered ==
|
assert filtered ==
|
||||||
"<p>Nice post<span class=\"quote-inline\"><br/><br/>RT: <a href=\"https://gleasonator.com/objects/1234\">https://gleasonator.com/objects/1234</a></span></p>"
|
"<p>Nice post<span class=\"quote-inline\"><br/><br/><bdi>RT:</bdi> <a href=\"https://gleasonator.com/objects/1234\">https://gleasonator.com/objects/1234</a></span></p>"
|
||||||
end
|
end
|
||||||
|
|
||||||
test "ignores Misskey quote posts" do
|
test "ignores Misskey quote posts" do
|
||||||
|
|
Loading…
Reference in a new issue