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.
depot_django/static/js/crud-list.js

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';
});
});