feat: show the active queue filter count

Add a fixed filter summary that counts sidebar, filename, host, and status constraints, highlighting nonzero counts without changing the toolbar geometry.
This commit is contained in:
Sucukdeluxe
2026-08-21 01:06:16 +02:00
parent a1ff19cc30
commit fb544efe2f
7 changed files with 62 additions and 4 deletions
+1
View File
@@ -30,6 +30,7 @@ test('translations cover static labels and interpolated status text in both lang
assert.equal(translateText('Update v2.1.0 available', 'de'), 'Update v2.1.0 verfügbar');
assert.equal(translateText('Alle Status', 'en'), 'Any status');
assert.equal(translateText('Any status', 'de'), 'Alle Status');
assert.equal(translateText('Filter', 'en'), 'Filters');
});
test('sidebar hierarchy uses distinct English and German kicker labels', () => {
+1
View File
@@ -178,6 +178,7 @@ test('header occupies its final geometry before asynchronous initialization', ()
assert.match(css, /\.update-release-notes\s*\{[^}]*height:\s*min\(264px,\s*48vh\);/su);
assert.match(html, /class="update-progress-footer"[\s\S]*id="updateProgressDetails"[\s\S]*id="updateProgressSize"[\s\S]*id="updateProgressSpeed"[\s\S]*id="updateProgressEta"[\s\S]*id="updateProgressText"/u);
assert.match(html, /id="queueFilterResetBtn"[^>]*disabled[^>]*>Filter zurücksetzen</u);
assert.match(html, /class="queue-filter-summary"[\s\S]*id="queueActiveFilterCount"[^>]*>0</u);
assert.doesNotMatch(html, /<\/div>\s*<div class="queue-filter-bar"/u);
assert.match(css, /\.queue-filter-bar\s*\{[^}]*display:\s*flex;[^}]*margin-left:\s*auto;[^}]*border:\s*1px solid var\(--border\);[^}]*border-radius:\s*7px;/su);
assert.match(css, /#updateProgressDetails\s*\{[^}]*display:\s*grid;[^}]*grid-template-columns:\s*19ch 2ch 11ch 2ch 10ch;[^}]*column-gap:\s*0;[^}]*font-variant-numeric:\s*tabular-nums;/su);
+5 -2
View File
@@ -737,11 +737,14 @@ setTimeout(async () => {
document.getElementById('queueStatusFilter').value = 'active';
applyQueueDetailFilters();
const button = document.getElementById('queueFilterResetBtn');
const before = { hidden: button.hidden, disabled: button.disabled };
const count = document.getElementById('queueActiveFilterCount');
const before = { hidden: button.hidden, disabled: button.disabled, count: count.textContent, active: count.classList.contains('is-active') };
button.click();
const after = {
hidden: button.hidden,
disabled: button.disabled,
count: count.textContent,
active: count.classList.contains('is-active'),
sidebar: uploadSidebarFilter,
search: document.getElementById('queueSearchInput').value,
hoster: document.getElementById('queueHosterFilter').value,
@@ -754,7 +757,7 @@ setTimeout(async () => {
renderQueueTable();
return { before, after };
})()\`);
check('Queue filter reset clears every filter without shifting its stable action', queueFilterReset.before.hidden === false && queueFilterReset.before.disabled === false && queueFilterReset.after.hidden === false && queueFilterReset.after.disabled === true && queueFilterReset.after.sidebar === 'all' && queueFilterReset.after.search === '' && queueFilterReset.after.hoster === '' && queueFilterReset.after.status === '' && queueFilterReset.after.allPressed === 'true' && queueFilterReset.after.visible === 'filter-a|filter-b');
check('Queue filter reset clears every filter and updates the stable active count', queueFilterReset.before.hidden === false && queueFilterReset.before.disabled === false && queueFilterReset.before.count === '4' && queueFilterReset.before.active === true && queueFilterReset.after.hidden === false && queueFilterReset.after.disabled === true && queueFilterReset.after.count === '0' && queueFilterReset.after.active === false && queueFilterReset.after.sidebar === 'all' && queueFilterReset.after.search === '' && queueFilterReset.after.hoster === '' && queueFilterReset.after.status === '' && queueFilterReset.after.allPressed === 'true' && queueFilterReset.after.visible === 'filter-a|filter-b');
const queueSelectionAnchor = await wc.executeJavaScript(\`(() => {
queueJobs = ['a', 'b', 'c', 'd'].map(id => ({ id: 'anchor-' + id, file: 'C:/ui/anchor-' + id + '.bin', fileName: 'anchor-' + id + '.bin', hoster: 'byse.sx', status: 'queued', bytesUploaded: 0, bytesTotal: 100, progress: 0 }));