diff --git a/app/javascript/mastodon/selectors/index.js b/app/javascript/mastodon/selectors/index.js
index 9e6daf45fa..5ccaba23fd 100644
--- a/app/javascript/mastodon/selectors/index.js
+++ b/app/javascript/mastodon/selectors/index.js
@@ -30,12 +30,19 @@ export const makeGetStatus = () => {
}
let filtered = false;
+ let mediaFiltered = false;
if ((accountReblog || accountBase).get('id') !== me && filters) {
let filterResults = statusReblog?.get('filtered') || statusBase.get('filtered') || ImmutableList();
if (!warnInsteadOfHide && filterResults.some((result) => filters.getIn([result.get('filter'), 'filter_action']) === 'hide')) {
return null;
}
- filterResults = filterResults.filter(result => filters.has(result.get('filter')));
+
+ let mediaFilters = filterResults.filter(result => filters.getIn([result.get('filter'), 'filter_action']) === 'blur');
+ if (!mediaFilters.isEmpty()) {
+ mediaFiltered = mediaFilters.map(result => filters.getIn([result.get('filter'), 'title']));
+ }
+
+ filterResults = filterResults.filter(result => filters.has(result.get('filter')) && filters.getIn([result.get('filter'), 'filter_action']) !== 'blur');
if (!filterResults.isEmpty()) {
filtered = filterResults.map(result => filters.getIn([result.get('filter'), 'title']));
}
@@ -45,6 +52,7 @@ export const makeGetStatus = () => {
map.set('reblog', statusReblog);
map.set('account', accountBase);
map.set('matched_filters', filtered);
+ map.set('matched_media_filters', mediaFiltered);
});
},
);
diff --git a/app/models/custom_filter.rb b/app/models/custom_filter.rb
index a351a140a0..d653c55310 100644
--- a/app/models/custom_filter.rb
+++ b/app/models/custom_filter.rb
@@ -33,7 +33,7 @@ class CustomFilter < ApplicationRecord
include Expireable
include Redisable
- enum :action, { warn: 0, hide: 1 }, suffix: :action
+ enum :action, { warn: 0, hide: 1, blur: 2 }, suffix: :action
belongs_to :account
has_many :keywords, class_name: 'CustomFilterKeyword', inverse_of: :custom_filter, dependent: :destroy
diff --git a/app/views/filters/_filter_fields.html.haml b/app/views/filters/_filter_fields.html.haml
index 797c969b24..f5237e9586 100644
--- a/app/views/filters/_filter_fields.html.haml
+++ b/app/views/filters/_filter_fields.html.haml
@@ -26,7 +26,7 @@
.fields-group
= f.input :filter_action,
as: :radio_buttons,
- collection: %i(warn hide),
+ collection: %i(warn blur hide),
hint: t('simple_form.hints.filters.action'),
include_blank: false,
label_method: ->(action) { filter_action_label(action) },
diff --git a/config/locales/simple_form.en.yml b/config/locales/simple_form.en.yml
index cfb3adf13a..5e162a0d64 100644
--- a/config/locales/simple_form.en.yml
+++ b/config/locales/simple_form.en.yml
@@ -75,6 +75,7 @@ en:
filters:
action: Chose which action to perform when a post matches the filter
actions:
+ blur: Hide media behind a warning, without hiding the text itself
hide: Completely hide the filtered content, behaving as if it did not exist
warn: Hide the filtered content behind a warning mentioning the filter's title
form_admin_settings:
@@ -260,6 +261,7 @@ en:
name: Hashtag
filters:
actions:
+ blur: Hide media with a warning
hide: Hide completely
warn: Hide with a warning
form_admin_settings:
diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb
index 6084014ded..6a77163f7c 100644
--- a/lib/mastodon/version.rb
+++ b/lib/mastodon/version.rb
@@ -45,7 +45,7 @@ module Mastodon
def api_versions
{
- mastodon: 4,
+ mastodon: 5,
}
end