feat: contextmenu deel 3a rename en delete

This commit is contained in:
kodi
2026-03-14 09:41:16 +01:00
parent 7bb59a2b65
commit 054e736aa6
6 changed files with 60 additions and 3 deletions
+50 -1
View File
@@ -326,7 +326,8 @@ function contextMenuElements() {
menu: document.getElementById("context-menu"),
scope: document.getElementById("context-menu-scope"),
target: document.getElementById("context-menu-target"),
placeholder: document.getElementById("context-menu-open-placeholder"),
renameButton: document.getElementById("context-menu-rename-btn"),
deleteButton: document.getElementById("context-menu-delete-btn"),
};
}
@@ -367,6 +368,8 @@ function openContextMenu(pane, entry, event) {
const isMulti = items.length > 1;
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.deleteButton.classList.remove("hidden");
const menuWidth = 220;
const menuHeight = 120;
@@ -377,6 +380,45 @@ function openContextMenu(pane, entry, event) {
elements.menu.classList.remove("hidden");
}
function applyContextMenuSelection() {
if (!contextMenuState.items.length) {
return false;
}
const pane = contextMenuState.pane;
const model = paneState(pane);
setActivePane(pane);
model.selectedItems = contextMenuState.items.map((item) => ({ ...item }));
model.selectedItem = model.selectedItems.length > 0 ? model.selectedItems[model.selectedItems.length - 1] : null;
const anchorPath = contextMenuState.anchorPath;
if (anchorPath) {
const currentIndex = model.visibleItems.findIndex((item) => !item.isParent && item.path === anchorPath);
if (currentIndex >= 0) {
model.currentRowIndex = currentIndex;
setSelectionAnchor(pane, currentIndex);
}
}
renderPaneItems(pane);
return true;
}
function startContextMenuRename() {
if (!applyContextMenuSelection()) {
closeContextMenu();
return;
}
closeContextMenu();
openRenamePopup();
}
function startContextMenuDelete() {
if (!applyContextMenuSelection()) {
closeContextMenu();
return;
}
closeContextMenu();
deleteSelected();
}
function settingsElements() {
return {
overlay: document.getElementById("settings-modal"),
@@ -3694,6 +3736,13 @@ function setupEvents() {
}
};
}
const contextMenu = contextMenuElements();
if (contextMenu.renameButton) {
contextMenu.renameButton.onclick = startContextMenuRename;
}
if (contextMenu.deleteButton) {
contextMenu.deleteButton.onclick = startContextMenuDelete;
}
document.addEventListener("click", (event) => {
const elements = uploadElements();
if (!elements.menu || elements.menu.contains(event.target)) {