From 73c539ba4a57614f87c08c38a44de2c15feb482e Mon Sep 17 00:00:00 2001 From: kodi Date: Sat, 14 Mar 2026 11:11:03 +0100 Subject: [PATCH] feat: contextmenu eigenschappen toegevoegd --- .../test_ui_smoke_golden.cpython-313.pyc | Bin 32346 -> 33278 bytes .../tests/golden/test_ui_smoke_golden.py | 10 +++++ webui/html/app.js | 38 +++++++++++++++--- webui/html/index.html | 1 + 4 files changed, 44 insertions(+), 5 deletions(-) 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 f492f694e1c55ed5fe30d3a049d14f546150aaaa..9771aff2689fe1babcda2ea8d6acb705c9d7e63c 100644 GIT binary patch delta 1124 zcmZvbTTIhn7>3t%gK^lwIT#qxvJJ8+1FIq+86Hq0Lh(>aObiKx6|C91v6X`pHSrKM zMkV=f^umP1TfH!iA}TR41~F&^#RDklg)znpqk+Vb2=VXVDi_$Kefqt9-~a#8ex3YH zES%O`X3XYP9Xk3q+!pAjTb2b+h#Tt>DV6l?(8AX$sJky4LJ!)2nJlu z5mDm1B!8F}+x^j4B+ADmfsf0NR?;TotUT+fAt7(A6~1|`@?Njoxaw>2io;tB&4kjv zb{G*!osO6(aLK*?j1*vK2V6_HVNPx8!)!OJ^;M07h{sDDFkkW*bHJkcHRhCc&+o5`{yjflpD&An4y}^B>JI(b`y7%D>=ZC(7VSCTWA+? zAL|dWK8SRxTGb!Q_jX?(;C!{(M|Mp1jOTirHQZZk1X_#-gbcMuQIK}u=-mw$xWSL&H zz$GTv_>O(gPQo;khx89vx52tvCuw1);D((ta8`C&xv_IL_G7VL{dknFRpR6&Q#*0BdrmVe7;6p*Li`Cqepx9jnRGbel&7(d%OQO4k5U(U!5Gy0? zqJ&&UOI$mI7-}aHLq7}h2DR$w-#`FS096hJ$To$-Uve`f*bMT<*$(M3)uDB^z``tx(lwm7#5Wn(2_b8VAI)}=@++=?;kT`%4S}cHGGrr3W-d%vlW;e%PO+@qtFWG z$%Z^CleruPCZ83X0G8YbWP=n<6%S?6X9#YaEF{s+*uHs|L?Fv%URfOu#Jz3vEd9#`o4oT7kVl)LS*+qMfXDKeL&jK3o1MLo_7t{5qUmpjI3bOj)g+##~F7$@h2`7qi}_KT3*yg%Gjl5G=ES+U3FUj(^b diff --git a/webui/backend/tests/golden/test_ui_smoke_golden.py b/webui/backend/tests/golden/test_ui_smoke_golden.py index 23d6845..3596864 100644 --- a/webui/backend/tests/golden/test_ui_smoke_golden.py +++ b/webui/backend/tests/golden/test_ui_smoke_golden.py @@ -75,6 +75,7 @@ class UiSmokeGoldenTest(unittest.TestCase): self.assertIn('id="context-menu-copy-btn"', body) self.assertIn('id="context-menu-move-btn"', body) self.assertIn('id="context-menu-delete-btn"', body) + self.assertIn('id="context-menu-properties-btn"', body) self.assertIn('id="settings-btn"', body) self.assertIn('id="rename-btn"', body) self.assertIn('id="view-btn"', body) @@ -215,6 +216,7 @@ class UiSmokeGoldenTest(unittest.TestCase): self.assertIn('function startContextMenuCopy()', app_js) self.assertIn('function startContextMenuMove()', app_js) self.assertIn('function startContextMenuDelete()', app_js) + self.assertIn('function startContextMenuProperties()', app_js) self.assertIn('selectedPathsSet.has(entry.path)', app_js) self.assertIn('entry.isParent', app_js) self.assertIn('row.oncontextmenu = (event) => {', app_js) @@ -225,10 +227,18 @@ class UiSmokeGoldenTest(unittest.TestCase): self.assertIn('elements.copyButton.classList.remove("hidden");', app_js) self.assertIn('elements.copyButton.disabled = items.length === 0;', app_js) self.assertIn('elements.moveButton.classList.remove("hidden");', app_js) + self.assertIn('elements.propertiesButton.classList.remove("hidden");', app_js) + self.assertIn('elements.propertiesButton.disabled = items.length === 0;', app_js) self.assertIn('openRenamePopup();', app_js) self.assertIn('startCopySelected();', app_js) self.assertIn('openF6Flow();', app_js) self.assertIn('deleteSelected();', app_js) + self.assertIn('openInfo();', app_js) + self.assertIn('elements.title.textContent = "Properties";', app_js) + self.assertIn('if (selectedItems.length > 1) {', app_js) + self.assertIn('renderInfoField("Selected items", selectedItems.length);', app_js) + self.assertIn('renderInfoField("Files", fileCount);', app_js) + self.assertIn('renderInfoField("Directories", directoryCount);', 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) diff --git a/webui/html/app.js b/webui/html/app.js index 4e95cba..8ac2c87 100644 --- a/webui/html/app.js +++ b/webui/html/app.js @@ -330,6 +330,7 @@ function contextMenuElements() { copyButton: document.getElementById("context-menu-copy-btn"), moveButton: document.getElementById("context-menu-move-btn"), deleteButton: document.getElementById("context-menu-delete-btn"), + propertiesButton: document.getElementById("context-menu-properties-btn"), }; } @@ -375,6 +376,8 @@ function openContextMenu(pane, entry, event) { elements.copyButton.disabled = items.length === 0; elements.moveButton.classList.remove("hidden"); elements.deleteButton.classList.remove("hidden"); + elements.propertiesButton.classList.remove("hidden"); + elements.propertiesButton.disabled = items.length === 0; const menuWidth = 220; const menuHeight = 120; @@ -445,6 +448,18 @@ function startContextMenuCopy() { startCopySelected(); } +function startContextMenuProperties() { + if (contextMenuElements().propertiesButton?.disabled) { + return; + } + if (!applyContextMenuSelection()) { + closeContextMenu(); + return; + } + closeContextMenu(); + openInfo(); +} + function settingsElements() { return { overlay: document.getElementById("settings-modal"), @@ -482,6 +497,7 @@ function searchElements() { function infoElements() { return { overlay: document.getElementById("info-modal"), + title: document.getElementById("info-title"), closeButton: document.getElementById("info-close-btn"), error: document.getElementById("info-error"), grid: document.getElementById("info-grid"), @@ -2926,14 +2942,23 @@ function renderInfoField(label, value) { async function openInfo() { const selectedItems = activePaneState().selectedItems; - if (selectedItems.length !== 1) { + if (selectedItems.length === 0) { + return; + } + const elements = infoElements(); + elements.overlay.classList.remove("hidden"); + elements.title.textContent = "Properties"; + elements.error.textContent = ""; + elements.grid.innerHTML = ""; + if (selectedItems.length > 1) { + const fileCount = selectedItems.filter((item) => item.kind === "file").length; + const directoryCount = selectedItems.filter((item) => item.kind === "directory").length; + renderInfoField("Selected items", selectedItems.length); + renderInfoField("Files", fileCount); + renderInfoField("Directories", directoryCount); return; } const selected = selectedItems[0]; - const elements = infoElements(); - elements.overlay.classList.remove("hidden"); - elements.error.textContent = ""; - elements.grid.innerHTML = ""; try { const data = await apiRequest("GET", `/api/files/info?${new URLSearchParams({ path: selected.path }).toString()}`); renderInfoField("Name", data.name); @@ -3772,6 +3797,9 @@ function setupEvents() { if (contextMenu.deleteButton) { contextMenu.deleteButton.onclick = startContextMenuDelete; } + if (contextMenu.propertiesButton) { + contextMenu.propertiesButton.onclick = startContextMenuProperties; + } document.addEventListener("click", (event) => { const elements = uploadElements(); if (!elements.menu || elements.menu.contains(event.target)) { diff --git a/webui/html/index.html b/webui/html/index.html index 54017f2..3821b06 100644 --- a/webui/html/index.html +++ b/webui/html/index.html @@ -126,6 +126,7 @@ +