From 8b298c800f3b95bc3176d2011b2bbe9de6cb92c6 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Thu, 10 Apr 2025 18:20:37 +0300 Subject: [PATCH] better layout & button to remove all expired filters --- .../settings_modal/tabs/filtering_tab.js | 14 + .../settings_modal/tabs/filtering_tab.scss | 14 +- .../settings_modal/tabs/filtering_tab.vue | 369 +++++++++--------- src/i18n/en.json | 5 +- 4 files changed, 223 insertions(+), 179 deletions(-) diff --git a/src/components/settings_modal/tabs/filtering_tab.js b/src/components/settings_modal/tabs/filtering_tab.js index 3345cb0c9..5d621bc67 100644 --- a/src/components/settings_modal/tabs/filtering_tab.js +++ b/src/components/settings_modal/tabs/filtering_tab.js @@ -95,6 +95,12 @@ const FilteringTab = { ), muteFiltersDraft () { return Object.entries(this.muteFiltersDraftObject) + }, + muteFiltersExpired () { + const now = Date.now() + return Object + .entries(this.muteFiltersDraftObject) + .filter(([, { expires }]) => expires != null && expires <= now) } }, methods: { @@ -164,6 +170,14 @@ const FilteringTab = { this.unsetPreference({ path: 'simple.muteFilters.' + id , value: null }) this.pushServerSideStorage() }, + purgeExpiredFilters () { + this.muteFiltersExpired.forEach(([id]) => { + console.log(id) + delete this.muteFiltersDraftObject[id] + this.unsetPreference({ path: 'simple.muteFilters.' + id , value: null }) + }) + this.pushServerSideStorage() + }, updateFilter(id, field, value) { const filter = { ...this.muteFiltersDraftObject[id] } if (field === 'expires-never') { diff --git a/src/components/settings_modal/tabs/filtering_tab.scss b/src/components/settings_modal/tabs/filtering_tab.scss index 3f3fa3b58..29ec8e280 100644 --- a/src/components/settings_modal/tabs/filtering_tab.scss +++ b/src/components/settings_modal/tabs/filtering_tab.scss @@ -63,8 +63,18 @@ justify-content: end; } - .total { - text-align: center; + .muteFiltersActions, + .muteFiltersActionsBottom { + display: grid; + align-items: baseline; + grid-auto-flow: column; + grid-template-columns: 1fr; + grid-gap: 0.5em; + margin: 0.5em 0; + + .total { + flex: 1; + } } } diff --git a/src/components/settings_modal/tabs/filtering_tab.vue b/src/components/settings_modal/tabs/filtering_tab.vue index 968a7a0e7..703a0c65e 100644 --- a/src/components/settings_modal/tabs/filtering_tab.vue +++ b/src/components/settings_modal/tabs/filtering_tab.vue @@ -119,182 +119,11 @@ {{ $t('settings.mute_sensitive_posts') }} -
-
-
- - {{ ' ' }} - -
-
- - {{ $t('settings.filter.hide') }} - - {{ ' ' }} - - {{ $t('settings.enabled') }} - -
-
- - -
-
- - {{ ' ' }} - -
-
- - {{ ' ' }} -
- - {{ ' ' }} - - {{ $t('settings.filter.never_expires') }} - - - {{ $t('settings.filter.expired') }} - -
-
-
- {{ $t('settings.filter.regexp_error') }} -
-
- - - - -
-
-
+
  • +

    {{ $t('settings.filter.custom_filters') }}

    +

    - {{ $t('settings.filter.count', { count: muteFiltersDraft.length }) }} + {{ $t('settings.filter.total_count', { count: muteFiltersDraft.length }) }} +

    +
    +
    +
    + + {{ ' ' }} + + + {{ $t('settings.filter.expired') }} + +
    +
    + + {{ $t('settings.filter.hide') }} + + {{ ' ' }} + + {{ $t('settings.enabled') }} + +
    +
    + + +
    +
    + + {{ ' ' }} + +
    +
    + + {{ ' ' }} +
    + + {{ ' ' }} + + {{ $t('settings.filter.never_expires') }} + +
    +
    +
    + {{ $t('settings.filter.regexp_error') }} +
    +
    + + + + +
    +
    -
  • +

    + + {{ $t('settings.filter.expired_count', { count: muteFiltersExpired.length }) }} + + +

    +
    diff --git a/src/i18n/en.json b/src/i18n/en.json index f5f451467..01de88223 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -432,7 +432,10 @@ "export": "Export", "regexp_error": "Invalid Regular Expression", "never_expires": "Never", - "count": "{count} filter|{count} filters", + "total_count": "Total {count} custom filter|Total {count} custom filters", + "expired_count": "{count} expired filter|{count} expired filters", + "custom_filters": "Custom filters", + "purge_expired": "Remove expired filters", "import_failure": "The selected file is not a supported Pleroma filter.", "help": { "word": "Simple and RegExp filters test against post's content and subject.",