diff --git a/src/network/html/FilesPage.html b/src/network/html/FilesPage.html
index 5ed71ed9..a6987d66 100644
--- a/src/network/html/FilesPage.html
+++ b/src/network/html/FilesPage.html
@@ -803,10 +803,11 @@
🗑️ Delete Item
@@ -1420,12 +1421,14 @@ function performMultipleMoves(items, destFolder) {
+
`;
document.body.appendChild(progressOverlay);
const progressFill = document.getElementById('delete-progress-fill');
const progressText = document.getElementById('delete-progress-text');
+ const closeBtn = document.getElementById('move-progress-close');
progressFill.style.backgroundColor = '#3498db';
let currentIndex = 0;
@@ -1476,14 +1479,15 @@ function performMultipleMoves(items, destFolder) {
}, 1000);
} else {
progressFill.style.backgroundColor = '#e74c3c';
- const failedList = failedMoves.map(f => f.name).join(', ');
- progressText.textContent = `${items.length - failedMoves.length}/${items.length} moved. Failed: ${failedList}`;
+ const errorDetails = failedMoves.map(f => `${f.name}: ${f.error}`).join('
');
+ progressText.innerHTML = `${items.length - failedMoves.length}/${items.length} moved successfully.
Failed items:
${errorDetails}`;
- setTimeout(() => {
+ // Show close button for user to dismiss
+ closeBtn.style.display = 'block';
+ closeBtn.onclick = () => {
document.body.removeChild(progressOverlay);
- alert(`Failed to move: ${failedList}\n\nPlease try again or check server logs.`);
hydrate();
- }, 3000);
+ };
}
return;
}
@@ -1576,9 +1580,17 @@ function performMultipleMoves(items, destFolder) {
function closeDeleteModal() {
document.getElementById('deleteModal').classList.remove('open');
+ document.getElementById('deleteModalError').style.display = 'none';
+ document.getElementById('deleteConfirmBtn').disabled = false;
}
function confirmDelete() {
+ const errorDiv = document.getElementById('deleteModalError');
+ const confirmBtn = document.getElementById('deleteConfirmBtn');
+
+ // Hide any previous error
+ errorDiv.style.display = 'none';
+
if (itemsToDelete.length === 1) {
// Single item - simple delete
const item = itemsToDelete[0];
@@ -1586,6 +1598,9 @@ function performMultipleMoves(items, destFolder) {
formData.append('path', item.path);
formData.append('type', item.type);
+ // Disable button during request
+ confirmBtn.disabled = true;
+
const xhr = new XMLHttpRequest();
xhr.open('POST', '/delete', true);
@@ -1594,14 +1609,18 @@ function performMultipleMoves(items, destFolder) {
closeDeleteModal();
hydrate();
} else {
- alert('Failed to delete: ' + xhr.responseText);
- closeDeleteModal();
+ // Show error in modal
+ errorDiv.textContent = xhr.responseText || 'Failed to delete item';
+ errorDiv.style.display = 'block';
+ confirmBtn.disabled = false;
}
};
xhr.onerror = function() {
- alert('Failed to delete - network error');
- closeDeleteModal();
+ // Show error in modal
+ errorDiv.textContent = 'Failed to delete - network error';
+ errorDiv.style.display = 'block';
+ confirmBtn.disabled = false;
};
xhr.send(formData);
@@ -1623,12 +1642,14 @@ function performMultipleMoves(items, destFolder) {
+
`;
document.body.appendChild(progressOverlay);
const progressFill = document.getElementById('delete-progress-fill');
const progressText = document.getElementById('delete-progress-text');
+ const closeBtn = document.getElementById('delete-progress-close');
let currentIndex = 0;
const failedDeletes = [];
@@ -1674,14 +1695,15 @@ function performMultipleMoves(items, destFolder) {
}, 1000);
} else {
progressFill.style.backgroundColor = '#e74c3c';
- const failedList = failedDeletes.map(f => f.name).join(', ');
- progressText.textContent = `${items.length - failedDeletes.length}/${items.length} deleted. Failed: ${failedList}`;
+ const errorDetails = failedDeletes.map(f => `${f.name}: ${f.error}`).join('
');
+ progressText.innerHTML = `${items.length - failedDeletes.length}/${items.length} deleted successfully.
Failed items:
${errorDetails}`;
- setTimeout(() => {
+ // Show close button for user to dismiss
+ closeBtn.style.display = 'block';
+ closeBtn.onclick = () => {
document.body.removeChild(progressOverlay);
- alert(`Failed to delete: ${failedList}\n\nPlease try again or check server logs.`);
hydrate();
- }, 3000);
+ };
}
return;
}