/* Massa-acties in lijsten (templates/_bulk.html): rijen aanvinken, shift-klik voor een reeks, dan in de balk onderin een actie kiezen. Een klik op het vinkje opent de rij niet. */ (() => { const form = document.getElementById('bulk'); if (!form) return; const boxes = Array.from(document.querySelectorAll('input[name="ids"][form="bulk"]')); const all = document.querySelector('[data-bulk-all]'); const count = form.querySelector('[data-bulk-count]'); const action = form.elements.action; let last = null; const update = () => { const n = boxes.filter(b => b.checked).length; count.textContent = n; form.hidden = !n; document.body.classList.toggle('bulk-open', n > 0); if (all) { all.checked = n > 0 && n === boxes.length; all.indeterminate = n > 0 && n < boxes.length; } boxes.forEach(b => b.closest('tr')?.classList.toggle('selected', b.checked)); }; const showFields = () => form.querySelectorAll('[data-show]').forEach(el => { const on = el.dataset.show === action.value; el.hidden = !on; el.disabled = !on; }); boxes.forEach((box, i) => box.closest('td').addEventListener('click', e => { e.stopPropagation(); if (e.target !== box) box.checked = !box.checked; if (e.shiftKey && last !== null) { boxes.slice(Math.min(last, i), Math.max(last, i) + 1).forEach(b => { b.checked = box.checked; }); } last = i; update(); })); all?.closest('th').addEventListener('click', e => { if (e.target !== all) all.checked = !all.checked; boxes.forEach(b => { b.checked = all.checked; }); update(); }); form.querySelector('[data-bulk-clear]').addEventListener('click', () => { boxes.forEach(b => { b.checked = false; }); update(); }); action.addEventListener('change', showFields); form.addEventListener('submit', e => { const ask = action.selectedOptions[0]?.dataset.confirm; if (ask && !confirm(ask.replace('{n}', count.textContent))) return e.preventDefault(); // een export is een download: de pagina blijft staan, dus de keuze terugzetten if (action.value === 'export') setTimeout(() => { action.value = ''; showFields(); }, 0); }); addEventListener('pageshow', update); showFields(); update(); })();