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 @@
-
+