From 84f3eedb74034986592d0927c4062951c0a6c16b Mon Sep 17 00:00:00 2001 From: kodi Date: Sat, 14 Mar 2026 09:54:21 +0100 Subject: [PATCH] feat: contextmenu deel move toegevoegd --- webui/backend/data/tasks.db | Bin 172032 -> 184320 bytes .../test_ui_smoke_golden.cpython-313.pyc | Bin 31376 -> 31704 bytes .../tests/golden/test_ui_smoke_golden.py | 4 ++++ webui/html/app.js | 14 ++++++++++++++ webui/html/index.html | 1 + 5 files changed, 19 insertions(+) diff --git a/webui/backend/data/tasks.db b/webui/backend/data/tasks.db index 1ffe4b10edd38c1f145adb0fd380e74b5aa78277..325f4c381d955b25747c86ed1644f4a0aca48609 100644 GIT binary patch delta 3261 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 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 75bb58617ab894824cefb11f5b8800f56feba48f..eed3f9ebfcef7dca9c39bd9b8611ee4e2113ce83 100644 GIT binary patch delta 654 zcmYL_OK1~O6o%*K&eYgsCNaiL8!b&T@sUN+P)uVNQV}hoNi<~~s>OnmjBO+j$xLf2 zr4}((6hu559~6oU(M4^`MZ|^gXRVqB1-lWq1s4{o)I||zrVH=lKj;6>;avEy{zeNc zh+AgaT1tDjy$`bD(HZV9MtcZLXE^9#oKSYyp@(;pdycypDs7t4AZzu*4cD;I2lyfA z=J^fhB^)v7cPPq3HBn+2?(k#i0twZv;!W;sX16b0EU5CJ8qCXu{$Rd1K!hzRGwLO( zzY*6oPw)F;ZY7tt$C(Df-M5)eqqSp(GMZwFLd$j!aI~Mef@L#Ig`F@JISjWVP8he^ zbx+z_29YsHat45((VfP^BhBlJ-_|%eyXyo8lVKOS4-;VlO&K~(7TPZ(Qi&Zx@IB^) zXva3F#(em(M8lPc7d?Ubn1G(bXorBF>589AH82wP;uq37qrQ~PdPT3m9vARysn(!x zB#TksN>*d~4kqHk^|Ru8ajw-=;I1XS%&ho9oP*W)RtCBu*Fkyp}nO&S3FIildi9s(Nb4_knxibP4K5^gD%Ae?vf2k z`EKayw?Rx{LCiIf#k^oKA2Bh}l>xe&Y#fTC=3xfyN7v0?>jKrfz%RNxzJJV2G9r^5byYSSvDouXjujV~+$tn6IhIvq z^Gcx=%#&Yot4x-201Hf>DOLkkpebI-qR$ZAGWnEvJ7eqSAc;TBo3ms*IT#~0Z&8tF z-uy`2iB(omDua_HnGs|c6tDtmW(Eev&r9StJL<0Fn0(JmWb!}Lh{^v9L?+MW5dhJf z`^+jB!4kfF0$|$C!UU{fCy) zvz%uL#Gp1WHAYsjg1w;-dS56Tn7==i9ZVkxfq92Rxxw_2P#zG? zcyw~Kk1p%6;N!t3CinWNavlpl8GOQ$DUW~hL?1<<_$i?HLmyej(~|?l6<9*~gU^5% zLZJe|XHA(PL7>2p&Y*d2bExkN=FM?|jEs{f1c@x(93;uM0VrR*fAh}l?M#z@7V%H+ z%gbcbTH$tu!+5h)z9lzD1QVe GS_S|<-=f3- diff --git a/webui/backend/tests/golden/test_ui_smoke_golden.py b/webui/backend/tests/golden/test_ui_smoke_golden.py index f31a6db..cd6e393 100644 --- a/webui/backend/tests/golden/test_ui_smoke_golden.py +++ b/webui/backend/tests/golden/test_ui_smoke_golden.py @@ -72,6 +72,7 @@ class UiSmokeGoldenTest(unittest.TestCase): self.assertIn('id="context-menu-scope"', body) self.assertIn('id="context-menu-target"', body) self.assertIn('id="context-menu-rename-btn"', body) + self.assertIn('id="context-menu-move-btn"', body) self.assertIn('id="context-menu-delete-btn"', body) self.assertIn('id="settings-btn"', body) self.assertIn('id="rename-btn"', body) @@ -210,6 +211,7 @@ class UiSmokeGoldenTest(unittest.TestCase): self.assertIn('function closeContextMenu()', app_js) self.assertIn('function applyContextMenuSelection()', app_js) self.assertIn('function startContextMenuRename()', app_js) + self.assertIn('function startContextMenuMove()', app_js) self.assertIn('function startContextMenuDelete()', app_js) self.assertIn('selectedPathsSet.has(entry.path)', app_js) self.assertIn('entry.isParent', app_js) @@ -218,7 +220,9 @@ class UiSmokeGoldenTest(unittest.TestCase): self.assertIn('if (!row) {', app_js) self.assertIn('closeContextMenu();', app_js) self.assertIn('elements.renameButton.classList.toggle("hidden", isMulti);', app_js) + self.assertIn('elements.moveButton.classList.remove("hidden");', app_js) self.assertIn('openRenamePopup();', app_js) + self.assertIn('openF6Flow();', app_js) self.assertIn('deleteSelected();', app_js) self.assertIn('document.getElementById("upload-menu-toggle").onclick = (event) => {', app_js) self.assertIn('document.getElementById("upload-folder-btn").onclick = openFolderPicker;', app_js) diff --git a/webui/html/app.js b/webui/html/app.js index eab4c0a..125d6a1 100644 --- a/webui/html/app.js +++ b/webui/html/app.js @@ -327,6 +327,7 @@ function contextMenuElements() { scope: document.getElementById("context-menu-scope"), target: document.getElementById("context-menu-target"), renameButton: document.getElementById("context-menu-rename-btn"), + moveButton: document.getElementById("context-menu-move-btn"), deleteButton: document.getElementById("context-menu-delete-btn"), }; } @@ -369,6 +370,7 @@ function openContextMenu(pane, entry, event) { 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.moveButton.classList.remove("hidden"); elements.deleteButton.classList.remove("hidden"); const menuWidth = 220; @@ -419,6 +421,15 @@ function startContextMenuDelete() { deleteSelected(); } +function startContextMenuMove() { + if (!applyContextMenuSelection()) { + closeContextMenu(); + return; + } + closeContextMenu(); + openF6Flow(); +} + function settingsElements() { return { overlay: document.getElementById("settings-modal"), @@ -3740,6 +3751,9 @@ function setupEvents() { if (contextMenu.renameButton) { contextMenu.renameButton.onclick = startContextMenuRename; } + if (contextMenu.moveButton) { + contextMenu.moveButton.onclick = startContextMenuMove; + } if (contextMenu.deleteButton) { contextMenu.deleteButton.onclick = startContextMenuDelete; } diff --git a/webui/html/index.html b/webui/html/index.html index 16a6754..2f4e381 100644 --- a/webui/html/index.html +++ b/webui/html/index.html @@ -123,6 +123,7 @@
+