From 66aa12d6b686356128d8908994bd17d8fbe37d55 Mon Sep 17 00:00:00 2001 From: CyberMind-FR Date: Fri, 9 Jan 2026 15:46:48 +0100 Subject: [PATCH] feat: Add SecuBox portal header to all System Hub views Add unified SecuBox header navigation to all 10 System Hub views for consistent portal integration when accessed from SecuBox Portal: - overview.js, health.js, services.js, diagnostics.js - logs.js, backup.js, components.js, settings.js - dev-status.js, remote.js Pattern: Wrap view content with secubox-page-wrapper and prepend SbHeader.render() to hide LuCI sidebar when in portal context. Co-Authored-By: Claude Opus 4.5 --- .../luci-static/resources/view/system-hub/backup.js | 8 +++++++- .../luci-static/resources/view/system-hub/components.js | 6 +++++- .../luci-static/resources/view/system-hub/dev-status.js | 6 +++++- .../luci-static/resources/view/system-hub/diagnostics.js | 6 +++++- .../luci-static/resources/view/system-hub/health.js | 6 +++++- .../htdocs/luci-static/resources/view/system-hub/logs.js | 6 +++++- .../luci-static/resources/view/system-hub/overview.js | 6 +++++- .../luci-static/resources/view/system-hub/remote.js | 6 +++++- .../luci-static/resources/view/system-hub/services.js | 6 +++++- .../luci-static/resources/view/system-hub/settings.js | 6 +++++- 10 files changed, 52 insertions(+), 10 deletions(-) diff --git a/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/backup.js b/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/backup.js index 374fa91d..c4e45732 100644 --- a/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/backup.js +++ b/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/backup.js @@ -5,6 +5,7 @@ 'require secubox-theme/theme as Theme'; 'require system-hub/theme-assets as ThemeAssets'; 'require system-hub/nav as HubNav'; +'require secubox-portal/header as SbHeader'; var shLang = (typeof L !== 'undefined' && L.env && L.env.lang) || (document.documentElement && document.documentElement.getAttribute('lang')) || @@ -27,7 +28,7 @@ return view.extend({ }, render: function() { - return E('div', { 'class': 'system-hub-dashboard sh-backup-view' }, [ + var container = E('div', { 'class': 'system-hub-dashboard sh-backup-view' }, [ E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }), ThemeAssets.stylesheet('common.css'), ThemeAssets.stylesheet('dashboard.css'), @@ -42,6 +43,11 @@ return view.extend({ this.renderMaintenanceCard() ]) ]); + + var wrapper = E('div', { 'class': 'secubox-page-wrapper' }); + wrapper.appendChild(SbHeader.render()); + wrapper.appendChild(container); + return wrapper; }, renderHeader: function() { diff --git a/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/components.js b/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/components.js index 12e93eaf..3d2d43e9 100644 --- a/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/components.js +++ b/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/components.js @@ -7,6 +7,7 @@ 'require secubox-theme/theme as Theme'; 'require system-hub/theme-assets as ThemeAssets'; 'require system-hub/nav as HubNav'; +'require secubox-portal/header as SbHeader'; var shLang = (typeof L !== 'undefined' && L.env && L.env.lang) || (document.documentElement && document.documentElement.getAttribute('lang')) || @@ -61,7 +62,10 @@ return view.extend({ }, this)); }, this), 30); - return view; + var wrapper = E('div', { 'class': 'secubox-page-wrapper' }); + wrapper.appendChild(SbHeader.render()); + wrapper.appendChild(view); + return wrapper; }, renderFilterTabs: function() { diff --git a/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/dev-status.js b/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/dev-status.js index f3bb2a77..5b51a1ef 100644 --- a/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/dev-status.js +++ b/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/dev-status.js @@ -4,6 +4,7 @@ 'require system-hub/theme-assets as ThemeAssets'; 'require system-hub/dev-status-widget as DevStatusWidget'; 'require system-hub/nav as HubNav'; +'require secubox-portal/header as SbHeader'; return view.extend({ widget: null, @@ -53,7 +54,10 @@ return view.extend({ widget.render('dev-status-widget'); }); - return container; + var wrapper = E('div', { 'class': 'secubox-page-wrapper' }); + wrapper.appendChild(SbHeader.render()); + wrapper.appendChild(container); + return wrapper; }, renderHeader: function() { diff --git a/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/diagnostics.js b/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/diagnostics.js index 82f4d223..c7dfc89e 100644 --- a/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/diagnostics.js +++ b/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/diagnostics.js @@ -7,6 +7,7 @@ 'require system-hub/api as API'; 'require system-hub/theme-assets as ThemeAssets'; 'require system-hub/nav as HubNav'; +'require secubox-portal/header as SbHeader'; var shLang = (typeof L !== 'undefined' && L.env && L.env.lang) || (document.documentElement && document.documentElement.getAttribute('lang')) || @@ -114,7 +115,10 @@ return view.extend({ ]) ]); - return view; + var wrapper = E('div', { 'class': 'secubox-page-wrapper' }); + wrapper.appendChild(SbHeader.render()); + wrapper.appendChild(view); + return wrapper; }, renderToggle: function(icon, label, desc, enabled, id) { diff --git a/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/health.js b/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/health.js index a30dd6af..c7aaab78 100644 --- a/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/health.js +++ b/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/health.js @@ -7,6 +7,7 @@ 'require secubox-theme/theme as Theme'; 'require system-hub/theme-assets as ThemeAssets'; 'require system-hub/nav as HubNav'; +'require secubox-portal/header as SbHeader'; var shLang = (typeof L !== 'undefined' && L.env && L.env.lang) || (document.documentElement && document.documentElement.getAttribute('lang')) || @@ -44,7 +45,10 @@ return view.extend({ }); }, 30); - return container; + var wrapper = E('div', { 'class': 'secubox-page-wrapper' }); + wrapper.appendChild(SbHeader.render()); + wrapper.appendChild(container); + return wrapper; }, renderHero: function() { diff --git a/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/logs.js b/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/logs.js index 9e53ba45..e9922f9c 100644 --- a/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/logs.js +++ b/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/logs.js @@ -7,6 +7,7 @@ 'require secubox-theme/theme as Theme'; 'require system-hub/theme-assets as ThemeAssets'; 'require system-hub/nav as HubNav'; +'require secubox-portal/header as SbHeader'; var shLang = (typeof L !== 'undefined' && L.env && L.env.lang) || (document.documentElement && document.documentElement.getAttribute('lang')) || @@ -60,7 +61,10 @@ return view.extend({ }); }, this.pollInterval); - return container; + var wrapper = E('div', { 'class': 'secubox-page-wrapper' }); + wrapper.appendChild(SbHeader.render()); + wrapper.appendChild(container); + return wrapper; }, renderHero: function() { diff --git a/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/overview.js b/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/overview.js index 8311c222..30a58356 100644 --- a/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/overview.js +++ b/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/overview.js @@ -7,6 +7,7 @@ 'require secubox-theme/theme as Theme'; 'require system-hub/theme-assets as ThemeAssets'; 'require system-hub/nav as HubNav'; +'require secubox-portal/header as SbHeader'; var shLang = (typeof L !== 'undefined' && L.env && L.env.lang) || (document.documentElement && document.documentElement.getAttribute('lang')) || @@ -52,7 +53,10 @@ return view.extend({ }); }, 30); - return container; + var wrapper = E('div', { 'class': 'secubox-page-wrapper' }); + wrapper.appendChild(SbHeader.render()); + wrapper.appendChild(container); + return wrapper; }, renderPageHeader: function() { diff --git a/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/remote.js b/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/remote.js index c5833c08..a3cdacb9 100644 --- a/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/remote.js +++ b/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/remote.js @@ -6,6 +6,7 @@ 'require system-hub/api as API'; 'require system-hub/theme-assets as ThemeAssets'; 'require system-hub/nav as HubNav'; +'require secubox-portal/header as SbHeader'; var shLang = (typeof L !== 'undefined' && L.env && L.env.lang) || (document.documentElement && document.documentElement.getAttribute('lang')) || @@ -244,7 +245,10 @@ return view.extend({ ]) ]); - return view; + var wrapper = E('div', { 'class': 'secubox-page-wrapper' }); + wrapper.appendChild(SbHeader.render()); + wrapper.appendChild(view); + return wrapper; }, renderToggle: function(icon, label, desc, enabled, id) { diff --git a/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/services.js b/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/services.js index 9cb95d93..cbb3688d 100644 --- a/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/services.js +++ b/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/services.js @@ -7,6 +7,7 @@ 'require secubox-theme/theme as Theme'; 'require system-hub/theme-assets as ThemeAssets'; 'require system-hub/nav as HubNav'; +'require secubox-portal/header as SbHeader'; var shLang = (typeof L !== 'undefined' && L.env && L.env.lang) || (document.documentElement && document.documentElement.getAttribute('lang')) || @@ -46,7 +47,10 @@ return view.extend({ }); }, 30); - return container; + var wrapper = E('div', { 'class': 'secubox-page-wrapper' }); + wrapper.appendChild(SbHeader.render()); + wrapper.appendChild(container); + return wrapper; }, normalizeServices: function(data) { diff --git a/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/settings.js b/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/settings.js index 40dee91a..559370f3 100644 --- a/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/settings.js +++ b/package/secubox/luci-app-system-hub/htdocs/luci-static/resources/view/system-hub/settings.js @@ -5,6 +5,7 @@ 'require secubox-theme/theme as Theme'; 'require system-hub/theme-assets as ThemeAssets'; 'require system-hub/nav as HubNav'; +'require secubox-portal/header as SbHeader'; var shLang = (typeof L !== 'undefined' && L.env && L.env.lang) || (document.documentElement && document.documentElement.getAttribute('lang')) || @@ -36,7 +37,10 @@ return view.extend({ this.renderActions() ]); - return container; + var wrapper = E('div', { 'class': 'secubox-page-wrapper' }); + wrapper.appendChild(SbHeader.render()); + wrapper.appendChild(container); + return wrapper; }, renderHeader: function() {