feat: Add SecuBox portal header to Netifyd views
Add unified SecuBox header navigation to all 5 Netifyd views: - dashboard.js, devices.js, flows.js, applications.js, settings.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 <noreply@anthropic.com>
This commit is contained in:
parent
9e1b841d98
commit
a73157846e
@ -4,6 +4,13 @@
|
|||||||
'require ui';
|
'require ui';
|
||||||
'require dom';
|
'require dom';
|
||||||
'require secubox-netifyd/api as netifydAPI';
|
'require secubox-netifyd/api as netifydAPI';
|
||||||
|
'require secubox-theme/theme as Theme';
|
||||||
|
'require secubox-portal/header as SbHeader';
|
||||||
|
|
||||||
|
var lang = (typeof L !== 'undefined' && L.env && L.env.lang) ||
|
||||||
|
(document.documentElement && document.documentElement.getAttribute('lang')) ||
|
||||||
|
(navigator.language ? navigator.language.split('-')[0] : 'en');
|
||||||
|
Theme.init({ language: lang });
|
||||||
|
|
||||||
return view.extend({
|
return view.extend({
|
||||||
refreshInterval: 5,
|
refreshInterval: 5,
|
||||||
@ -285,7 +292,7 @@ return view.extend({
|
|||||||
|
|
||||||
var serviceRunning = status.running;
|
var serviceRunning = status.running;
|
||||||
|
|
||||||
return E('div', { 'class': 'cbi-map' }, [
|
var view = E('div', { 'class': 'cbi-map' }, [
|
||||||
E('div', { 'style': 'display: flex; justify-content: space-between; align-items: center; margin-bottom: 1rem' }, [
|
E('div', { 'style': 'display: flex; justify-content: space-between; align-items: center; margin-bottom: 1rem' }, [
|
||||||
E('h2', { 'name': 'content', 'style': 'margin: 0' }, [
|
E('h2', { 'name': 'content', 'style': 'margin: 0' }, [
|
||||||
E('i', { 'class': 'fa fa-cubes', 'style': 'margin-right: 0.5rem' }),
|
E('i', { 'class': 'fa fa-cubes', 'style': 'margin-right: 0.5rem' }),
|
||||||
@ -352,6 +359,11 @@ return view.extend({
|
|||||||
])
|
])
|
||||||
])
|
])
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
var wrapper = E('div', { 'class': 'secubox-page-wrapper' });
|
||||||
|
wrapper.appendChild(SbHeader.render());
|
||||||
|
wrapper.appendChild(view);
|
||||||
|
return wrapper;
|
||||||
},
|
},
|
||||||
|
|
||||||
addFooter: function() {
|
addFooter: function() {
|
||||||
|
|||||||
@ -4,6 +4,13 @@
|
|||||||
'require ui';
|
'require ui';
|
||||||
'require dom';
|
'require dom';
|
||||||
'require secubox-netifyd/api as netifydAPI';
|
'require secubox-netifyd/api as netifydAPI';
|
||||||
|
'require secubox-theme/theme as Theme';
|
||||||
|
'require secubox-portal/header as SbHeader';
|
||||||
|
|
||||||
|
var lang = (typeof L !== 'undefined' && L.env && L.env.lang) ||
|
||||||
|
(document.documentElement && document.documentElement.getAttribute('lang')) ||
|
||||||
|
(navigator.language ? navigator.language.split('-')[0] : 'en');
|
||||||
|
Theme.init({ language: lang });
|
||||||
|
|
||||||
return view.extend({
|
return view.extend({
|
||||||
refreshInterval: 5,
|
refreshInterval: 5,
|
||||||
@ -717,7 +724,10 @@ return view.extend({
|
|||||||
dom.content(self.appsContainer, self.renderTopApplications(topApps));
|
dom.content(self.appsContainer, self.renderTopApplications(topApps));
|
||||||
dom.content(self.protosContainer, self.renderTopProtocols(topProtos));
|
dom.content(self.protosContainer, self.renderTopProtocols(topProtos));
|
||||||
|
|
||||||
return pageContent;
|
var wrapper = E('div', { 'class': 'secubox-page-wrapper' });
|
||||||
|
wrapper.appendChild(SbHeader.render());
|
||||||
|
wrapper.appendChild(pageContent);
|
||||||
|
return wrapper;
|
||||||
},
|
},
|
||||||
|
|
||||||
handleSaveApply: null,
|
handleSaveApply: null,
|
||||||
|
|||||||
@ -4,6 +4,13 @@
|
|||||||
'require ui';
|
'require ui';
|
||||||
'require dom';
|
'require dom';
|
||||||
'require rpc';
|
'require rpc';
|
||||||
|
'require secubox-theme/theme as Theme';
|
||||||
|
'require secubox-portal/header as SbHeader';
|
||||||
|
|
||||||
|
var lang = (typeof L !== 'undefined' && L.env && L.env.lang) ||
|
||||||
|
(document.documentElement && document.documentElement.getAttribute('lang')) ||
|
||||||
|
(navigator.language ? navigator.language.split('-')[0] : 'en');
|
||||||
|
Theme.init({ language: lang });
|
||||||
|
|
||||||
var callGetDevices = rpc.declare({
|
var callGetDevices = rpc.declare({
|
||||||
object: 'luci.secubox-netifyd',
|
object: 'luci.secubox-netifyd',
|
||||||
@ -324,7 +331,7 @@ return view.extend({
|
|||||||
|
|
||||||
var serviceRunning = status.running;
|
var serviceRunning = status.running;
|
||||||
|
|
||||||
return E('div', { 'style': 'max-width: 1400px; margin: 0 auto; padding: 24px' }, [
|
var view = E('div', { 'style': 'max-width: 1400px; margin: 0 auto; padding: 24px' }, [
|
||||||
// Header
|
// Header
|
||||||
E('div', { 'style': 'display: flex; justify-content: space-between; align-items: center; margin-bottom: 24px; flex-wrap: wrap; gap: 16px' }, [
|
E('div', { 'style': 'display: flex; justify-content: space-between; align-items: center; margin-bottom: 24px; flex-wrap: wrap; gap: 16px' }, [
|
||||||
E('div', { 'style': 'display: flex; align-items: center; gap: 12px' }, [
|
E('div', { 'style': 'display: flex; align-items: center; gap: 12px' }, [
|
||||||
@ -395,6 +402,11 @@ return view.extend({
|
|||||||
// CSS for pulse animation
|
// CSS for pulse animation
|
||||||
E('style', {}, '@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } }')
|
E('style', {}, '@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } }')
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
var wrapper = E('div', { 'class': 'secubox-page-wrapper' });
|
||||||
|
wrapper.appendChild(SbHeader.render());
|
||||||
|
wrapper.appendChild(view);
|
||||||
|
return wrapper;
|
||||||
},
|
},
|
||||||
|
|
||||||
addFooter: function() {
|
addFooter: function() {
|
||||||
|
|||||||
@ -4,6 +4,13 @@
|
|||||||
'require ui';
|
'require ui';
|
||||||
'require dom';
|
'require dom';
|
||||||
'require secubox-netifyd/api as netifydAPI';
|
'require secubox-netifyd/api as netifydAPI';
|
||||||
|
'require secubox-theme/theme as Theme';
|
||||||
|
'require secubox-portal/header as SbHeader';
|
||||||
|
|
||||||
|
var lang = (typeof L !== 'undefined' && L.env && L.env.lang) ||
|
||||||
|
(document.documentElement && document.documentElement.getAttribute('lang')) ||
|
||||||
|
(navigator.language ? navigator.language.split('-')[0] : 'en');
|
||||||
|
Theme.init({ language: lang });
|
||||||
|
|
||||||
return view.extend({
|
return view.extend({
|
||||||
refreshInterval: 3,
|
refreshInterval: 3,
|
||||||
@ -338,7 +345,7 @@ return view.extend({
|
|||||||
|
|
||||||
var serviceRunning = status.running;
|
var serviceRunning = status.running;
|
||||||
|
|
||||||
return E('div', { 'class': 'cbi-map' }, [
|
var view = E('div', { 'class': 'cbi-map' }, [
|
||||||
E('div', { 'style': 'display: flex; justify-content: space-between; align-items: center; margin-bottom: 1rem' }, [
|
E('div', { 'style': 'display: flex; justify-content: space-between; align-items: center; margin-bottom: 1rem' }, [
|
||||||
E('h2', { 'name': 'content', 'style': 'margin: 0' }, [
|
E('h2', { 'name': 'content', 'style': 'margin: 0' }, [
|
||||||
E('i', { 'class': 'fa fa-stream', 'style': 'margin-right: 0.5rem' }),
|
E('i', { 'class': 'fa fa-stream', 'style': 'margin-right: 0.5rem' }),
|
||||||
@ -413,6 +420,11 @@ return view.extend({
|
|||||||
])
|
])
|
||||||
])
|
])
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
var wrapper = E('div', { 'class': 'secubox-page-wrapper' });
|
||||||
|
wrapper.appendChild(SbHeader.render());
|
||||||
|
wrapper.appendChild(view);
|
||||||
|
return wrapper;
|
||||||
},
|
},
|
||||||
|
|
||||||
addFooter: function() {
|
addFooter: function() {
|
||||||
|
|||||||
@ -5,6 +5,13 @@
|
|||||||
'require ui';
|
'require ui';
|
||||||
'require rpc';
|
'require rpc';
|
||||||
'require secubox-netifyd/api as netifydAPI';
|
'require secubox-netifyd/api as netifydAPI';
|
||||||
|
'require secubox-theme/theme as Theme';
|
||||||
|
'require secubox-portal/header as SbHeader';
|
||||||
|
|
||||||
|
var lang = (typeof L !== 'undefined' && L.env && L.env.lang) ||
|
||||||
|
(document.documentElement && document.documentElement.getAttribute('lang')) ||
|
||||||
|
(navigator.language ? navigator.language.split('-')[0] : 'en');
|
||||||
|
Theme.init({ language: lang });
|
||||||
|
|
||||||
var callServiceList = rpc.declare({
|
var callServiceList = rpc.declare({
|
||||||
object: 'service',
|
object: 'service',
|
||||||
@ -743,6 +750,11 @@ return view.extend({
|
|||||||
]);
|
]);
|
||||||
};
|
};
|
||||||
|
|
||||||
return m.render();
|
return m.render().then(function(formEl) {
|
||||||
|
var wrapper = E('div', { 'class': 'secubox-page-wrapper' });
|
||||||
|
wrapper.appendChild(SbHeader.render());
|
||||||
|
wrapper.appendChild(formEl);
|
||||||
|
return wrapper;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user