better layout & button to remove all expired filters

This commit is contained in:
Henry Jameson 2025-04-10 18:20:37 +03:00
commit 8b298c800f
4 changed files with 223 additions and 179 deletions

View file

@ -95,6 +95,12 @@ const FilteringTab = {
), ),
muteFiltersDraft () { muteFiltersDraft () {
return Object.entries(this.muteFiltersDraftObject) return Object.entries(this.muteFiltersDraftObject)
},
muteFiltersExpired () {
const now = Date.now()
return Object
.entries(this.muteFiltersDraftObject)
.filter(([, { expires }]) => expires != null && expires <= now)
} }
}, },
methods: { methods: {
@ -164,6 +170,14 @@ const FilteringTab = {
this.unsetPreference({ path: 'simple.muteFilters.' + id , value: null }) this.unsetPreference({ path: 'simple.muteFilters.' + id , value: null })
this.pushServerSideStorage() 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) { updateFilter(id, field, value) {
const filter = { ...this.muteFiltersDraftObject[id] } const filter = { ...this.muteFiltersDraftObject[id] }
if (field === 'expires-never') { if (field === 'expires-never') {

View file

@ -63,8 +63,18 @@
justify-content: end; justify-content: end;
} }
.muteFiltersActions,
.muteFiltersActionsBottom {
display: grid;
align-items: baseline;
grid-auto-flow: column;
grid-template-columns: 1fr;
grid-gap: 0.5em;
margin: 0.5em 0;
.total { .total {
text-align: center; flex: 1;
}
} }
} }

View file

@ -119,6 +119,27 @@
{{ $t('settings.mute_sensitive_posts') }} {{ $t('settings.mute_sensitive_posts') }}
</BooleanSetting> </BooleanSetting>
</li> </li>
<li>
<h3>{{ $t('settings.filter.custom_filters') }}</h3>
<p class="muteFiltersActions">
<span class="total">
{{ $t('settings.filter.total_count', { count: muteFiltersDraft.length }) }}
</span>
<button
class="add-button button-default"
type="button"
@click="createFilter()"
>
{{ $t('settings.filter.new') }}
</button>
<button
class="add-button button-default"
type="button"
@click="importFilter()"
>
{{ $t('settings.filter.import') }}
</button>
</p>
<div class="muteFilterContainer"> <div class="muteFilterContainer">
<div <div
v-for="filter in muteFiltersDraft" v-for="filter in muteFiltersDraft"
@ -139,6 +160,12 @@
:value="filter[1].name" :value="filter[1].name"
@input="updateFilter(filter[0], 'name', $event.target.value)" @input="updateFilter(filter[0], 'name', $event.target.value)"
> >
<span
v-if="filter[1].expires !== null && Date.now() > filter[1].expires"
class="alert neutral"
>
{{ $t('settings.filter.expired') }}
</span>
</div> </div>
<div class="filter-enabled"> <div class="filter-enabled">
<Checkbox <Checkbox
@ -245,12 +272,6 @@
> >
{{ $t('settings.filter.never_expires') }} {{ $t('settings.filter.never_expires') }}
</Checkbox> </Checkbox>
<span
v-if="filter[1].expires !== null && Date.now() > filter[1].expires"
class="alert neutral"
>
{{ $t('settings.filter.expired') }}
</span>
</div> </div>
</div> </div>
<div <div
@ -292,26 +313,22 @@
</button> </button>
</div> </div>
</div> </div>
<div class="mute-filter new-filter"> </div>
<p class="muteFiltersActionsBottom">
<span class="total"> <span class="total">
{{ $t('settings.filter.count', { count: muteFiltersDraft.length }) }} {{ $t('settings.filter.expired_count', { count: muteFiltersExpired.length }) }}
</span> </span>
<button <button
class="add-button button-default" class="add-button button-default"
type="button" type="button"
@click="createFilter()" :class="{ disabled: muteFiltersExpired.length === 0 }"
:disabled="muteFiltersExpired.length === 0"
@click="purgeExpiredFilters()"
> >
{{ $t('settings.filter.new') }} {{ $t('settings.filter.purge_expired') }}
</button> </button>
<button </p>
class="add-button button-default" </li>
type="button"
@click="importFilter()"
>
{{ $t('settings.filter.import') }}
</button>
</div>
</div>
</ul> </ul>
</div> </div>
</div> </div>

View file

@ -432,7 +432,10 @@
"export": "Export", "export": "Export",
"regexp_error": "Invalid Regular Expression", "regexp_error": "Invalid Regular Expression",
"never_expires": "Never", "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.", "import_failure": "The selected file is not a supported Pleroma filter.",
"help": { "help": {
"word": "Simple and RegExp filters test against post's content and subject.", "word": "Simple and RegExp filters test against post's content and subject.",