multi value filtering added and font color fix for duplicates

This commit is contained in:
2026-08-11 23:28:35 +02:00
parent 5594431749
commit e0175ab48a
340 changed files with 739 additions and 160 deletions
Regular → Executable
+17 -19
View File
@@ -714,9 +714,12 @@
const active = filterDefinitions
.map(definition => ({
definition,
term: definition.input?.value.trim() || ''
terms: String(definition.input?.value || '')
.split(/\r?\n/)
.map(term => term.trim())
.filter(Boolean)
}))
.filter(item => item.term);
.filter(item => item.terms.length);
if (usesServerFilters) {
const serverTotal = Number.parseInt(table.dataset.serverFilterTotal || '', 10);
@@ -737,13 +740,16 @@
let visibleRows = 0;
[...tbody.rows].forEach(row => {
const hidden = active.some(({ definition, term }) => {
const hidden = active.some(({ definition, terms }) => {
const cell = cellForDefinition(row, definition);
const value = textValue(cell);
if (definition.numericFilter) {
return !numericFilterMatches(value, term);
}
return !searchTextMatches(value, term);
const matchesAnyTerm = terms.some(term => {
if (definition.numericFilter) {
return numericFilterMatches(value, term);
}
return searchTextMatches(value, term);
});
return !matchesAnyTerm;
});
row.hidden = hidden;
@@ -824,11 +830,13 @@
}
if (!header.dataset.noFilter && (!usesServerFilters || serverName)) {
const input = document.createElement('input');
input.type = 'search';
const input = document.createElement('textarea');
input.rows = 1;
input.placeholder = header.dataset.filterPlaceholder || 'Filtern …';
input.setAttribute('aria-label', `Filter ${textValue(header)}`);
input.title = document.body.dataset.multiValueFilterHint || '';
input.autocomplete = 'off';
input.spellcheck = false;
if (usesServerFilters) {
input.name = `job_filter_${serverName}`;
input.value = header.dataset.serverFilterValue || '';
@@ -836,18 +844,8 @@
applyFilters();
submitServerFilters(false);
});
input.addEventListener('search', () => {
applyFilters();
submitServerFilters(false);
});
input.addEventListener('keydown', event => {
if (event.key !== 'Enter') return;
event.preventDefault();
submitServerFilters(true);
});
} else {
input.addEventListener('input', applyFilters);
input.addEventListener('search', applyFilters);
}
filterCell.appendChild(input);