From 939f0223fb418579c9dedee6df74c8e2b9b3a490 Mon Sep 17 00:00:00 2001 From: librelad Date: Sat, 30 May 2026 19:18:43 +0100 Subject: [PATCH] refactor(webui): separate backup component into sub-system folders MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit backup/ held 15 loose .js plus css/html at the component root. Split into per-tab sub-systems mirroring the admin/apps layout: backup/core/{js,css,html}/ schema, base BackupPage, fetch-client, cron-schedule, backup.css, backup-content.html backup/dashboard/js/ backup-dashboard backup/snapshots/js/ backup-snapshots, backup-snapshot-actions backup/locations/js/ backup-locations, backup-location-fields, backup-location-modal, backup-ssh-key backup/migrate/js/ backup-migrate backup/configuration/js/ backup-configuration, backup-retention-presets, backup-engine-details Updated the scripts[] array + loadFragment in index.js, the backup.css href in index.html, and the handleBackup() fallback paths in spa.js. No behaviour change — files moved verbatim (prototype-augment clusters), all 17 referenced paths verified to resolve, node --check clean. Signed-off-by: librelad --- .../js/backup-configuration.js | 0 .../js/backup-engine-details.js | 0 .../js/backup-retention-presets.js | 0 .../backup/{ => core}/css/backup.css | 0 .../{ => core}/html/backup-content.html | 0 .../{ => core}/js/backup-cron-schedule.js | 0 .../{ => core}/js/backup-fetch-client.js | 0 .../backup/{ => core}/js/backup-page.js | 0 .../backup/{ => core}/js/backup-schema.js | 0 .../{ => dashboard}/js/backup-dashboard.js | 0 .../frontend/components/backup/index.js | 35 ++++++++++--------- .../js/backup-location-fields.js | 0 .../js/backup-location-modal.js | 0 .../{ => locations}/js/backup-locations.js | 0 .../{ => locations}/js/backup-ssh-key.js | 0 .../backup/{ => migrate}/js/backup-migrate.js | 0 .../js/backup-snapshot-actions.js | 0 .../{ => snapshots}/js/backup-snapshots.js | 0 .../libreportal/frontend/core/kernel/spa.js | 4 +-- containers/libreportal/frontend/index.html | 2 +- 20 files changed, 21 insertions(+), 20 deletions(-) rename containers/libreportal/frontend/components/backup/{ => configuration}/js/backup-configuration.js (100%) rename containers/libreportal/frontend/components/backup/{ => configuration}/js/backup-engine-details.js (100%) rename containers/libreportal/frontend/components/backup/{ => configuration}/js/backup-retention-presets.js (100%) rename containers/libreportal/frontend/components/backup/{ => core}/css/backup.css (100%) rename containers/libreportal/frontend/components/backup/{ => core}/html/backup-content.html (100%) rename containers/libreportal/frontend/components/backup/{ => core}/js/backup-cron-schedule.js (100%) rename containers/libreportal/frontend/components/backup/{ => core}/js/backup-fetch-client.js (100%) rename containers/libreportal/frontend/components/backup/{ => core}/js/backup-page.js (100%) rename containers/libreportal/frontend/components/backup/{ => core}/js/backup-schema.js (100%) rename containers/libreportal/frontend/components/backup/{ => dashboard}/js/backup-dashboard.js (100%) rename containers/libreportal/frontend/components/backup/{ => locations}/js/backup-location-fields.js (100%) rename containers/libreportal/frontend/components/backup/{ => locations}/js/backup-location-modal.js (100%) rename containers/libreportal/frontend/components/backup/{ => locations}/js/backup-locations.js (100%) rename containers/libreportal/frontend/components/backup/{ => locations}/js/backup-ssh-key.js (100%) rename containers/libreportal/frontend/components/backup/{ => migrate}/js/backup-migrate.js (100%) rename containers/libreportal/frontend/components/backup/{ => snapshots}/js/backup-snapshot-actions.js (100%) rename containers/libreportal/frontend/components/backup/{ => snapshots}/js/backup-snapshots.js (100%) diff --git a/containers/libreportal/frontend/components/backup/js/backup-configuration.js b/containers/libreportal/frontend/components/backup/configuration/js/backup-configuration.js similarity index 100% rename from containers/libreportal/frontend/components/backup/js/backup-configuration.js rename to containers/libreportal/frontend/components/backup/configuration/js/backup-configuration.js diff --git a/containers/libreportal/frontend/components/backup/js/backup-engine-details.js b/containers/libreportal/frontend/components/backup/configuration/js/backup-engine-details.js similarity index 100% rename from containers/libreportal/frontend/components/backup/js/backup-engine-details.js rename to containers/libreportal/frontend/components/backup/configuration/js/backup-engine-details.js diff --git a/containers/libreportal/frontend/components/backup/js/backup-retention-presets.js b/containers/libreportal/frontend/components/backup/configuration/js/backup-retention-presets.js similarity index 100% rename from containers/libreportal/frontend/components/backup/js/backup-retention-presets.js rename to containers/libreportal/frontend/components/backup/configuration/js/backup-retention-presets.js diff --git a/containers/libreportal/frontend/components/backup/css/backup.css b/containers/libreportal/frontend/components/backup/core/css/backup.css similarity index 100% rename from containers/libreportal/frontend/components/backup/css/backup.css rename to containers/libreportal/frontend/components/backup/core/css/backup.css diff --git a/containers/libreportal/frontend/components/backup/html/backup-content.html b/containers/libreportal/frontend/components/backup/core/html/backup-content.html similarity index 100% rename from containers/libreportal/frontend/components/backup/html/backup-content.html rename to containers/libreportal/frontend/components/backup/core/html/backup-content.html diff --git a/containers/libreportal/frontend/components/backup/js/backup-cron-schedule.js b/containers/libreportal/frontend/components/backup/core/js/backup-cron-schedule.js similarity index 100% rename from containers/libreportal/frontend/components/backup/js/backup-cron-schedule.js rename to containers/libreportal/frontend/components/backup/core/js/backup-cron-schedule.js diff --git a/containers/libreportal/frontend/components/backup/js/backup-fetch-client.js b/containers/libreportal/frontend/components/backup/core/js/backup-fetch-client.js similarity index 100% rename from containers/libreportal/frontend/components/backup/js/backup-fetch-client.js rename to containers/libreportal/frontend/components/backup/core/js/backup-fetch-client.js diff --git a/containers/libreportal/frontend/components/backup/js/backup-page.js b/containers/libreportal/frontend/components/backup/core/js/backup-page.js similarity index 100% rename from containers/libreportal/frontend/components/backup/js/backup-page.js rename to containers/libreportal/frontend/components/backup/core/js/backup-page.js diff --git a/containers/libreportal/frontend/components/backup/js/backup-schema.js b/containers/libreportal/frontend/components/backup/core/js/backup-schema.js similarity index 100% rename from containers/libreportal/frontend/components/backup/js/backup-schema.js rename to containers/libreportal/frontend/components/backup/core/js/backup-schema.js diff --git a/containers/libreportal/frontend/components/backup/js/backup-dashboard.js b/containers/libreportal/frontend/components/backup/dashboard/js/backup-dashboard.js similarity index 100% rename from containers/libreportal/frontend/components/backup/js/backup-dashboard.js rename to containers/libreportal/frontend/components/backup/dashboard/js/backup-dashboard.js diff --git a/containers/libreportal/frontend/components/backup/index.js b/containers/libreportal/frontend/components/backup/index.js index 891b703..dcc0a50 100644 --- a/containers/libreportal/frontend/components/backup/index.js +++ b/containers/libreportal/frontend/components/backup/index.js @@ -13,29 +13,30 @@ LP.features.register({ id: 'backup', routes: ['/backup', '/backup*'], // Controllers the feature needs; lazy-loaded on first mount (idempotent). + // Controllers, organised by sub-system (tabs). core/ first: schema + base + // class + the shared data/cron, then each tab's prototype-augment clusters. scripts: [ - '/components/backup/js/backup-schema.js', - '/components/backup/js/backup-page.js', // base: class + constructor + init/switchTab/render - // prototype-augment clusters (load after the base, order among them is free): - '/components/backup/js/backup-fetch-client.js', - '/components/backup/js/backup-dashboard.js', - '/components/backup/js/backup-snapshots.js', - '/components/backup/js/backup-locations.js', - '/components/backup/js/backup-location-fields.js', - '/components/backup/js/backup-ssh-key.js', - '/components/backup/js/backup-retention-presets.js', - '/components/backup/js/backup-configuration.js', - '/components/backup/js/backup-engine-details.js', - '/components/backup/js/backup-location-modal.js', - '/components/backup/js/backup-snapshot-actions.js', - '/components/backup/js/backup-migrate.js', - '/components/backup/js/backup-cron-schedule.js', + '/components/backup/core/js/backup-schema.js', + '/components/backup/core/js/backup-page.js', // base: class + constructor + init/switchTab/render + '/components/backup/core/js/backup-fetch-client.js', + '/components/backup/core/js/backup-cron-schedule.js', + '/components/backup/dashboard/js/backup-dashboard.js', + '/components/backup/snapshots/js/backup-snapshots.js', + '/components/backup/snapshots/js/backup-snapshot-actions.js', + '/components/backup/locations/js/backup-locations.js', + '/components/backup/locations/js/backup-location-fields.js', + '/components/backup/locations/js/backup-location-modal.js', + '/components/backup/locations/js/backup-ssh-key.js', + '/components/backup/migrate/js/backup-migrate.js', + '/components/backup/configuration/js/backup-configuration.js', + '/components/backup/configuration/js/backup-retention-presets.js', + '/components/backup/configuration/js/backup-engine-details.js', '/core/lib/backup-app-card.js', ], async mount(ctx) { await ctx.loadScripts(this.scripts); - const html = await ctx.loadFragment('/components/backup/html/backup-content.html'); + const html = await ctx.loadFragment('/components/backup/core/html/backup-content.html'); ctx.setContent(html, 'Backups'); if (typeof BackupPage === 'undefined') { throw new Error('BackupPage controller failed to load'); diff --git a/containers/libreportal/frontend/components/backup/js/backup-location-fields.js b/containers/libreportal/frontend/components/backup/locations/js/backup-location-fields.js similarity index 100% rename from containers/libreportal/frontend/components/backup/js/backup-location-fields.js rename to containers/libreportal/frontend/components/backup/locations/js/backup-location-fields.js diff --git a/containers/libreportal/frontend/components/backup/js/backup-location-modal.js b/containers/libreportal/frontend/components/backup/locations/js/backup-location-modal.js similarity index 100% rename from containers/libreportal/frontend/components/backup/js/backup-location-modal.js rename to containers/libreportal/frontend/components/backup/locations/js/backup-location-modal.js diff --git a/containers/libreportal/frontend/components/backup/js/backup-locations.js b/containers/libreportal/frontend/components/backup/locations/js/backup-locations.js similarity index 100% rename from containers/libreportal/frontend/components/backup/js/backup-locations.js rename to containers/libreportal/frontend/components/backup/locations/js/backup-locations.js diff --git a/containers/libreportal/frontend/components/backup/js/backup-ssh-key.js b/containers/libreportal/frontend/components/backup/locations/js/backup-ssh-key.js similarity index 100% rename from containers/libreportal/frontend/components/backup/js/backup-ssh-key.js rename to containers/libreportal/frontend/components/backup/locations/js/backup-ssh-key.js diff --git a/containers/libreportal/frontend/components/backup/js/backup-migrate.js b/containers/libreportal/frontend/components/backup/migrate/js/backup-migrate.js similarity index 100% rename from containers/libreportal/frontend/components/backup/js/backup-migrate.js rename to containers/libreportal/frontend/components/backup/migrate/js/backup-migrate.js diff --git a/containers/libreportal/frontend/components/backup/js/backup-snapshot-actions.js b/containers/libreportal/frontend/components/backup/snapshots/js/backup-snapshot-actions.js similarity index 100% rename from containers/libreportal/frontend/components/backup/js/backup-snapshot-actions.js rename to containers/libreportal/frontend/components/backup/snapshots/js/backup-snapshot-actions.js diff --git a/containers/libreportal/frontend/components/backup/js/backup-snapshots.js b/containers/libreportal/frontend/components/backup/snapshots/js/backup-snapshots.js similarity index 100% rename from containers/libreportal/frontend/components/backup/js/backup-snapshots.js rename to containers/libreportal/frontend/components/backup/snapshots/js/backup-snapshots.js diff --git a/containers/libreportal/frontend/core/kernel/spa.js b/containers/libreportal/frontend/core/kernel/spa.js index b1a8ca0..a79d524 100755 --- a/containers/libreportal/frontend/core/kernel/spa.js +++ b/containers/libreportal/frontend/core/kernel/spa.js @@ -370,10 +370,10 @@ class LibrePortalSPAClean { // backup-page.js + backup-app-card.js are loaded on first navigation. // loadScript is idempotent — subsequent /backup navigations are no-ops. await Promise.all([ - this.loadScript('/components/backup/js/backup-page.js'), + this.loadScript('/components/backup/core/js/backup-page.js'), this.loadScript('/core/lib/backup-app-card.js') ]); - const html = await this.fetchContent('/components/backup/html/backup-content.html'); + const html = await this.fetchContent('/components/backup/core/html/backup-content.html'); this.loadContent(html, 'Backups'); if (typeof BackupPage !== 'undefined') { window.backupPage = new BackupPage(); diff --git a/containers/libreportal/frontend/index.html b/containers/libreportal/frontend/index.html index 0dda67a..7d7b268 100755 --- a/containers/libreportal/frontend/index.html +++ b/containers/libreportal/frontend/index.html @@ -18,7 +18,7 @@ - +