(strip, sourceId = '')
| 280 | } |
| 281 | |
| 282 | function wireFolderStripItems(strip, sourceId = '') { |
| 283 | if (!strip) return; |
| 284 | const paneSourceId = sourceId || getActivePaneSourceId(); |
| 285 | |
| 286 | // Click / DnD / context menu |
| 287 | strip.querySelectorAll(".folder-item").forEach(el => { |
| 288 | // 1) click to navigate |
| 289 | el.addEventListener("click", () => { |
| 290 | const dest = el.dataset.folder; |
| 291 | if (!dest) return; |
| 292 | |
| 293 | setCurrentFolderContext(dest, { resetPage: true }); |
| 294 | |
| 295 | document.querySelectorAll(".folder-option.selected") |
| 296 | .forEach(o => o.classList.remove("selected")); |
| 297 | document |
| 298 | .querySelector(`.folder-option[data-folder="${dest}"]`) |
| 299 | ?.classList.add("selected"); |
| 300 | |
| 301 | loadFileList(dest); |
| 302 | }); |
| 303 | |
| 304 | // 2) drag & drop |
| 305 | el.addEventListener("dragover", folderDragOverHandler); |
| 306 | el.addEventListener("dragleave", folderDragLeaveHandler); |
| 307 | el.addEventListener("drop", folderDropHandler); |
| 308 | |
| 309 | // 3) right-click context menu |
| 310 | el.addEventListener("contextmenu", async e => { |
| 311 | e.preventDefault(); |
| 312 | e.stopPropagation(); |
| 313 | |
| 314 | const dest = el.dataset.folder; |
| 315 | if (!dest) return; |
| 316 | |
| 317 | strip.querySelectorAll(".folder-item.selected") |
| 318 | .forEach(i => i.classList.remove("selected")); |
| 319 | el.classList.add("selected"); |
| 320 | |
| 321 | let caps = null; |
| 322 | try { |
| 323 | caps = await fetchFolderCaps(dest, paneSourceId); |
| 324 | } catch (e2) { /* ignore */ } |
| 325 | const enc = (caps && caps.encryption) ? caps.encryption : {}; |
| 326 | const canEncrypt = !!enc.canEncrypt; |
| 327 | const canDecrypt = !!enc.canDecrypt; |
| 328 | |
| 329 | const menuItems = [ |
| 330 | { |
| 331 | label: t("create_folder"), |
| 332 | action: () => { |
| 333 | // Create inside this folder (without changing the current view yet) |
| 334 | window.currentFolder = dest; |
| 335 | const modal = document.getElementById("createFolderModal"); |
| 336 | if (modal) modal.style.display = "block"; |
| 337 | const input = document.getElementById("newFolderName"); |
| 338 | if (input) input.focus(); |
| 339 | } |
no test coverage detected