(()=>{ function init(root=document){ root.querySelectorAll('[data-software-selection]').forEach(container=>{ if(container.dataset.selectionReady==='1') return; container.dataset.selectionReady='1'; const table=container.querySelector('table'); const form=container.querySelector('form[data-software-delete-form]'); const master=container.querySelector('[data-software-select-all]'); const button=container.querySelector('[data-software-delete-button]'); const countNode=container.querySelector('[data-software-selection-count]'); if(!table||!form) return; const boxes=()=>[...table.querySelectorAll('tbody input[data-software-entry-checkbox]')]; const visibleBoxes=()=>boxes().filter(box=>!box.closest('tr')?.hidden); const update=()=>{ const selected=boxes().filter(box=>box.checked); if(button) button.disabled=selected.length===0; if(countNode) countNode.textContent=String(selected.length); if(master){ const visible=visibleBoxes(); const selectedVisible=visible.filter(box=>box.checked).length; master.checked=visible.length>0&&selectedVisible===visible.length; master.indeterminate=selectedVisible>0&&selectedVisible{ visibleBoxes().forEach(box=>box.checked=master.checked); update(); }); table.addEventListener('change',event=>{ if(event.target.matches('[data-software-entry-checkbox]')) update(); }); form.addEventListener('submit',event=>{ const selected=boxes().filter(box=>box.checked); if(!selected.length){ event.preventDefault(); return; } form.querySelectorAll('input[data-generated-entry-id]').forEach(node=>node.remove()); selected.forEach(box=>{ const input=document.createElement('input'); input.type='hidden'; input.name='entry_ids'; input.value=box.value; input.dataset.generatedEntryId='1'; form.appendChild(input); }); const template=form.dataset.confirmTemplate||'Delete {count} selected software inventory entries?'; const warning=form.dataset.inventoryOnlyWarning||''; const message=template.replace('{count}',String(selected.length))+(warning?'\n\n'+warning:''); if(!window.confirm(message)) event.preventDefault(); }); window.addEventListener('asset-table-filter-changed',event=>{ if(event.detail?.table===table) update(); }); update(); }); } document.addEventListener('DOMContentLoaded',()=>init()); window.AssetManagerSoftwareSelection={init}; })();