diff --git a/webui/backend/data/tasks.db b/webui/backend/data/tasks.db index ba7d4c7..742621b 100644 Binary files a/webui/backend/data/tasks.db and b/webui/backend/data/tasks.db differ diff --git a/webui/backend/tests/golden/__pycache__/test_ui_smoke_golden.cpython-313.pyc b/webui/backend/tests/golden/__pycache__/test_ui_smoke_golden.cpython-313.pyc index 365d88e..f492f69 100644 Binary files a/webui/backend/tests/golden/__pycache__/test_ui_smoke_golden.cpython-313.pyc and b/webui/backend/tests/golden/__pycache__/test_ui_smoke_golden.cpython-313.pyc differ diff --git a/webui/backend/tests/golden/test_ui_smoke_golden.py b/webui/backend/tests/golden/test_ui_smoke_golden.py index 7931bdc..23d6845 100644 --- a/webui/backend/tests/golden/test_ui_smoke_golden.py +++ b/webui/backend/tests/golden/test_ui_smoke_golden.py @@ -223,13 +223,14 @@ class UiSmokeGoldenTest(unittest.TestCase): self.assertIn('closeContextMenu();', app_js) self.assertIn('elements.renameButton.classList.toggle("hidden", isMulti);', app_js) self.assertIn('elements.copyButton.classList.remove("hidden");', app_js) - self.assertIn('const allFiles = items.length > 0 && items.every((item) => item.kind === "file");', app_js) - self.assertIn('elements.copyButton.disabled = !allFiles;', app_js) + self.assertIn('elements.copyButton.disabled = items.length === 0;', app_js) self.assertIn('elements.moveButton.classList.remove("hidden");', app_js) self.assertIn('openRenamePopup();', app_js) self.assertIn('startCopySelected();', app_js) self.assertIn('openF6Flow();', app_js) self.assertIn('deleteSelected();', app_js) + self.assertIn('document.getElementById("copy-btn").disabled = !hasSelection;', app_js) + self.assertNotIn('Only files are supported for copy', app_js) self.assertIn('document.getElementById("upload-menu-toggle").onclick = (event) => {', app_js) self.assertIn('document.getElementById("upload-folder-btn").onclick = openFolderPicker;', app_js) self.assertIn('throw createApiError(response, data);', app_js) diff --git a/webui/html/app.js b/webui/html/app.js index 507203c..4e95cba 100644 --- a/webui/html/app.js +++ b/webui/html/app.js @@ -368,12 +368,11 @@ function openContextMenu(pane, entry, event) { contextMenuState.anchorPath = entry.path; const isMulti = items.length > 1; - const allFiles = items.length > 0 && items.every((item) => item.kind === "file"); elements.scope.textContent = isMulti ? "Multi-selection" : "Single item"; elements.target.textContent = isMulti ? `${items.length} selected items` : entry.name; elements.renameButton.classList.toggle("hidden", isMulti); elements.copyButton.classList.remove("hidden"); - elements.copyButton.disabled = !allFiles; + elements.copyButton.disabled = items.length === 0; elements.moveButton.classList.remove("hidden"); elements.deleteButton.classList.remove("hidden"); @@ -1465,7 +1464,7 @@ function updateActionButtons() { document.getElementById("edit-btn").disabled = !exactlyOne || !allFiles || !isEditableSelection(selectedItems[0] || null); document.getElementById("rename-btn").disabled = !exactlyOne; document.getElementById("delete-btn").disabled = !hasSelection; - document.getElementById("copy-btn").disabled = !allFiles; + document.getElementById("copy-btn").disabled = !hasSelection; document.getElementById("move-btn").disabled = !hasSelection; } @@ -2208,9 +2207,6 @@ async function startCopySelected() { for (const item of selectedItems) { const destination = defaultDestination(item.path, baseDestination); try { - if (item.kind !== "file") { - throw new Error("Only files are supported for copy"); - } const result = await apiRequest("POST", "/api/files/copy", { source: item.path, destination,