diff --git a/dist/urbm-2026.06.15.r002-x86_64-1.txz.sha256 b/dist/urbm-2026.06.15.r002-x86_64-1.txz.sha256 deleted file mode 100644 index d371553..0000000 --- a/dist/urbm-2026.06.15.r002-x86_64-1.txz.sha256 +++ /dev/null @@ -1 +0,0 @@ -6dad60f99de38355bfe32185dc0437f208ac69c6f09f02c2965390a873347d82 urbm-2026.06.15.r002-x86_64-1.txz diff --git a/dist/urbm-2026.06.15.r002-x86_64-1.txz b/dist/urbm-2026.06.15.r003-x86_64-1.txz similarity index 56% rename from dist/urbm-2026.06.15.r002-x86_64-1.txz rename to dist/urbm-2026.06.15.r003-x86_64-1.txz index 087c0d5..6862e51 100644 Binary files a/dist/urbm-2026.06.15.r002-x86_64-1.txz and b/dist/urbm-2026.06.15.r003-x86_64-1.txz differ diff --git a/dist/urbm-2026.06.15.r003-x86_64-1.txz.sha256 b/dist/urbm-2026.06.15.r003-x86_64-1.txz.sha256 new file mode 100644 index 0000000..0cbc1a7 --- /dev/null +++ b/dist/urbm-2026.06.15.r003-x86_64-1.txz.sha256 @@ -0,0 +1 @@ +87517e9e5e8d7b255576173f55c9092551c161e84ea2a95c0301ca06c5c5b519 urbm-2026.06.15.r003-x86_64-1.txz diff --git a/dist/urbm.plg b/dist/urbm.plg index aed3ecb..acacbb8 100644 --- a/dist/urbm.plg +++ b/dist/urbm.plg @@ -2,13 +2,17 @@ - + - + ]> +### 2026.06.15.r003 +- Keep activity tables inside their cards by wrapping long messages, paths, and job IDs and removing oversized empty action columns. +- Add controlled horizontal scrolling for activity tables on narrow displays. + ### 2026.06.15.r002 - Add a confirmed repository unlock action that invokes Restic's safe stale-lock cleanup without `--remove-all`. diff --git a/plugin/urbm.plg b/plugin/urbm.plg index 578a0f5..6ff637c 100644 --- a/plugin/urbm.plg +++ b/plugin/urbm.plg @@ -2,13 +2,17 @@ - + ]> +### 2026.06.15.r003 +- Keep activity tables inside their cards by wrapping long messages, paths, and job IDs and removing oversized empty action columns. +- Add controlled horizontal scrolling for activity tables on narrow displays. + ### 2026.06.15.r002 - Add a confirmed repository unlock action that invokes Restic's safe stale-lock cleanup without `--remove-all`. diff --git a/webgui/URBM.page b/webgui/URBM.page index 4562485..3641df1 100644 --- a/webgui/URBM.page +++ b/webgui/URBM.page @@ -9,12 +9,12 @@ Tag="URBM Unraid Restic Backup Manager backup snapshots restore" - +
- -

URBM 2026.06.15.r002

Restic Backup Manager für Unraid

+ +

URBM 2026.06.15.r003

Restic Backup Manager für Unraid

Verbindung wird hergestellt...
@@ -32,4 +32,4 @@ $pluginRoot = '/plugins/urbm';
- + diff --git a/webgui/assets/urbm.css b/webgui/assets/urbm.css index d677cb0..2938e3b 100644 --- a/webgui/assets/urbm.css +++ b/webgui/assets/urbm.css @@ -97,13 +97,13 @@ #urbm-app .bu-weekdays input:checked + span { background: var(--bu-accent) !important; border-color: var(--bu-accent) !important; color: #fff !important; } .bu-custom-cron { margin-top: 14px; } .bu-event-options { display: flex; flex-wrap: wrap; gap: 10px; } -.bu-progress-wrap { min-width: 280px; } +.bu-progress-wrap { min-width: 0; width: 100%; } .bu-progress-label { align-items: center; display: flex; font-size: 12px; gap: 8px; justify-content: space-between; margin-bottom: 5px; } -.bu-progress-label span { color: var(--bu-muted); } +.bu-progress-label span { color: var(--bu-muted); overflow-wrap: anywhere; text-align: right; } .bu-progress { background: var(--bu-panel-alt); border: 1px solid var(--bu-border); border-radius: 999px; height: 12px; overflow: hidden; } .bu-progress span { background: var(--bu-accent); display: block; height: 100%; min-width: 0; transition: width .35s ease; } .bu-progress.indeterminate span { animation: bu-progress-scan 1.2s ease-in-out infinite alternate; } -.bu-current-file { color: var(--bu-muted); font-size: 12px; margin-top: 5px; max-width: 440px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } +.bu-current-file { color: var(--bu-muted); font-size: 12px; margin-top: 5px; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .bu-log-row td { border-top: 0 !important; padding-top: 0 !important; } .bu-live-log { background: #11161a; border: 1px solid var(--bu-border); border-radius: 6px; color: #e8edf1; margin: 2px 0 8px; padding: 9px 12px; } .bu-live-log summary { cursor: pointer; font-weight: 700; } @@ -141,6 +141,17 @@ .bu-table { border-collapse: collapse; color: var(--bu-text); width: 100%; } .bu-table th, .bu-table td { border-bottom: 1px solid var(--bu-border); color: var(--bu-text); padding: 12px 8px; text-align: left; vertical-align: top; } .bu-table th { color: var(--bu-text); font-size: 13px; font-weight: 700; letter-spacing: .03em; opacity: .76; text-transform: uppercase; } +.bu-table-scroll { max-width: 100%; overflow-x: auto; } +.bu-runs-table { table-layout: fixed; } +.bu-runs-table .bu-run-task { width: 18%; } +.bu-runs-table .bu-run-status { width: 8%; } +.bu-runs-table .bu-run-created { width: 11%; } +.bu-runs-table .bu-run-progress { width: 27%; } +.bu-runs-table .bu-run-message { width: 30%; } +.bu-runs-table .bu-run-actions { width: 6%; } +.bu-runs-table th, .bu-runs-table td { min-width: 0; overflow-wrap: anywhere; word-break: break-word; } +.bu-runs-table .bu-run-message-cell { line-height: 1.45; white-space: normal; } +.bu-runs-table .bu-table-actions { min-width: 0; } .bu-status { border: 1px solid currentColor; border-radius: 999px; display: inline-block; font-size: 12px; font-weight: 700; padding: 3px 8px; text-transform: uppercase; } .bu-status.success { background: rgba(8,122,85,.10); color: var(--bu-good); } .bu-status.failed, .bu-status.cancelled { background: rgba(180,35,47,.10); color: var(--bu-bad); } diff --git a/webgui/assets/urbm.js b/webgui/assets/urbm.js index cc46671..23bcdfe 100644 --- a/webgui/assets/urbm.js +++ b/webgui/assets/urbm.js @@ -513,7 +513,7 @@ function runsTable(runs) { if(!runs.length) return '
Keine Aktivitäten vorhanden.
'; const showLiveLog=state.config?.settings?.showLiveLog===true; - return `${runs.map(r=>{const controls=r.status==='running'?button('Pause',`pause-run:${r.id}`)+button('Abbrechen',`cancel-run:${r.id}`,'danger'):r.status==='paused'?button('Fortsetzen',`resume-run:${r.id}`,'primary')+button('Abbrechen',`cancel-run:${r.id}`,'danger'):r.status==='queued'?button('Abbrechen',`cancel-run:${r.id}`,'danger'):'';return `${showLiveLog&&(r.liveLog||[]).length?``:''}`;}).join('')}
AufgabeStatusErstelltFortschrittMeldung
${esc(taskLabels[r.taskType]||r.taskType)} ${esc(r.jobId||'')}${status(r.status)}${esc(new Date(r.createdAt).toLocaleString())}${progressView(r)}${esc(displayMessage(r.message))}${actionGroup(controls)}
${liveLogView(r)}
`; + return `
${runs.map(r=>{const controls=r.status==='running'?button('Pause',`pause-run:${r.id}`)+button('Abbrechen',`cancel-run:${r.id}`,'danger'):r.status==='paused'?button('Fortsetzen',`resume-run:${r.id}`,'primary')+button('Abbrechen',`cancel-run:${r.id}`,'danger'):r.status==='queued'?button('Abbrechen',`cancel-run:${r.id}`,'danger'):'';return `${showLiveLog&&(r.liveLog||[]).length?``:''}`;}).join('')}
AufgabeStatusErstelltFortschrittMeldung
${esc(taskLabels[r.taskType]||r.taskType)} ${esc(r.jobId||'')}${status(r.status)}${esc(new Date(r.createdAt).toLocaleString())}${progressView(r)}${esc(displayMessage(r.message))}${controls?actionGroup(controls):''}
${liveLogView(r)}
`; } function renderSettings() {