diff --git a/dist/backupper-0.1.8-x86_64-1.txz.sha256 b/dist/backupper-0.1.8-x86_64-1.txz.sha256 deleted file mode 100644 index 00a3135..0000000 --- a/dist/backupper-0.1.8-x86_64-1.txz.sha256 +++ /dev/null @@ -1 +0,0 @@ -3b3bfce71438a9489a978405ff88fe8c7013f7c90962387ff5e51453d060d6cb backupper-0.1.8-x86_64-1.txz diff --git a/dist/backupper-0.1.8-x86_64-1.txz b/dist/backupper-0.1.9-x86_64-1.txz similarity index 55% rename from dist/backupper-0.1.8-x86_64-1.txz rename to dist/backupper-0.1.9-x86_64-1.txz index 6c2eaf7..8669276 100644 Binary files a/dist/backupper-0.1.8-x86_64-1.txz and b/dist/backupper-0.1.9-x86_64-1.txz differ diff --git a/dist/backupper-0.1.9-x86_64-1.txz.sha256 b/dist/backupper-0.1.9-x86_64-1.txz.sha256 new file mode 100644 index 0000000..c99a49c --- /dev/null +++ b/dist/backupper-0.1.9-x86_64-1.txz.sha256 @@ -0,0 +1 @@ +d4b45947cfbb8a5273eb90ea10cdd307d751d0529411217ecc37ba0dfe5ea211 backupper-0.1.9-x86_64-1.txz diff --git a/dist/backupper.plg b/dist/backupper.plg index 1af2224..baf1d30 100644 --- a/dist/backupper.plg +++ b/dist/backupper.plg @@ -2,13 +2,16 @@ - + - + ]> +### 0.1.9 +- Fix wrapped repository action layout and block initialization of volatile /tmp or /run destinations. + ### 0.1.8 - Force a fresh WebGUI asset after updates, display the installed version, and warn about volatile /tmp or /run repositories. diff --git a/plugin/backupper.plg b/plugin/backupper.plg index 5edd547..c1cff4a 100644 --- a/plugin/backupper.plg +++ b/plugin/backupper.plg @@ -2,13 +2,16 @@ - + ]> +### 0.1.9 +- Fix wrapped repository action layout and block initialization of volatile /tmp or /run destinations. + ### 0.1.8 - Force a fresh WebGUI asset after updates, display the installed version, and warn about volatile /tmp or /run repositories. diff --git a/webgui/Backupper.page b/webgui/Backupper.page index 21bdf60..533b379 100644 --- a/webgui/Backupper.page +++ b/webgui/Backupper.page @@ -9,10 +9,10 @@ Tag="backup restic snapshots restore" - +
-

Backupper 0.1.8

Encrypted Restic backups for Unraid

+

Backupper 0.1.9

Encrypted Restic backups for Unraid

Connecting...
- + diff --git a/webgui/assets/backupper.css b/webgui/assets/backupper.css index fef038f..862cbb0 100644 --- a/webgui/assets/backupper.css +++ b/webgui/assets/backupper.css @@ -60,6 +60,8 @@ #backupper-app .bu-muted { color: var(--bu-muted) !important; opacity: .72; } .bu-toolbar { align-items: center; display: flex; flex-wrap: wrap; gap: 8px; justify-content: space-between; margin-bottom: 14px; } .bu-actions { display: flex; flex-wrap: wrap; gap: 7px; } +.bu-table-actions { align-items: flex-start; min-width: 310px; } +.bu-table-actions .bu-button { flex: 0 0 auto; } .bu-warning { color: var(--bu-bad) !important; display: block; font-size: 13px; font-weight: 700; margin-top: 5px; } #backupper-app .bu-button { @@ -166,5 +168,6 @@ .bu-form { grid-template-columns: 1fr; } .bu-header { align-items: flex-start; flex-direction: column; gap: 12px; } .bu-table { display: block; overflow-x: auto; } + .bu-table-actions { min-width: 240px; } #bu-tooltip { font-size: 13px; } } diff --git a/webgui/assets/backupper.js b/webgui/assets/backupper.js index a15f6b7..2d59715 100644 --- a/webgui/assets/backupper.js +++ b/webgui/assets/backupper.js @@ -103,6 +103,8 @@ }; const status = (value) => `${esc(value)}`; const button = (label, action, kind = '') => ``; + const disabledButton = (label, help) => ``; + const actionGroup = (buttons) => `
${buttons}
`; function setTooltip(element, text) { if (!element || !text || element.dataset.tooltip) return; @@ -205,7 +207,7 @@ } function renderJobs() { - const rows = state.config.jobs.map(j => `${esc(j.name)}
${esc(j.id)}${esc(j.type)}${esc(repoName(j.repositoryId))}${esc(j.schedule?.cron || 'manual')}${j.enabled ? status('success') : status('cancelled')}${button('Run',`run-job:${j.id}`,'primary')}${button('Edit',`edit-job:${j.id}`)}${button('Duplicate',`duplicate-job:${j.id}`)}${button('Delete',`delete-job:${j.id}`,'danger')}`).join(''); + const rows = state.config.jobs.map(j => `${esc(j.name)}
${esc(j.id)}${esc(j.type)}${esc(repoName(j.repositoryId))}${esc(j.schedule?.cron || 'manual')}${j.enabled ? status('success') : status('cancelled')}${actionGroup(button('Run',`run-job:${j.id}`,'primary')+button('Edit',`edit-job:${j.id}`)+button('Duplicate',`duplicate-job:${j.id}`)+button('Delete',`delete-job:${j.id}`,'danger'))}`).join(''); return `

Backup Jobs

One isolated Restic repository per job.
${button('New job','new-job','primary')}
${rows ? `${rows}
JobTypeRepositoryScheduleEnabledActions
` : '
No backup jobs configured.
'}
`; } @@ -228,7 +230,11 @@ } function renderRepositories() { - const rows = state.config.repositories.map(r => `${esc(r.name)}
${esc(r.id)}${esc(r.type)}${esc(r.location)}${volatileLocation(r)?'Volatile path: data is lost after reboot. Use /mnt/user/...':''}${r.mount?.managed?'Managed':'Direct / external'}${button('Initialize',`init-repo:${r.id}`,'primary')}${button('Test',`test-repo:${r.id}`)}${button('Snapshots',`repo-snapshots:${r.id}`)}${button('Check',`maint:check:${r.id}`)}${button('Prune',`maint:prune:${r.id}`)}${button('Edit',`edit-repo:${r.id}`)}${button('Delete',`delete-repo:${r.id}`,'danger')}`).join(''); + const rows = state.config.repositories.map(r => { + const initialize = volatileLocation(r) ? disabledButton('Initialize','Dieses Ziel liegt im flüchtigen RAM. Zuerst über Edit einen dauerhaften Pfad wie /mnt/user/Backups/HomeServer eintragen.') : button('Initialize',`init-repo:${r.id}`,'primary'); + const actions = initialize+button('Test',`test-repo:${r.id}`)+button('Snapshots',`repo-snapshots:${r.id}`)+button('Check',`maint:check:${r.id}`)+button('Prune',`maint:prune:${r.id}`)+button('Edit',`edit-repo:${r.id}`)+button('Delete',`delete-repo:${r.id}`,'danger'); + return `${esc(r.name)}
${esc(r.id)}${esc(r.type)}${esc(r.location)}${volatileLocation(r)?'Volatile path: data is lost after reboot. Use /mnt/user/...':''}${r.mount?.managed?'Managed':'Direct / external'}${actionGroup(actions)}`; + }).join(''); return `

Repositories

Local, SMB, NFS and SFTP destinations.
${button('New repository','new-repo','primary')}
${rows ? `${rows}
NameTypeLocationMountActions
` : '
No repositories configured.
'}
`; }