You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
2.3 KiB
JavaScript
59 lines
2.3 KiB
JavaScript
document.addEventListener('DOMContentLoaded', function() {
|
|
const table = document.getElementById('objectTable');
|
|
if (!table) return;
|
|
|
|
const selectionMode = table.dataset.selectionMode || 'single';
|
|
const toggleSelectAllBtn = document.getElementById('toggleSelectAllBtn');
|
|
|
|
if (table.dataset.selectionMode === 'multiple') {
|
|
toggleSelectAllBtn.style.display = 'inline-block';
|
|
}
|
|
|
|
table.addEventListener('click', function(e) {
|
|
const row = e.target.closest('.selectable-row');
|
|
if (!row) return;
|
|
const checkbox = row.querySelector('input[type="checkbox"]');
|
|
if (!checkbox) return;
|
|
|
|
if (selectionMode === 'single') {
|
|
table.querySelectorAll('.selected-row').forEach(selectedRow => {
|
|
if (selectedRow !== row) {
|
|
selectedRow.classList.remove('selected-row');
|
|
selectedRow.querySelector('input[type="checkbox"]').checked = false;
|
|
}
|
|
});
|
|
}
|
|
row.classList.toggle('selected-row');
|
|
checkbox.checked = !checkbox.checked;
|
|
const selectedRows = table.querySelectorAll('.selected-row');
|
|
document.querySelectorAll('[data-requires-selection]').forEach(button => {
|
|
button.disabled = selectedRows.length === 0;
|
|
});
|
|
const objectId = row.dataset.id;
|
|
const editBtn = document.getElementById('editBtn');
|
|
const deleteBtn = document.getElementById('deleteBtn');
|
|
if (editBtn) {
|
|
editBtn.removeAttribute('disabled');
|
|
editBtn.href = editBtn.dataset.url?.replace('0', objectId);
|
|
}
|
|
if (deleteBtn) {
|
|
deleteBtn.removeAttribute('disabled');
|
|
}
|
|
});
|
|
|
|
let allSelected = false;
|
|
toggleSelectAllBtn.addEventListener('click', function() {
|
|
const rows = table.querySelectorAll('.selectable-row');
|
|
allSelected = !allSelected;
|
|
rows.forEach(row => {
|
|
const checkbox = row.querySelector('input[type="checkbox"]');
|
|
checkbox.checked = allSelected;
|
|
row.classList.toggle('selected-row', allSelected);
|
|
});
|
|
document.querySelectorAll('[data-requires-selection]').forEach(button => {
|
|
button.disabled = !allSelected;
|
|
});
|
|
this.textContent = allSelected ? 'Unselect All' : 'Select All';
|
|
});
|
|
|
|
}); |