From 25fa0ce644fdaae6db8af0a3754f1f847f5adb86 Mon Sep 17 00:00:00 2001 From: Mikei386 <44135113+Mikei386@users.noreply.github.com> Date: Tue, 23 Jun 2026 11:54:35 +0200 Subject: [PATCH] Add sliding transfers panel --- build-plugin.sh | 2 +- packages/u-navigator-2026.06.23.r022.tgz | Bin 19504 -> 0 bytes packages/u-navigator-2026.06.23.r023.tgz | Bin 0 -> 20425 bytes .../plugins/u-navigator/U-Navigator.page | 2 +- server/public/app.js | 140 +++++++++++++++--- server/public/styles.css | 80 ++++++++++ u-navigator.plg | 4 +- 7 files changed, 201 insertions(+), 27 deletions(-) delete mode 100644 packages/u-navigator-2026.06.23.r022.tgz create mode 100644 packages/u-navigator-2026.06.23.r023.tgz diff --git a/build-plugin.sh b/build-plugin.sh index cd8fe7c..819bef3 100755 --- a/build-plugin.sh +++ b/build-plugin.sh @@ -2,7 +2,7 @@ set -eu PLUGIN="u-navigator" -VERSION="2026.06.23.r022" +VERSION="2026.06.23.r023" PKG_DIR="packages" WORK_DIR=".plugin-build" PKG_NAME="${PLUGIN}-${VERSION}.tgz" diff --git a/packages/u-navigator-2026.06.23.r022.tgz b/packages/u-navigator-2026.06.23.r022.tgz deleted file mode 100644 index c0e65edd912b69384d02475313f03a1a0e62d848..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19504 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 TSv{*~x##}_tTBD)0N?=tJ#6#) diff --git a/packages/u-navigator-2026.06.23.r023.tgz b/packages/u-navigator-2026.06.23.r023.tgz new file mode 100644 index 0000000000000000000000000000000000000000..68285e4b7c2fc486ae1927e6ca85025eee235938 GIT binary patch literal 20425 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 literal 0 HcmV?d00001 diff --git a/plugin-root/usr/local/emhttp/plugins/u-navigator/U-Navigator.page b/plugin-root/usr/local/emhttp/plugins/u-navigator/U-Navigator.page index 5040f87..a71a65b 100644 --- a/plugin-root/usr/local/emhttp/plugins/u-navigator/U-Navigator.page +++ b/plugin-root/usr/local/emhttp/plugins/u-navigator/U-Navigator.page @@ -16,7 +16,7 @@ $version = "__VERSION__";
diff --git a/server/public/app.js b/server/public/app.js index 3df80c1..985a1a4 100644 --- a/server/public/app.js +++ b/server/public/app.js @@ -1,5 +1,7 @@ const workspace = document.querySelector('#workspace'); +const appShell = document.querySelector('.u-nav'); const statusText = document.querySelector('#statusText'); +const transferButton = document.querySelector('#newQueueButton'); const API_BASE = window.UNAV_API_BASE || '/api'; const APP_VERSION = window.UNAV_VERSION || 'dev'; const state = { @@ -17,6 +19,9 @@ const state = { jobRefresh: new Map(), sizeJobs: new Map(), sizeResults: new Map(), + transferPanelVisible: false, + transferPanelClosing: false, + transferAutoHideTimer: null, nextWindowId: 1, zIndex: 20 }; @@ -30,7 +35,7 @@ const icons = { document.querySelector('#newExplorerButton').addEventListener('click', () => openExplorer()); document.querySelector('#newPropertiesButton').addEventListener('click', () => openProperties()); -document.querySelector('#newQueueButton').addEventListener('click', () => openQueue()); +transferButton.addEventListener('click', () => toggleTransferPanel()); window.addEventListener('error', (event) => { recordDebug('window.error', { message: event.message, @@ -54,7 +59,6 @@ async function init() { } statusText.textContent = `${state.config.roots.length} Root, ${state.config.readOnly ? 'Read-only' : 'Schreibzugriff aktiv'} · ${APP_VERSION}`; openExplorer(state.config.roots[0].path); - openQueue(); } catch (error) { statusText.textContent = error.message; } @@ -105,13 +109,8 @@ function openProperties(entry = state.selectedEntry) { } function openQueue() { - return createWindow('Transfers', 'queue', { - width: 440, - height: 340, - x: 250, - y: 130, - data: {} - }); + showTransferPanel(); + return null; } function createWindow(title, kind, options) { @@ -142,6 +141,7 @@ function render() { if (state.contextMenu) { workspace.appendChild(renderContextMenu()); } + renderTransferPanel(); } function renderWindow(win) { @@ -182,7 +182,6 @@ function renderWindow(win) { body.className = 'window-body'; if (win.kind === 'explorer') renderExplorer(body, win); if (win.kind === 'properties') renderProperties(body); - if (win.kind === 'queue') renderQueue(body); body.addEventListener('scroll', () => { if (win.data.lockScroll) { body.scrollTop = win.data.lockScrollTop || 0; @@ -361,6 +360,11 @@ function renderProperties(body) { } function renderQueue(body) { + body.innerHTML = queueMarkup(); + bindQueueActions(body); +} + +function queueMarkup() { const jobs = [...state.jobs.values()].reverse(); const jobMarkup = jobs.length ? jobs.map((job) => `
@@ -377,7 +381,7 @@ function renderQueue(body) {
`).join('') : '

Noch keine Debug-Einträge.

'; - body.innerHTML = ` + return `
${jobMarkup}
@@ -387,12 +391,105 @@ function renderQueue(body) { ${debugMarkup}
`; - body.querySelector('[data-action="clear-debug"]')?.addEventListener('click', () => { +} + +function bindQueueActions(root) { + root.querySelector('[data-action="clear-debug"]')?.addEventListener('click', () => { state.debug = []; - render(); + updateTransferPanel(); }); } +function toggleTransferPanel() { + if (state.transferPanelVisible) { + hideTransferPanel(); + } else { + showTransferPanel(); + } +} + +function showTransferPanel() { + if (state.transferAutoHideTimer) { + clearTimeout(state.transferAutoHideTimer); + state.transferAutoHideTimer = null; + } + state.transferPanelVisible = true; + state.transferPanelClosing = false; + renderTransferPanel(); +} + +function hideTransferPanel() { + if (!state.transferPanelVisible && !state.transferPanelClosing) { + return; + } + if (state.transferAutoHideTimer) { + clearTimeout(state.transferAutoHideTimer); + state.transferAutoHideTimer = null; + } + state.transferPanelVisible = false; + state.transferPanelClosing = true; + renderTransferPanel(); + setTimeout(() => { + if (!state.transferPanelVisible) { + state.transferPanelClosing = false; + renderTransferPanel(); + } + }, 220); +} + +function scheduleTransferAutoHide() { + if (!state.transferPanelVisible || activeTransferCount() > 0 || state.transferAutoHideTimer) { + return; + } + state.transferAutoHideTimer = setTimeout(() => { + state.transferAutoHideTimer = null; + if (activeTransferCount() === 0) { + hideTransferPanel(); + } + }, 2200); +} + +function activeTransferCount() { + return [...state.jobs.values()].filter((job) => job.type !== 'size' && ['queued', 'running', 'cancel_requested'].includes(job.status)).length; +} + +function renderTransferPanel() { + const existing = appShell.querySelector('.transfer-panel'); + if (!state.transferPanelVisible && !state.transferPanelClosing) { + existing?.remove(); + transferButton.classList.remove('active'); + transferButton.setAttribute('aria-expanded', 'false'); + return; + } + + const panel = existing || document.createElement('aside'); + panel.className = `transfer-panel ${state.transferPanelClosing ? 'closing' : 'open'}`; + panel.setAttribute('aria-label', 'Transfers'); + panel.innerHTML = ` +
+ Transfers + +
+
${queueMarkup()}
+ `; + if (!existing) { + appShell.appendChild(panel); + } + + const buttonRect = transferButton.getBoundingClientRect(); + const shellRect = appShell.getBoundingClientRect(); + const panelWidth = Math.min(520, Math.max(360, shellRect.width - 32)); + const right = Math.max(16, shellRect.right - buttonRect.right); + panel.style.width = `${panelWidth}px`; + panel.style.right = `${right}px`; + panel.style.top = `${buttonRect.bottom - shellRect.top + 8}px`; + + panel.querySelector('[data-action="close-transfers"]').addEventListener('click', () => hideTransferPanel()); + bindQueueActions(panel); + transferButton.classList.add('active'); + transferButton.setAttribute('aria-expanded', 'true'); +} + async function loadExplorer(win, targetPath) { win.data.loading = true; win.data.error = null; @@ -453,8 +550,9 @@ async function createJob(type, source, destination, refreshWindowIds = []) { windowIds: [...new Set(refreshWindowIds)].filter(Boolean), done: false }); + showTransferPanel(); pollJob(job.id); - render(); + updateTransferPanel(); return job; } @@ -622,13 +720,14 @@ async function pollJob(id) { try { const job = await api(apiUrl(`job.php?id=${encodeURIComponent(id)}`)); state.jobs.set(id, job); - render(); + updateTransferPanel(); if (['queued', 'running', 'cancel_requested'].includes(job.status)) { setTimeout(() => pollJob(id), 700); } else if (job.type === 'size') { finishSizeJob(job); } else { await refreshAfterJob(job); + scheduleTransferAutoHide(); } } catch (error) { recordDebug('job.poll.error', { id, error: serializeError(error) }); @@ -1109,17 +1208,12 @@ function recordDebug(label, data = {}) { if (state.debug.length > 80) { state.debug.splice(0, state.debug.length - 80); } - updateQueueWindows(); + updateTransferPanel(); return item; } -function updateQueueWindows() { - for (const win of state.windows.filter((item) => item.kind === 'queue')) { - const body = workspace.querySelector(`.window[data-window-id="${win.id}"] .window-body`); - if (body) { - renderQueue(body); - } - } +function updateTransferPanel() { + renderTransferPanel(); } function serializeError(error) { diff --git a/server/public/styles.css b/server/public/styles.css index 9f710ab..fd3f8b6 100644 --- a/server/public/styles.css +++ b/server/public/styles.css @@ -14,6 +14,8 @@ font: 14px/1.4 system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; grid-template-rows: auto 1fr; min-height: calc(100vh - 170px); + overflow: hidden; + position: relative; } @media (prefers-color-scheme: dark) { @@ -88,6 +90,11 @@ gap: 8px; } +.u-nav .toolbar button.active { + background: var(--surface-2); + border-color: var(--accent); +} + .u-nav .workspace { min-height: 0; overflow: hidden; @@ -472,6 +479,71 @@ border-color: var(--line); } +.u-nav .transfer-panel { + background: var(--surface); + border: 1px solid var(--line); + border-radius: 8px; + box-shadow: var(--shadow); + display: grid; + grid-template-rows: auto minmax(0, 1fr); + max-height: min(520px, calc(100% - 78px)); + min-height: 220px; + min-width: 320px; + overflow: hidden; + position: absolute; + transform-origin: top right; + z-index: 10000; +} + +.u-nav .transfer-panel.open { + animation: transfer-slide-down 180ms ease-out both; +} + +.u-nav .transfer-panel.closing { + animation: transfer-slide-up 180ms ease-in both; + pointer-events: none; +} + +.u-nav .transfer-panel-header { + align-items: center; + background: var(--surface-2); + border-bottom: 1px solid var(--line); + display: flex; + justify-content: space-between; + min-height: 40px; + padding: 5px 8px 5px 12px; +} + +.u-nav .transfer-panel-body { + min-height: 0; + overflow: auto; + padding: 10px; +} + +@keyframes transfer-slide-down { + from { + opacity: 0; + transform: translateY(-18px) scaleY(0.96); + } + + to { + opacity: 1; + transform: translateY(0) scaleY(1); + } +} + +@keyframes transfer-slide-up { + from { + opacity: 1; + transform: translateY(0) scaleY(1); + } + + to { + opacity: 0; + transform: translateY(-18px) scaleY(0.96); + } +} + .u-nav .queue-list { display: grid; gap: 10px; @@ -580,4 +652,12 @@ .u-nav .resize-handle { display: none; } + + .u-nav .transfer-panel { + left: 10px !important; + max-height: min(70vh, 520px); + min-width: 0; + right: 10px !important; + width: auto !important; + } } diff --git a/u-navigator.plg b/u-navigator.plg index 3017996..b5a5892 100644 --- a/u-navigator.plg +++ b/u-navigator.plg @@ -1,7 +1,7 @@ - + @@ -24,7 +24,7 @@ https://git.casaderoll.de/michael/Unraid-Navigator/raw/branch/main/packages/&package; -84c66337fdd03108c2c04690f88ee5b8 +c57cb70f4d040d65869b6ffde469b18a