Merge branch 'sss-objects' into shigusegubu-themes3

This commit is contained in:
Henry Jameson 2025-04-11 11:52:01 +03:00
commit afbf63412d
4 changed files with 243 additions and 189 deletions

View file

@ -95,22 +95,27 @@ 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: {
...mapActions(useServerSideStorageStore, ['setPreference', 'unsetPreference', 'pushServerSideStorage']), ...mapActions(useServerSideStorageStore, ['setPreference', 'unsetPreference', 'pushServerSideStorage']),
getDatetimeLocal (timestamp) { getDatetimeLocal (timestamp) {
const date = new Date(timestamp) const date = new Date(timestamp)
let fmt = new Intl.NumberFormat("en-US", {minimumIntegerDigits: 2})
const datetime = [ const datetime = [
date.getFullYear(), date.getFullYear(),
'-', '-',
date.getMonth() < 9 ? ('0' + (date.getMonth() + 1)) : (date.getMonth() + 1), fmt.format(date.getMonth() + 1),
'-',
date.getDate() < 10 ? ('0' + date.getDate()) : date.getDate(),
'T', '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('') ].join('')
return datetime return datetime
}, },
@ -164,6 +169,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

@ -12,11 +12,14 @@
margin: 0.5em; margin: 0.5em;
padding: 0.5em; padding: 0.5em;
display: grid; display: grid;
grid-template-columns: fit-content 1fr fit-content;
align-items: baseline; align-items: baseline;
grid-gap: 0.5em; grid-gap: 0.5em;
} }
.never {
margin-left: 0.5em;
}
.filter-name { .filter-name {
grid-column: 1 / span 2; grid-column: 1 / span 2;
grid-row: 1; grid-row: 1;
@ -63,8 +66,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

@ -4,8 +4,8 @@
class="filtering-tab" class="filtering-tab"
> >
<div class="setting-item"> <div class="setting-item">
<ul class="setting-list">
<h2>{{ $t('settings.filter.clutter') }}</h2> <h2>{{ $t('settings.filter.clutter') }}</h2>
<ul class="setting-list">
<li> <li>
<ChoiceSetting <ChoiceSetting
v-if="user" v-if="user"
@ -17,12 +17,18 @@
</ChoiceSetting> </ChoiceSetting>
</li> </li>
<li> <li>
<BooleanSetting expert="1" path="hidePostStats"> <BooleanSetting
expert="1"
path="hidePostStats"
>
{{ $t('settings.hide_post_stats') }} {{ $t('settings.hide_post_stats') }}
</BooleanSetting> </BooleanSetting>
</li> </li>
<li> <li>
<BooleanSetting expert="1" path="hideUserStats"> <BooleanSetting
expert="1"
path="hideUserStats"
>
{{ $t('settings.hide_user_stats') }} {{ $t('settings.hide_user_stats') }}
</BooleanSetting> </BooleanSetting>
</li> </li>
@ -70,8 +76,10 @@
</BooleanSetting> </BooleanSetting>
</li> </li>
</ul> </ul>
<ul class="setting-list"> </div>
<div class="setting-item">
<h2>{{ $t('settings.filter.mute_filter') }}</h2> <h2>{{ $t('settings.filter.mute_filter') }}</h2>
<ul class="setting-list">
<li> <li>
<BooleanSetting path="hideFilteredStatuses"> <BooleanSetting path="hideFilteredStatuses">
{{ $t('settings.hide_muted_statuses') }} {{ $t('settings.hide_muted_statuses') }}
@ -119,6 +127,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 +168,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
@ -240,17 +275,11 @@
:id="'filterExpiresNever' + filter[0]" :id="'filterExpiresNever' + filter[0]"
:model-value="filter[1].expires === null" :model-value="filter[1].expires === null"
:name="'filterExpiresNever' + filter[0]" :name="'filterExpiresNever' + filter[0]"
class="input-inset input-boolean" class="input-inset input-boolean never"
@update:model-value="updateFilter(filter[0], 'expires-never', $event)" @update:model-value="updateFilter(filter[0], 'expires-never', $event)"
> >
{{ $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 +321,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.",