added option to make filter case-sensitive

This commit is contained in:
Henry Jameson 2026-05-06 09:06:57 +03:00
commit 085fa28e3e
5 changed files with 56 additions and 13 deletions

View file

@ -58,6 +58,7 @@ const FilteringTab = {
hide = false, hide = false,
name = '', name = '',
value = '', value = '',
caseSensitive = false,
} = data } = data
this.createFilter({ this.createFilter({
@ -66,6 +67,7 @@ const FilteringTab = {
hide, hide,
name, name,
value, value,
caseSensitive,
}) })
}, },
onImportFailure(result) { onImportFailure(result) {

View file

@ -51,7 +51,16 @@
text-align: right; text-align: right;
} }
> label.checkbox {
display: grid;
grid-template-columns: subgrid;
grid-template-rows: subgrid;
grid-column: 1 / span 2;
text-align: right;
}
.filter-field-value { .filter-field-value {
display: flex;
grid-column: 2 / span 2; grid-column: 2 / span 2;
} }
} }

View file

@ -254,6 +254,20 @@
:value="filter[1].value" :value="filter[1].value"
@input="updateFilter(filter[0], 'value', $event.target.value)" @input="updateFilter(filter[0], 'value', $event.target.value)"
> >
{{ ' ' }}
</div>
<div class="filter-value filter-field">
<Checkbox
:id="'filterCaseSensitive' + filter[0]"
:model-value="filter[1].caseSensitive"
:name="'filterCaseSensitive' + filter[0]"
class="input-inset input-boolean case-sensitive"
@update:model-value="updateFilter(filter[0], 'caseSensitive', $event)"
>
<template #before>
{{ $t('settings.filter.case_sensitive') }}
</template>
</Checkbox>
</div> </div>
<div class="filter-expires filter-field"> <div class="filter-expires filter-field">
<label <label

View file

@ -440,6 +440,7 @@
"plain": "Simple", "plain": "Simple",
"user": "User (Simple)", "user": "User (Simple)",
"user_regexp": "User (RegExp)", "user_regexp": "User (RegExp)",
"case_sensitive": "Case-sensitive",
"hide": "Hide completely", "hide": "Hide completely",
"name": "Name", "name": "Name",
"value": "Value", "value": "Value",

View file

@ -10,24 +10,32 @@ export const muteFilterHits = (muteFilters, status) => {
return muteFilters return muteFilters
.toSorted((a, b) => b.order - a.order) .toSorted((a, b) => b.order - a.order)
.map((filter) => { .map((filter) => {
const { hide, expires, name, value, type, enabled } = filter const { hide, expires, name, value, type, enabled, caseSensitive = false } = filter
if (!enabled) return false if (!enabled) return false
if (value === '') return false if (value === '') return false
if (expires !== null && expires < Date.now()) return false if (expires !== null && expires < Date.now()) return false
switch (type) { switch (type) {
case 'word': { case 'word': {
const lowercaseValue = value.toLowerCase() let match = false
if ( if (caseSensitive) {
statusText.toLowerCase().includes(lowercaseValue) || match =
statusSummary.toLowerCase().includes(lowercaseValue) statusText.includes(value) ||
) { statusSummary.includes(value)
} else {
const lowercaseValue = value.toLowerCase()
match =
statusText.toLowerCase().includes(lowercaseValue) ||
statusSummary.toLowerCase().includes(lowercaseValue)
}
if (match) {
return { hide, name } return { hide, name }
} }
break break
} }
case 'regexp': { case 'regexp': {
try { try {
const re = new RegExp(value, 'i') const re = new RegExp(value, caseSensitive ? '' : 'i')
if (re.test(statusText) || re.test(statusSummary)) { if (re.test(statusText) || re.test(statusSummary)) {
return { hide, name } return { hide, name }
} }
@ -37,18 +45,27 @@ export const muteFilterHits = (muteFilters, status) => {
} }
} }
case 'user': { case 'user': {
if ( let match = false
poster.includes(value) || if (caseSensitive) {
replyToUser.includes(value) || match =
mentions.some((mention) => mention.includes(value)) poster.includes(value) ||
) { replyToUser.includes(value) ||
mentions.some((mention) => mention.includes(value))
} else {
const lowercaseValue = value.toLowerCase()
match =
poster.toLowerCase().includes(lowercaseValue) ||
replyToUser.toLowerCase().includes(lowercaseValue) ||
mentions.some((mention) => mention.toLowerCase().includes(lowercaseValue))
}
if (match) {
return { hide, name } return { hide, name }
} }
break break
} }
case 'user_regexp': { case 'user_regexp': {
try { try {
const re = new RegExp(value, 'i') const re = new RegExp(value, caseSensitive ? '' : 'i')
if ( if (
re.test(poster) || re.test(poster) ||
re.test(replyToUser) || re.test(replyToUser) ||