From 5b929a9ee8e8baee6ca771dabe7250e8f201a1c4 Mon Sep 17 00:00:00 2001 From: Michael Roll Date: Sat, 12 Sep 2026 11:47:07 +0200 Subject: [PATCH] feat: sortierbare Spalten in der Detailansicht MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Klick auf die Tabellen-Header (Name, Typ, Größe, Datum) sortiert die Dateiliste pro Fenster; zweiter Klick wechselt die Richtung. Ordner bleiben stets oben, Natural Sort für Dateinamen. - app.js: sortEntries(), sortierbare th-Header mit ▲/▼, Klick-Handler - styles.css: Header-Hover, hervorgehobene aktive Spalte - Build auf 2026.09.12.r001 (Version + MD5 im .plg) --- build-plugin.sh | 2 +- packages/u-navigator-2026.09.12.r001.tgz | Bin 0 -> 39926 bytes server/public/app.js | 48 ++++++++++++++++++++--- server/public/styles.css | 15 +++++++ u-navigator.plg | 4 +- 5 files changed, 61 insertions(+), 8 deletions(-) create mode 100644 packages/u-navigator-2026.09.12.r001.tgz diff --git a/build-plugin.sh b/build-plugin.sh index d83fb4a..b7d6773 100755 --- a/build-plugin.sh +++ b/build-plugin.sh @@ -5,7 +5,7 @@ set -eu export COPYFILE_DISABLE=1 PLUGIN="u-navigator" -VERSION="2026.07.14.r017" +VERSION="2026.09.12.r001" PKG_DIR="packages" WORK_DIR=".plugin-build" PKG_NAME="${PLUGIN}-${VERSION}.tgz" diff --git a/packages/u-navigator-2026.09.12.r001.tgz b/packages/u-navigator-2026.09.12.r001.tgz new file mode 100644 index 0000000000000000000000000000000000000000..847144f7c991e2fcee6fc8a2f3a9650968e4d357 GIT binary patch literal 39926 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
${data.error ? `

${escapeHtml(data.error)}

` : ''} - ${data.loading ? '

Lade...

' : renderFileEntries(data.entries || [], data.view || 'list', selectedPathSet(win))} + ${data.loading ? '

Lade...

' : renderFileEntries(data.entries || [], data.view || 'list', selectedPathSet(win), data.sort || { key: 'name', dir: 1 })}
@@ -365,6 +366,14 @@ function renderExplorer(body, win) { }); body.querySelector('[data-action="view-list"]').addEventListener('click', () => setExplorerView(win, 'list')); body.querySelector('[data-action="view-icons"]').addEventListener('click', () => setExplorerView(win, 'icons')); + for (const th of body.querySelectorAll('.file-table th[data-sort-key]')) { + th.addEventListener('click', () => { + const key = th.dataset.sortKey; + const current = data.sort || { key: 'name', dir: 1 }; + data.sort = current.key === key ? { key, dir: -current.dir } : { key, dir: 1 }; + render(); + }); + } body.querySelector('[data-action="upload-files"]').addEventListener('click', () => body.querySelector('[data-upload="files"]').click()); body.querySelector('[data-action="upload-folder"]').addEventListener('click', () => body.querySelector('[data-upload="folder"]').click()); body.querySelector('[data-action="delete-selected"]').addEventListener('click', () => deleteEntries(win)); @@ -562,14 +571,37 @@ function startTreeResize(event, win, body) { handle.addEventListener('pointercancel', up); } -function renderFileEntries(entries, view, selectedPaths = new Set()) { +function sortEntries(entries, sort) { + const key = sort?.key || 'name'; + const dir = sort?.dir === -1 ? -1 : 1; + const typeOrder = { directory: 0, file: 1, symlink: 2, other: 3 }; + const compareValue = (entry) => { + if (key === 'size') return entry.type === 'file' ? (entry.size || 0) : -1; + if (key === 'modifiedAt') return Date.parse(entry.modifiedAt) || 0; + if (key === 'type') return typeOrder[entry.type] ?? 4; + return entry.name || ''; + }; + const compareName = (a, b) => (a.name || '').localeCompare(b.name || undefined, undefined, { numeric: true, sensitivity: 'base' }); + return [...entries].sort((a, b) => { + // Ordner immer zuerst, dann Dateien, dann Verknüpfungen/sonstige + if (a.type !== b.type) return (typeOrder[a.type] ?? 4) - (typeOrder[b.type] ?? 4); + if (key === 'name') return dir * compareName(a, b); + const valueA = compareValue(a); + const valueB = compareValue(b); + if (valueA !== valueB) return dir * (valueA < valueB ? -1 : 1); + return compareName(a, b); + }); +} + +function renderFileEntries(entries, view, selectedPaths = new Set(), sort = { key: 'name', dir: 1 }) { if (!entries.length) { return '

Dieser Ordner ist leer. Dateien können hier abgelegt werden.

'; } - return view === 'icons' ? renderFileIcons(entries, selectedPaths) : renderFileTable(entries, selectedPaths); + const sorted = sortEntries(entries, sort); + return view === 'icons' ? renderFileIcons(sorted, selectedPaths) : renderFileTable(sorted, selectedPaths, sort); } -function renderFileTable(entries, selectedPaths) { +function renderFileTable(entries, selectedPaths, sort = { key: 'name', dir: 1 }) { const rows = entries.map((entry) => ` ${fileTypeIcon(entry)}${escapeHtml(entry.name)} @@ -579,9 +611,15 @@ function renderFileTable(entries, selectedPaths) { `).join(''); + const header = (key, label) => { + const active = sort.key === key; + const arrow = active ? (sort.dir === 1 ? ' ▲' : ' ▼') : ''; + return `${label}${arrow}`; + }; + return ` - + ${header('name', 'Name')}${header('type', 'Typ')}${header('size', 'Größe')}${header('modifiedAt', 'Geändert')}${rows}
NameTypGrößeGeändert
`; diff --git a/server/public/styles.css b/server/public/styles.css index 3667c9e..7253760 100644 --- a/server/public/styles.css +++ b/server/public/styles.css @@ -573,6 +573,21 @@ color: var(--muted); font-size: 11px; font-weight: 600; + cursor: pointer; + user-select: none; + white-space: nowrap; +} + +.u-nav .file-table th:hover { + color: var(--text); +} + +.u-nav .file-table th.sorted { + color: var(--accent); +} + +.u-nav .file-table th .sort-arrow { + font-size: 9px; } .u-nav .file-row { diff --git a/u-navigator.plg b/u-navigator.plg index e61897b..dbf2c2d 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; -571b9c735dfab01e7d62736bf517dc45 +9cee8533bb7f227236fb9ff4963e2d73