From 2d56f57c543b28c823a23e4dfad1003a2fd1f8bf Mon Sep 17 00:00:00 2001 From: Mikei386 <44135113+Mikei386@users.noreply.github.com> Date: Tue, 23 Jun 2026 13:06:12 +0200 Subject: [PATCH] Add settings panel and readonly default --- build-plugin.sh | 2 +- packages/u-navigator-2026.06.23.r026.tgz | Bin 20791 -> 0 bytes packages/u-navigator-2026.06.23.r027.tgz | Bin 0 -> 21901 bytes .../plugins/u-navigator/U-Navigator.page | 1 + .../emhttp/plugins/u-navigator/api/common.php | 42 +++++- .../emhttp/plugins/u-navigator/api/config.php | 12 ++ server/public/app.js | 141 ++++++++++++++++-- server/public/styles.css | 68 ++++++++- u-navigator.plg | 4 +- 9 files changed, 254 insertions(+), 16 deletions(-) delete mode 100644 packages/u-navigator-2026.06.23.r026.tgz create mode 100644 packages/u-navigator-2026.06.23.r027.tgz diff --git a/build-plugin.sh b/build-plugin.sh index b98b2b9..b1ad44c 100755 --- a/build-plugin.sh +++ b/build-plugin.sh @@ -2,7 +2,7 @@ set -eu PLUGIN="u-navigator" -VERSION="2026.06.23.r026" +VERSION="2026.06.23.r027" PKG_DIR="packages" WORK_DIR=".plugin-build" PKG_NAME="${PLUGIN}-${VERSION}.tgz" diff --git a/packages/u-navigator-2026.06.23.r026.tgz b/packages/u-navigator-2026.06.23.r026.tgz deleted file mode 100644 index 33ab2c072cd7f58fc7b87c0e4cb1a847e4aeb722..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20791 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 +
diff --git a/plugin-root/usr/local/emhttp/plugins/u-navigator/api/common.php b/plugin-root/usr/local/emhttp/plugins/u-navigator/api/common.php index d7bb740..7661240 100644 --- a/plugin-root/usr/local/emhttp/plugins/u-navigator/api/common.php +++ b/plugin-root/usr/local/emhttp/plugins/u-navigator/api/common.php @@ -2,6 +2,39 @@ const UNAV_DEFAULT_ROOT = '/mnt/user'; const UNAV_JOB_DIR = '/tmp/u-navigator/jobs'; +const UNAV_SETTINGS_FILE = '/boot/config/plugins/u-navigator/settings.json'; + +function unav_settings(): array { + $defaults = [ + 'readOnly' => true, + 'debug' => false, + ]; + if (!is_file(UNAV_SETTINGS_FILE)) { + return $defaults; + } + $settings = json_decode(file_get_contents(UNAV_SETTINGS_FILE) ?: '{}', true); + if (!is_array($settings)) { + return $defaults; + } + return array_merge($defaults, [ + 'readOnly' => filter_var($settings['readOnly'] ?? $defaults['readOnly'], FILTER_VALIDATE_BOOLEAN), + 'debug' => filter_var($settings['debug'] ?? $defaults['debug'], FILTER_VALIDATE_BOOLEAN), + ]); +} + +function unav_settings_write(array $settings): array { + $current = unav_settings(); + $next = [ + 'readOnly' => filter_var($settings['readOnly'] ?? $current['readOnly'], FILTER_VALIDATE_BOOLEAN), + 'debug' => filter_var($settings['debug'] ?? $current['debug'], FILTER_VALIDATE_BOOLEAN), + ]; + $dir = dirname(UNAV_SETTINGS_FILE); + if (!is_dir($dir) && !mkdir($dir, 0777, true) && !is_dir($dir)) { + unav_error(500, 'Could not create settings directory'); + } + file_put_contents(UNAV_SETTINGS_FILE, json_encode($next, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT), LOCK_EX); + return $next; +} function unav_roots(): array { $configured = getenv('U_NAV_ROOTS') ?: UNAV_DEFAULT_ROOT; @@ -29,7 +62,14 @@ function unav_roots(): array { } function unav_read_only(): bool { - return getenv('U_NAV_READ_ONLY') === '1'; + $env = getenv('U_NAV_READ_ONLY'); + if ($env === '1') { + return true; + } + if ($env === '0') { + return false; + } + return unav_settings()['readOnly']; } function unav_function_available(string $name): bool { diff --git a/plugin-root/usr/local/emhttp/plugins/u-navigator/api/config.php b/plugin-root/usr/local/emhttp/plugins/u-navigator/api/config.php index 9bab61b..d645605 100644 --- a/plugin-root/usr/local/emhttp/plugins/u-navigator/api/config.php +++ b/plugin-root/usr/local/emhttp/plugins/u-navigator/api/config.php @@ -1,7 +1,19 @@ $settings['readOnly'], + 'debug' => $settings['debug'], + 'roots' => unav_roots(), + ]); +} + +$settings = unav_settings(); unav_json([ 'readOnly' => unav_read_only(), + 'debug' => $settings['debug'], 'roots' => unav_roots(), ]); diff --git a/server/public/app.js b/server/public/app.js index 7b21e9d..1ab5453 100644 --- a/server/public/app.js +++ b/server/public/app.js @@ -2,6 +2,7 @@ const workspace = document.querySelector('#workspace'); const appShell = document.querySelector('.u-nav'); const statusText = document.querySelector('#statusText'); const transferButton = document.querySelector('#newQueueButton'); +const settingsButton = document.querySelector('#settingsButton'); const API_BASE = window.UNAV_API_BASE || '/api'; const APP_VERSION = window.UNAV_VERSION || 'dev'; const state = { @@ -23,6 +24,7 @@ const state = { transferPanelVisible: false, transferPanelClosing: false, transferAutoHideTimer: null, + settingsPanelVisible: false, nextWindowId: 1, zIndex: 20 }; @@ -37,6 +39,7 @@ const icons = { document.querySelector('#newExplorerButton').addEventListener('click', () => openExplorer()); document.querySelector('#newPropertiesButton').addEventListener('click', () => openProperties()); transferButton.addEventListener('click', () => toggleTransferPanel()); +settingsButton.addEventListener('click', () => toggleSettingsPanel()); window.addEventListener('error', (event) => { recordDebug('window.error', { message: event.message, @@ -58,7 +61,7 @@ async function init() { if (!state.config.roots?.length) { throw new Error('No U-Navigator roots configured'); } - statusText.textContent = `${state.config.roots.length} Root, ${state.config.readOnly ? 'Read-only' : 'Schreibzugriff aktiv'} · ${APP_VERSION}`; + updateStatusText(); openExplorer(state.config.roots[0].path); } catch (error) { statusText.textContent = error.message; @@ -143,6 +146,7 @@ function render() { workspace.appendChild(renderContextMenu()); } renderTransferPanel(); + renderSettingsPanel(); } function renderWindow(win) { @@ -213,11 +217,11 @@ function renderExplorer(body, win) {
- - + +
- - + +
@@ -378,6 +382,15 @@ function queueMarkup() {
`).join('') : '

Keine Transfers.

'; + const debugSection = state.config?.debug ? debugMarkup() : ''; + + return ` +
${jobMarkup}
+ ${debugSection} + `; +} + +function debugMarkup() { const debugMarkup = state.debug.length ? state.debug.slice(-12).reverse().map((item) => `
#${item.id} ${escapeHtml(item.label)} @@ -387,7 +400,6 @@ function queueMarkup() { `).join('') : '

Noch keine Debug-Einträge.

'; return ` -
${jobMarkup}
Debug @@ -495,6 +507,100 @@ function renderTransferPanel() { transferButton.setAttribute('aria-expanded', 'true'); } +function toggleSettingsPanel() { + state.settingsPanelVisible = !state.settingsPanelVisible; + renderSettingsPanel(); +} + +function renderSettingsPanel() { + const existing = appShell.querySelector('.settings-panel'); + if (!state.settingsPanelVisible) { + existing?.remove(); + settingsButton.classList.remove('active'); + settingsButton.setAttribute('aria-expanded', 'false'); + return; + } + + const panel = existing || document.createElement('aside'); + panel.className = 'settings-panel'; + panel.setAttribute('aria-label', 'Einstellungen'); + panel.innerHTML = ` +
+ Einstellungen + +
+
+ + +
+ `; + if (!existing) { + appShell.appendChild(panel); + } + + const buttonRect = settingsButton.getBoundingClientRect(); + const shellRect = appShell.getBoundingClientRect(); + panel.style.right = `${Math.max(16, shellRect.right - buttonRect.right)}px`; + panel.style.top = `${buttonRect.bottom - shellRect.top + 8}px`; + + panel.querySelector('[data-action="close-settings"]').addEventListener('click', () => { + state.settingsPanelVisible = false; + renderSettingsPanel(); + }); + panel.querySelector('[data-setting="debug"]').addEventListener('change', (event) => { + saveSettings({ debug: event.currentTarget.checked }); + }); + panel.querySelector('[data-setting="write"]').addEventListener('change', (event) => { + saveSettings({ readOnly: !event.currentTarget.checked }); + }); + settingsButton.classList.add('active'); + settingsButton.setAttribute('aria-expanded', 'true'); +} + +async function saveSettings(changes) { + const body = new URLSearchParams(); + const readOnly = changes.readOnly ?? state.config.readOnly; + const debug = changes.debug ?? state.config.debug; + body.set('readOnly', readOnly ? '1' : '0'); + body.set('debug', debug ? '1' : '0'); + appendCsrf(body); + try { + state.config = await api(apiUrl('config.php'), { + method: 'POST', + headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }, + body + }); + updateStatusText(); + if (!state.config.debug) { + state.debug = []; + } + render(); + } catch (error) { + showError(error); + } +} + +function updateStatusText() { + if (!state.config) return; + statusText.textContent = `${state.config.roots.length} Root, ${state.config.readOnly ? 'Read-only' : 'Schreibzugriff aktiv'} · Debug ${state.config.debug ? 'aktiv' : 'aus'} · ${APP_VERSION}`; +} + +function isReadOnly() { + return Boolean(state.config?.readOnly); +} + async function loadExplorer(win, targetPath) { win.data.loading = true; win.data.error = null; @@ -539,6 +645,10 @@ async function handleDrop(event, win, targetPath) { } async function createJob(type, source, destination, refreshWindowIds = []) { + if (['move', 'copy'].includes(type) && isReadOnly()) { + showError(new Error('Read-only mode ist aktiv.')); + return null; + } recordDebug('job.create.request', { type, source, destination, refreshWindowIds }); const body = new URLSearchParams(); body.set('source', source); @@ -631,6 +741,10 @@ function setDropEffect(event, effect) { } async function renameEntry(win, entry) { + if (isReadOnly()) { + showError(new Error('Read-only mode ist aktiv.')); + return; + } const nextName = prompt('Neuer Name', entry.name); if (!nextName || nextName === entry.name) { return; @@ -643,6 +757,10 @@ async function renameEntry(win, entry) { } async function promptTransfer(win, entry, type) { + if (isReadOnly()) { + showError(new Error('Read-only mode ist aktiv.')); + return; + } const targetDir = prompt(type === 'copy' ? 'Kopieren nach Ordner' : 'Verschieben nach Ordner', win.data.path); if (!targetDir) { return; @@ -681,9 +799,11 @@ function renderContextMenu() { actions.push(['Öffnen', () => loadExplorer(win, entry.path)]); } actions.push(['Eigenschaften', () => showPropertiesForEntry(win, entry)]); - actions.push(['Umbenennen', () => renameEntry(win, entry)]); - actions.push(['Kopieren nach...', () => promptTransfer(win, entry, 'copy')]); - actions.push(['Verschieben nach...', () => promptTransfer(win, entry, 'move')]); + if (!isReadOnly()) { + actions.push(['Umbenennen', () => renameEntry(win, entry)]); + actions.push(['Kopieren nach...', () => promptTransfer(win, entry, 'copy')]); + actions.push(['Verschieben nach...', () => promptTransfer(win, entry, 'move')]); + } } else { actions.push(['Neu laden', () => loadExplorer(win, win.data.path)]); } @@ -1234,6 +1354,9 @@ function getCsrfToken() { } function recordDebug(label, data = {}) { + if (!state.config?.debug) { + return null; + } const item = { id: state.nextDebugId++, time: new Date().toLocaleTimeString(), diff --git a/server/public/styles.css b/server/public/styles.css index e425c0d..620f78a 100644 --- a/server/public/styles.css +++ b/server/public/styles.css @@ -193,12 +193,12 @@ } .u-nav .pathbar .up-button { - flex: 0 0 38px; + flex: 0 0 32px; font-size: 18px; line-height: 1; } -.u-nav .pathbar > button:not(.icon), +.u-nav .pathbar > button.icon, .u-nav .pathbar .view-toggle { flex: 0 0 auto; } @@ -225,7 +225,7 @@ .u-nav .view-toggle button { border-radius: 0; flex: 0 0 auto; - min-width: 88px; + min-width: 32px; overflow: visible; } @@ -535,6 +535,61 @@ padding: 10px; } +.u-nav .settings-panel { + animation: transfer-slide-down 160ms ease-out both; + background: var(--surface); + border: 1px solid var(--line); + border-radius: 8px; + box-shadow: var(--shadow); + min-width: 320px; + overflow: hidden; + position: absolute; + transform-origin: top right; + width: min(380px, calc(100% - 32px)); + z-index: 10010; +} + +.u-nav .settings-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 .settings-panel-body { + display: grid; + gap: 2px; + padding: 8px; +} + +.u-nav .setting-row { + align-items: center; + border-radius: 6px; + display: grid; + gap: 14px; + grid-template-columns: 1fr auto; + padding: 10px; +} + +.u-nav .setting-row:hover { + background: var(--surface-2); +} + +.u-nav .setting-row small { + color: var(--muted); + display: block; + margin-top: 2px; +} + +.u-nav .setting-row input { + accent-color: var(--accent); + height: 18px; + width: 18px; +} + @keyframes transfer-slide-down { from { opacity: 0; @@ -675,4 +730,11 @@ right: 10px !important; width: auto !important; } + + .u-nav .settings-panel { + left: 10px !important; + min-width: 0; + right: 10px !important; + width: auto !important; + } } diff --git a/u-navigator.plg b/u-navigator.plg index c17474e..d101dd9 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; -9af5add68cb11a97e1c88afae8621497 +145d13dcb4bf35ced2981b0e219cb3a0