function deleteFiles(filePaths) { fetch('/delete_files', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ 'file_paths': filePaths }) }) .then(response => response.json()) .then(data => { if (data.success) { alert('Files deleted successfully'); location.reload(); } else { alert('Error deleting files: ' + JSON.stringify(data.errors)); } }); } function deleteSelectedFiles() { const selectedFiles = Array.from(document.querySelectorAll('input[name="fileCheckbox"]:checked')) .map(checkbox => checkbox.value); if (selectedFiles.length > 0) { deleteFiles(selectedFiles); } else { alert('No files selected'); } } function downloadSelectedFiles() { const selectedFiles = Array.from(document.querySelectorAll('input[name="fileCheckbox"]:checked')) .map(checkbox => checkbox.value); if (selectedFiles.length > 0) { fetch('/download_files', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ 'file_paths': selectedFiles }) }) .then(response => { if (!response.ok) { return response.json().then(err => { throw new Error(err.error); }); } return response.blob(); }) .then(blob => { if (blob.type !== 'application/zip') { throw new Error("Received invalid ZIP file."); } const url = window.URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = 'files.zip'; document.body.appendChild(a); a.click(); a.remove(); }) .catch(error => alert('Error: ' + error.message)); } else { alert('No files selected'); } } function sortTable(columnIndex, tableId) { const table = document.getElementById(tableId); const tbody = table.querySelector('tbody'); const rows = Array.from(tbody.rows); const isAscending = table.getAttribute('data-sort-asc') === 'true'; rows.sort((rowA, rowB) => { const cellA = rowA.cells[columnIndex].innerText.toLowerCase(); const cellB = rowB.cells[columnIndex].innerText.toLowerCase(); if (cellA < cellB) { return isAscending ? -1 : 1; } if (cellA > cellB) { return isAscending ? 1 : -1; } return 0; }); // Toggle the sorting order for the next click table.setAttribute('data-sort-asc', !isAscending); // Append sorted rows back to the tbody rows.forEach(row => tbody.appendChild(row)); } // Function to check or uncheck all checkboxes in a table by checking or unchecking the "CheckAll" checkbox function checkAllCheckboxes(tableId, checkAllCheckboxId) { const table = document.getElementById(tableId); const checkboxes = table.querySelectorAll('input[type="checkbox"][name="fileCheckbox"]'); const checkAllCheckbox = document.getElementById(checkAllCheckboxId); const isChecked = checkAllCheckbox.checked; checkboxes.forEach(checkbox => { checkbox.checked = isChecked; }); }