From eaafd1bb3801dd243f6303bb6c55ce623d2dce4c Mon Sep 17 00:00:00 2001 From: librelad Date: Sat, 30 May 2026 02:10:09 +0100 Subject: [PATCH] refactor(webui): relocate admin area into features/admin/ + shared extractions - features/admin/: the 10 admin-owned config controllers, the 5 admin pages (overview/system/charts/metric/storage), ssh-page.js, peers-page.js, plus admin.css/ip-whitelist.css/ssh.css (eager). config-manager.js kept last in the load order (it news the sub-managers). - shared/js/: config-shared.js + config-options.js (ConfigShared/ConfigOptions globals consumed cross-feature by backup/apps/tasks). - shared/css/: forms.css + config.css (generic form + config-form primitives borrowed by apps/backup/admin). - Updated all path strings in system-loader.js (config component) and config-manager.js (lazyLoad of admin/ssh/peers controllers); index.html CSS hrefs. No /js/components/{config,admin,ssh,peers}/ refs remain. js/components/ now holds only shared UI (topbar, notifications, eo-modal, update-notifier, mobile-menu, confirmation-dialog). Co-Authored-By: Claude Opus 4.8 Signed-off-by: librelad --- .../admin/admin-overview.js | 0 .../admin/admin-system.js | 0 .../{css => features/admin}/admin.css | 0 .../components => features}/admin/charts.js | 0 .../config => features/admin}/config-core.js | 0 .../config => features/admin}/config-form.js | 0 .../admin}/config-manager.js | 16 ++++++------- .../admin}/config-renderer.js | 0 .../admin}/config-sidebar.js | 0 .../config => features/admin}/config-utils.js | 0 .../admin}/config-validator.js | 0 .../admin}/domain-manager.js | 0 .../admin}/ip-whitelist-manager.js | 0 .../{css => features/admin}/ip-whitelist.css | 0 .../peers => features/admin}/peers-page.js | 0 .../ssh => features/admin}/ssh-page.js | 0 .../frontend/{css => features/admin}/ssh.css | 0 .../admin/system-metric-page.js | 0 .../admin/system-storage-page.js | 0 .../admin}/toggle-manager.js | 0 containers/libreportal/frontend/index.html | 10 ++++---- .../frontend/js/system/system-loader.js | 24 +++++++++---------- .../frontend/{ => shared}/css/config.css | 0 .../frontend/{ => shared}/css/forms.css | 0 .../config => shared/js}/config-options.js | 0 .../config => shared/js}/config-shared.js | 0 26 files changed, 25 insertions(+), 25 deletions(-) rename containers/libreportal/frontend/{js/components => features}/admin/admin-overview.js (100%) rename containers/libreportal/frontend/{js/components => features}/admin/admin-system.js (100%) rename containers/libreportal/frontend/{css => features/admin}/admin.css (100%) rename containers/libreportal/frontend/{js/components => features}/admin/charts.js (100%) rename containers/libreportal/frontend/{js/components/config => features/admin}/config-core.js (100%) rename containers/libreportal/frontend/{js/components/config => features/admin}/config-form.js (100%) rename containers/libreportal/frontend/{js/components/config => features/admin}/config-manager.js (97%) rename containers/libreportal/frontend/{js/components/config => features/admin}/config-renderer.js (100%) rename containers/libreportal/frontend/{js/components/config => features/admin}/config-sidebar.js (100%) rename containers/libreportal/frontend/{js/components/config => features/admin}/config-utils.js (100%) rename containers/libreportal/frontend/{js/components/config => features/admin}/config-validator.js (100%) rename containers/libreportal/frontend/{js/components/config => features/admin}/domain-manager.js (100%) rename containers/libreportal/frontend/{js/components/config => features/admin}/ip-whitelist-manager.js (100%) rename containers/libreportal/frontend/{css => features/admin}/ip-whitelist.css (100%) rename containers/libreportal/frontend/{js/components/peers => features/admin}/peers-page.js (100%) rename containers/libreportal/frontend/{js/components/ssh => features/admin}/ssh-page.js (100%) rename containers/libreportal/frontend/{css => features/admin}/ssh.css (100%) rename containers/libreportal/frontend/{js/components => features}/admin/system-metric-page.js (100%) rename containers/libreportal/frontend/{js/components => features}/admin/system-storage-page.js (100%) rename containers/libreportal/frontend/{js/components/config => features/admin}/toggle-manager.js (100%) rename containers/libreportal/frontend/{ => shared}/css/config.css (100%) rename containers/libreportal/frontend/{ => shared}/css/forms.css (100%) rename containers/libreportal/frontend/{js/components/config => shared/js}/config-options.js (100%) rename containers/libreportal/frontend/{js/components/config => shared/js}/config-shared.js (100%) diff --git a/containers/libreportal/frontend/js/components/admin/admin-overview.js b/containers/libreportal/frontend/features/admin/admin-overview.js similarity index 100% rename from containers/libreportal/frontend/js/components/admin/admin-overview.js rename to containers/libreportal/frontend/features/admin/admin-overview.js diff --git a/containers/libreportal/frontend/js/components/admin/admin-system.js b/containers/libreportal/frontend/features/admin/admin-system.js similarity index 100% rename from containers/libreportal/frontend/js/components/admin/admin-system.js rename to containers/libreportal/frontend/features/admin/admin-system.js diff --git a/containers/libreportal/frontend/css/admin.css b/containers/libreportal/frontend/features/admin/admin.css similarity index 100% rename from containers/libreportal/frontend/css/admin.css rename to containers/libreportal/frontend/features/admin/admin.css diff --git a/containers/libreportal/frontend/js/components/admin/charts.js b/containers/libreportal/frontend/features/admin/charts.js similarity index 100% rename from containers/libreportal/frontend/js/components/admin/charts.js rename to containers/libreportal/frontend/features/admin/charts.js diff --git a/containers/libreportal/frontend/js/components/config/config-core.js b/containers/libreportal/frontend/features/admin/config-core.js similarity index 100% rename from containers/libreportal/frontend/js/components/config/config-core.js rename to containers/libreportal/frontend/features/admin/config-core.js diff --git a/containers/libreportal/frontend/js/components/config/config-form.js b/containers/libreportal/frontend/features/admin/config-form.js similarity index 100% rename from containers/libreportal/frontend/js/components/config/config-form.js rename to containers/libreportal/frontend/features/admin/config-form.js diff --git a/containers/libreportal/frontend/js/components/config/config-manager.js b/containers/libreportal/frontend/features/admin/config-manager.js similarity index 97% rename from containers/libreportal/frontend/js/components/config/config-manager.js rename to containers/libreportal/frontend/features/admin/config-manager.js index 7d0cd8d..c7565d7 100755 --- a/containers/libreportal/frontend/js/components/config/config-manager.js +++ b/containers/libreportal/frontend/features/admin/config-manager.js @@ -44,8 +44,8 @@ if (typeof window.ConfigManager === 'undefined') { try { this.sidebar.populateSidebar(); } catch (e) {} // charts.js is the chart-rendering helper admin-overview pulls in. await Promise.all([ - lazyLoad('/js/components/admin/admin-overview.js'), - lazyLoad('/js/components/admin/charts.js') + lazyLoad('/features/admin/admin-overview.js'), + lazyLoad('/features/admin/charts.js') ]); if (typeof AdminOverview !== 'undefined') { window.adminOverview = new AdminOverview('config-section'); @@ -60,7 +60,7 @@ if (typeof window.ConfigManager === 'undefined') { // a config category — render its own controller into the main pane. if (category === 'ssh-access') { try { this.sidebar.populateSidebar(); } catch (e) {} - await lazyLoad('/js/components/ssh/ssh-page.js'); + await lazyLoad('/features/admin/ssh-page.js'); if (typeof SshPage !== 'undefined') { window.sshPage = new SshPage('config-section'); await window.sshPage.init(); @@ -76,7 +76,7 @@ if (typeof window.ConfigManager === 'undefined') { // we inject its content template, then init PeersPage. if (category === 'peers') { try { this.sidebar.populateSidebar(); } catch (e) {} - await lazyLoad('/js/components/peers/peers-page.js'); + await lazyLoad('/features/admin/peers-page.js'); try { const html = await fetch('/html/peers-content.html').then(r => r.text()); configSection.innerHTML = html; @@ -100,10 +100,10 @@ if (typeof window.ConfigManager === 'undefined') { if (category === 'system') { try { this.sidebar.populateSidebar(); } catch (e) {} await Promise.all([ - lazyLoad('/js/components/admin/charts.js'), - lazyLoad('/js/components/admin/admin-system.js'), - lazyLoad('/js/components/admin/system-metric-page.js'), - lazyLoad('/js/components/admin/system-storage-page.js') + lazyLoad('/features/admin/charts.js'), + lazyLoad('/features/admin/admin-system.js'), + lazyLoad('/features/admin/system-metric-page.js'), + lazyLoad('/features/admin/system-storage-page.js') ]); if (typeof AdminSystem !== 'undefined') { window.adminSystem = new AdminSystem('config-section'); diff --git a/containers/libreportal/frontend/js/components/config/config-renderer.js b/containers/libreportal/frontend/features/admin/config-renderer.js similarity index 100% rename from containers/libreportal/frontend/js/components/config/config-renderer.js rename to containers/libreportal/frontend/features/admin/config-renderer.js diff --git a/containers/libreportal/frontend/js/components/config/config-sidebar.js b/containers/libreportal/frontend/features/admin/config-sidebar.js similarity index 100% rename from containers/libreportal/frontend/js/components/config/config-sidebar.js rename to containers/libreportal/frontend/features/admin/config-sidebar.js diff --git a/containers/libreportal/frontend/js/components/config/config-utils.js b/containers/libreportal/frontend/features/admin/config-utils.js similarity index 100% rename from containers/libreportal/frontend/js/components/config/config-utils.js rename to containers/libreportal/frontend/features/admin/config-utils.js diff --git a/containers/libreportal/frontend/js/components/config/config-validator.js b/containers/libreportal/frontend/features/admin/config-validator.js similarity index 100% rename from containers/libreportal/frontend/js/components/config/config-validator.js rename to containers/libreportal/frontend/features/admin/config-validator.js diff --git a/containers/libreportal/frontend/js/components/config/domain-manager.js b/containers/libreportal/frontend/features/admin/domain-manager.js similarity index 100% rename from containers/libreportal/frontend/js/components/config/domain-manager.js rename to containers/libreportal/frontend/features/admin/domain-manager.js diff --git a/containers/libreportal/frontend/js/components/config/ip-whitelist-manager.js b/containers/libreportal/frontend/features/admin/ip-whitelist-manager.js similarity index 100% rename from containers/libreportal/frontend/js/components/config/ip-whitelist-manager.js rename to containers/libreportal/frontend/features/admin/ip-whitelist-manager.js diff --git a/containers/libreportal/frontend/css/ip-whitelist.css b/containers/libreportal/frontend/features/admin/ip-whitelist.css similarity index 100% rename from containers/libreportal/frontend/css/ip-whitelist.css rename to containers/libreportal/frontend/features/admin/ip-whitelist.css diff --git a/containers/libreportal/frontend/js/components/peers/peers-page.js b/containers/libreportal/frontend/features/admin/peers-page.js similarity index 100% rename from containers/libreportal/frontend/js/components/peers/peers-page.js rename to containers/libreportal/frontend/features/admin/peers-page.js diff --git a/containers/libreportal/frontend/js/components/ssh/ssh-page.js b/containers/libreportal/frontend/features/admin/ssh-page.js similarity index 100% rename from containers/libreportal/frontend/js/components/ssh/ssh-page.js rename to containers/libreportal/frontend/features/admin/ssh-page.js diff --git a/containers/libreportal/frontend/css/ssh.css b/containers/libreportal/frontend/features/admin/ssh.css similarity index 100% rename from containers/libreportal/frontend/css/ssh.css rename to containers/libreportal/frontend/features/admin/ssh.css diff --git a/containers/libreportal/frontend/js/components/admin/system-metric-page.js b/containers/libreportal/frontend/features/admin/system-metric-page.js similarity index 100% rename from containers/libreportal/frontend/js/components/admin/system-metric-page.js rename to containers/libreportal/frontend/features/admin/system-metric-page.js diff --git a/containers/libreportal/frontend/js/components/admin/system-storage-page.js b/containers/libreportal/frontend/features/admin/system-storage-page.js similarity index 100% rename from containers/libreportal/frontend/js/components/admin/system-storage-page.js rename to containers/libreportal/frontend/features/admin/system-storage-page.js diff --git a/containers/libreportal/frontend/js/components/config/toggle-manager.js b/containers/libreportal/frontend/features/admin/toggle-manager.js similarity index 100% rename from containers/libreportal/frontend/js/components/config/toggle-manager.js rename to containers/libreportal/frontend/features/admin/toggle-manager.js diff --git a/containers/libreportal/frontend/index.html b/containers/libreportal/frontend/index.html index c77d890..8684b29 100755 --- a/containers/libreportal/frontend/index.html +++ b/containers/libreportal/frontend/index.html @@ -16,11 +16,11 @@ - + - - + + @@ -31,8 +31,8 @@ - - + + diff --git a/containers/libreportal/frontend/js/system/system-loader.js b/containers/libreportal/frontend/js/system/system-loader.js index abc869a..c618b20 100755 --- a/containers/libreportal/frontend/js/system/system-loader.js +++ b/containers/libreportal/frontend/js/system/system-loader.js @@ -39,18 +39,18 @@ class SystemLoader { global: 'configManager', dependencies: ['data'], scripts: [ - '/js/components/config/config-options.js', - '/js/components/config/config-shared.js', - '/js/components/config/config-validator.js', - '/js/components/config/toggle-manager.js', - '/js/components/config/config-core.js', - '/js/components/config/domain-manager.js', - '/js/components/config/ip-whitelist-manager.js', - '/js/components/config/config-renderer.js', - '/js/components/config/config-sidebar.js', - '/js/components/config/config-form.js', - '/js/components/config/config-utils.js', - '/js/components/config/config-manager.js' + '/shared/js/config-options.js', + '/shared/js/config-shared.js', + '/features/admin/config-validator.js', + '/features/admin/toggle-manager.js', + '/features/admin/config-core.js', + '/features/admin/domain-manager.js', + '/features/admin/ip-whitelist-manager.js', + '/features/admin/config-renderer.js', + '/features/admin/config-sidebar.js', + '/features/admin/config-form.js', + '/features/admin/config-utils.js', + '/features/admin/config-manager.js' ] }); diff --git a/containers/libreportal/frontend/css/config.css b/containers/libreportal/frontend/shared/css/config.css similarity index 100% rename from containers/libreportal/frontend/css/config.css rename to containers/libreportal/frontend/shared/css/config.css diff --git a/containers/libreportal/frontend/css/forms.css b/containers/libreportal/frontend/shared/css/forms.css similarity index 100% rename from containers/libreportal/frontend/css/forms.css rename to containers/libreportal/frontend/shared/css/forms.css diff --git a/containers/libreportal/frontend/js/components/config/config-options.js b/containers/libreportal/frontend/shared/js/config-options.js similarity index 100% rename from containers/libreportal/frontend/js/components/config/config-options.js rename to containers/libreportal/frontend/shared/js/config-options.js diff --git a/containers/libreportal/frontend/js/components/config/config-shared.js b/containers/libreportal/frontend/shared/js/config-shared.js similarity index 100% rename from containers/libreportal/frontend/js/components/config/config-shared.js rename to containers/libreportal/frontend/shared/js/config-shared.js