fix: Restore edit mode button on page load and move select-all checkbox

This commit is contained in:
mARTin-B78 2026-06-22 16:46:44 +02:00
parent af49bb4d6f
commit 3cc39b8ace
3 changed files with 19 additions and 9 deletions

View File

@ -26,7 +26,7 @@
<!-- ── Core styles (local — no CDN dependency for first paint) ────────── -->
<link rel="stylesheet" href="/static/vendor/mdi/materialdesignicons.min.css">
<link rel="stylesheet" href="/static/style.css?v=1.8.0-5">
<link rel="stylesheet" href="/static/style.css?v=1.8.0-6">
<!-- ── Flag icons — non-blocking (loaded async, icons appear after JS) ── -->

View File

@ -1489,6 +1489,11 @@ function renderVoiceList() {
if (_tvBtn) {
_tvBtn.classList.toggle('active', !!window._voiceTableView);
document.querySelector('.voices-workbench')?.classList.toggle('table-view', !!window._voiceTableView);
const editBtn = document.getElementById('voice-table-edit-btn');
if (editBtn) {
editBtn.style.display = window._voiceTableView ? 'inline-flex' : 'none';
editBtn.classList.toggle('active', !!window._voiceTableEditMode);
}
}
// Apply sidebar category filter
@ -3062,6 +3067,13 @@ function _bulkUpdate() {
document.querySelectorAll('.vl-bulk-cb').forEach(cb => {
cb.checked = _bulkSelected.has(cb.dataset.id);
});
const headerCb = document.getElementById('vl-select-all-header');
if (headerCb) {
const rows = [...document.querySelectorAll('#voice-list .vl-row')].filter(r => r.dataset.id);
const allSelected = rows.length > 0 && rows.every(r => _bulkSelected.has(r.dataset.id));
headerCb.checked = allSelected;
}
}
function _bulkToggle(id, checked) {
@ -3103,16 +3115,15 @@ $('vl-bulk-select-all')?.addEventListener('click', () => {
_bulkUpdate();
});
// Always-visible Select-all toggle in the sort bar (the bulk bar only appears once
// Always-visible Select-all toggle in the table header (the bulk bar only appears once
// something is selected, so this is the entry point). Selects every visible row, or
// clears the selection if they're all already selected.
$('vl-select-all-visible')?.addEventListener('click', () => {
$('vl-select-all-header')?.addEventListener('change', (e) => {
const rows = [...document.querySelectorAll('#voice-list .vl-row')].filter(r => r.dataset.id);
const allSelected = rows.length > 0 && rows.every(r => _bulkSelected.has(r.dataset.id));
if (allSelected) {
rows.forEach(r => _bulkSelected.delete(r.dataset.id));
} else {
if (e.target.checked) {
rows.forEach(r => _bulkSelected.add(r.dataset.id));
} else {
rows.forEach(r => _bulkSelected.delete(r.dataset.id));
}
_bulkUpdate();
});

View File

@ -75,7 +75,6 @@
<button id="voice-group-tag-btn" class="vl-sort-dir-btn" title="Group into virtual folders by tag"><span class="mdi mdi-folder-outline"></span></button>
<button id="voice-table-view-btn" class="vl-sort-dir-btn" title="Toggle full-width table view"><span class="mdi mdi-table"></span></button>
<button id="voice-table-edit-btn" class="vl-sort-dir-btn" title="Toggle table edit mode" style="display:none"><span class="mdi mdi-pencil-box-outline"></span></button>
<button id="vl-select-all-visible" class="vl-sort-dir-btn" title="Select all visible voices (toggle)"><span class="mdi mdi-checkbox-multiple-marked-outline"></span></button>
</div>
<div class="benchmark-confirm" id="benchmark-confirm" hidden role="group" aria-live="polite">
@ -102,7 +101,7 @@
</div>
<div class="vl-table-header" id="vl-table-header">
<div></div>
<div style="display:flex; justify-content:center; align-items:center;"><input type="checkbox" id="vl-select-all-header" title="Select all visible voices"></div>
<div>Img</div>
<div>Play</div>
<div class="vl-th-sortable" data-sort="id">Name <span class="mdi mdi-sort"></span></div>