From 8b298c800f3b95bc3176d2011b2bbe9de6cb92c6 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Thu, 10 Apr 2025 18:20:37 +0300 Subject: [PATCH 1/6] 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.", From c31e9466b75f5bf5960c113deb5420afcae0f076 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Thu, 10 Apr 2025 18:22:23 +0300 Subject: [PATCH 2/6] better layout --- src/components/settings_modal/tabs/filtering_tab.vue | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/components/settings_modal/tabs/filtering_tab.vue b/src/components/settings_modal/tabs/filtering_tab.vue index 703a0c65e..8772aaaa3 100644 --- a/src/components/settings_modal/tabs/filtering_tab.vue +++ b/src/components/settings_modal/tabs/filtering_tab.vue @@ -4,8 +4,8 @@ class="filtering-tab" >
    +

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

      -

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

    +
    +
    +

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

      -

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

    • {{ $t('settings.hide_muted_statuses') }} From f112724a5ab249463bbf3a8259d6c18bdb927691 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Thu, 10 Apr 2025 18:26:09 +0300 Subject: [PATCH 3/6] use NumberFormat --- src/components/settings_modal/tabs/filtering_tab.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/components/settings_modal/tabs/filtering_tab.js b/src/components/settings_modal/tabs/filtering_tab.js index 5d621bc67..c370bd1b4 100644 --- a/src/components/settings_modal/tabs/filtering_tab.js +++ b/src/components/settings_modal/tabs/filtering_tab.js @@ -107,16 +107,15 @@ const FilteringTab = { ...mapActions(useServerSideStorageStore, ['setPreference', 'unsetPreference', 'pushServerSideStorage']), getDatetimeLocal (timestamp) { const date = new Date(timestamp) + let fmt = new Intl.NumberFormat("en-US", {minimumIntegerDigits: 2}) const datetime = [ date.getFullYear(), '-', - date.getMonth() < 9 ? ('0' + (date.getMonth() + 1)) : (date.getMonth() + 1), - '-', - date.getDate() < 10 ? ('0' + date.getDate()) : date.getDate(), + fmt.format(date.getMonth()), 'T', - date.getHours() < 10 ? ('0' + date.getHours()) : date.getHours(), + fmt.format(date.getHours()), ':', - date.getMinutes() < 10 ? ('0' + date.getMinutes()) : date.getMinutes(), + fmt.format(date.getMinutes()) ].join('') return datetime }, From d70254a8bfe5c1d7a3d94a34c4ba5c9e222d8d83 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Thu, 10 Apr 2025 18:28:17 +0300 Subject: [PATCH 4/6] lint --fix --- src/components/settings_modal/tabs/filtering_tab.vue | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/components/settings_modal/tabs/filtering_tab.vue b/src/components/settings_modal/tabs/filtering_tab.vue index 8772aaaa3..728e42839 100644 --- a/src/components/settings_modal/tabs/filtering_tab.vue +++ b/src/components/settings_modal/tabs/filtering_tab.vue @@ -17,12 +17,18 @@
    • - + {{ $t('settings.hide_post_stats') }}
    • - + {{ $t('settings.hide_user_stats') }}
    • From f4c56be82603b78a5a89f62f85f60e334aba87f8 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Thu, 10 Apr 2025 18:31:58 +0300 Subject: [PATCH 5/6] manual lint + small layout fix --- src/components/settings_modal/tabs/filtering_tab.scss | 5 ++++- src/components/settings_modal/tabs/filtering_tab.vue | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/components/settings_modal/tabs/filtering_tab.scss b/src/components/settings_modal/tabs/filtering_tab.scss index 29ec8e280..5b51c5e4d 100644 --- a/src/components/settings_modal/tabs/filtering_tab.scss +++ b/src/components/settings_modal/tabs/filtering_tab.scss @@ -12,11 +12,14 @@ margin: 0.5em; padding: 0.5em; display: grid; - grid-template-columns: fit-content 1fr fit-content; align-items: baseline; grid-gap: 0.5em; } + .never { + margin-left: 0.5em; + } + .filter-name { grid-column: 1 / span 2; grid-row: 1; diff --git a/src/components/settings_modal/tabs/filtering_tab.vue b/src/components/settings_modal/tabs/filtering_tab.vue index 728e42839..6db82d3c4 100644 --- a/src/components/settings_modal/tabs/filtering_tab.vue +++ b/src/components/settings_modal/tabs/filtering_tab.vue @@ -275,7 +275,7 @@ :id="'filterExpiresNever' + filter[0]" :model-value="filter[1].expires === null" :name="'filterExpiresNever' + filter[0]" - class="input-inset input-boolean" + class="input-inset input-boolean never" @update:model-value="updateFilter(filter[0], 'expires-never', $event)" > {{ $t('settings.filter.never_expires') }} From 22cdf2ded560ba3159ba31bde9cd44c14bdbe5b9 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Thu, 10 Apr 2025 19:58:45 +0300 Subject: [PATCH 6/6] oops --- src/components/settings_modal/tabs/filtering_tab.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/settings_modal/tabs/filtering_tab.js b/src/components/settings_modal/tabs/filtering_tab.js index c370bd1b4..3f63b4799 100644 --- a/src/components/settings_modal/tabs/filtering_tab.js +++ b/src/components/settings_modal/tabs/filtering_tab.js @@ -111,7 +111,7 @@ const FilteringTab = { const datetime = [ date.getFullYear(), '-', - fmt.format(date.getMonth()), + fmt.format(date.getMonth() + 1), 'T', fmt.format(date.getHours()), ':',