This commit is contained in:
2025-07-15 20:57:15 +03:00
parent f6c78a20a3
commit 0ffd79cee9
51 changed files with 1227 additions and 653 deletions
+64 -27
View File
@@ -1,36 +1,73 @@
document.addEventListener('DOMContentLoaded', function() {
const editBtn = document.getElementById('editBtn');
const deleteBtn = document.getElementById('deleteBtn');
const objectIdInput = document.getElementById('objectIdInput');
const rows = document.querySelectorAll('.selectable-row');
const table = document.getElementById('objectTable');
if (!table) return;
if (editBtn) {
editBtn.setAttribute('disabled', '');
}
if (deleteBtn) {
deleteBtn.setAttribute('disabled', '');
const selectionMode = table.dataset.selectionMode || 'single';
const toggleSelectAllBtn = document.getElementById('toggleSelectAllBtn');
if (table.dataset.selectionMode === 'multiple') {
toggleSelectAllBtn.style.display = 'inline-block';
}
rows.forEach(row => {
row.addEventListener('click', function() {
// Remove previous selection
document.querySelector('.selected-row')?.classList.remove('selected-row');
table.addEventListener('click', function(e) {
const row = e.target.closest('.selectable-row');
if (!row) return;
// Select current row
this.classList.add('selected-row');
const checkbox = row.querySelector('input[type="checkbox"]');
if (!checkbox) return;
const objectId = this.dataset.id;
if (editBtn) {
editBtn.removeAttribute('disabled'); // Remove disabled attribute completely
editBtn.href = editBtn.dataset.url.replace('0', objectId);
}
if (deleteBtn) {
deleteBtn.removeAttribute('disabled');
}
if (selectionMode === 'single') {
// Deselect all other rows
table.querySelectorAll('.selected-row').forEach(selectedRow => {
if (selectedRow !== row) {
selectedRow.classList.remove('selected-row');
selectedRow.querySelector('input[type="checkbox"]').checked = false;
}
});
}
// Check the hidden radio button
const radio = this.querySelector('input[type="radio"]');
radio.checked = true;
// Toggle current row
row.classList.toggle('selected-row');
checkbox.checked = !checkbox.checked;
// Update buttons state
const selectedRows = table.querySelectorAll('.selected-row');
document.querySelectorAll('[data-requires-selection]').forEach(button => {
button.disabled = selectedRows.length === 0;
});
// Handle edit/delete buttons from original crud-list.js
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);
});
// Update other buttons state
document.querySelectorAll('[data-requires-selection]').forEach(button => {
button.disabled = !allSelected;
});
// Update button text
this.textContent = allSelected ? 'Unselect All' : 'Select All';
});
});