chore: sync luCI modules

This commit is contained in:
CyberMind-FR 2025-12-30 17:17:12 +01:00
parent 0beb9620d4
commit c40c5e8dbc
69 changed files with 106 additions and 8 deletions

View File

@ -7,6 +7,7 @@ return view.extend({
load: function() { return api.getBypassList(); },
render: function(data) {
return E('div', {class:'cbi-map'}, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('h2', {}, '⏭️ Bypass Rules'),
E('p', {style:'color:#94a3b8;margin-bottom:20px'}, 'Devices and domains that bypass authentication.'),
E('div', {style:'display:grid;grid-template-columns:repeat(3,1fr);gap:16px'}, [

View File

@ -11,6 +11,7 @@ return view.extend({
var colors = {google:'#4285f4',github:'#333',facebook:'#1877f2',twitter:'#1da1f2'};
return E('div', {class:'cbi-map'}, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('h2', {}, '🔑 OAuth Providers'),
E('p', {style:'color:#94a3b8;margin-bottom:20px'}, 'Configure third-party authentication providers.'),
E('div', {style:'display:grid;gap:16px'}, [

View File

@ -12,6 +12,7 @@ return view.extend({
var sessions = data[1].sessions || [];
return E('div', {class:'cbi-map'}, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('style', {}, [
'.ag{font-family:system-ui,sans-serif}',
'.ag-hdr{background:linear-gradient(135deg,#0891b2,#06b6d4);color:#fff;padding:24px;border-radius:12px;margin-bottom:20px}',

View File

@ -8,6 +8,7 @@ return view.extend({
render: function(data) {
var sessions = data.sessions || [];
return E('div', {class:'cbi-map'}, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('h2', {}, '👥 Active Sessions'),
E('div', {style:'background:#1e293b;padding:20px;border-radius:12px'}, [
sessions.length ? E('table', {style:'width:100%;color:#f1f5f9'}, [

View File

@ -5,6 +5,7 @@
return view.extend({
render: function() {
return E('div', {class:'cbi-map'}, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('h2', {}, '🎨 Splash Page Editor'),
E('p', {style:'color:#94a3b8'}, 'Customize the captive portal splash page appearance.'),
E('div', {style:'display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:20px'}, [

View File

@ -11,6 +11,7 @@ return view.extend({
var self = this;
return E('div', {class:'cbi-map'}, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('h2', {}, '🎟️ Access Vouchers'),
E('div', {style:'margin-bottom:16px'}, [
E('button', {class:'cbi-button cbi-button-positive',click:function(){

View File

@ -10,6 +10,7 @@ return view.extend({
var colors = ['#ef4444','#f59e0b','#eab308','#22c55e','#06b6d4','#3b82f6','#8b5cf6','#ec4899'];
return E('div', {class:'cbi-map'}, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('style', {}, '.qos-grid{display:grid;gap:16px}.qos-card{background:#1e293b;padding:20px;border-radius:12px;border-left:4px solid}.qos-name{font-size:18px;font-weight:600;color:#f1f5f9}.qos-desc{color:#94a3b8;font-size:13px;margin-top:4px}.qos-stats{display:flex;gap:20px;margin-top:16px}.qos-stat{text-align:center}.qos-stat-val{font-size:24px;font-weight:700}.qos-stat-lbl{font-size:11px;color:#64748b}'),
E('h2', {}, '📊 QoS Priority Classes'),
E('p', {style:'color:#94a3b8;margin-bottom:20px'}, '8 priority levels for traffic classification. Lower number = higher priority.'),

View File

@ -8,6 +8,7 @@ return view.extend({
render: function(data) {
var clients = data.clients || [];
return E('div', {class:'cbi-map'}, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('h2', {}, '👥 Connected Clients'),
E('div', {style:'background:#1e293b;padding:20px;border-radius:12px;margin-top:20px'}, [
clients.length ? E('table', {style:'width:100%;color:#f1f5f9'}, [

View File

@ -11,6 +11,7 @@ return view.extend({
var colors = {voip:'#22c55e',gaming:'#f59e0b',streaming:'#ef4444',download:'#3b82f6',social:'#ec4899',work:'#8b5cf6'};
return E('div', {class:'cbi-map'}, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('h2', {}, '🎯 Media Detection'),
E('p', {style:'color:#94a3b8'}, 'Automatic traffic classification based on ports, protocols, and domains.'),
E('div', {style:'display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:20px'}, media.map(function(m) {

View File

@ -18,6 +18,7 @@ return L.view.extend({
var quotas = data[2] || [];
var v = E('div', { 'class': 'cbi-map' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('h2', {}, _('Bandwidth Manager - Overview')),
E('div', { 'class': 'cbi-map-descr' }, _('QoS rules, client quotas, and traffic control'))
]);

View File

@ -106,7 +106,12 @@ return L.view.extend({
return actions;
};
return m.render();
return m.render().then(function(rendered) {
return E('div', {}, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
rendered
]);
});
},
handleSaveApply: null,

View File

@ -71,7 +71,12 @@ return L.view.extend({
o = s.option(form.Flag, 'enabled', _('Enabled'));
o.default = o.enabled;
return m.render();
return m.render().then(function(rendered) {
return E('div', {}, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
rendered
]);
});
},
handleSaveApply: null,

View File

@ -5,6 +5,7 @@
return view.extend({
render: function() {
return E('div', {class:'cbi-map'}, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('h2', {}, '⏰ Time-Based Schedules'),
E('p', {style:'color:#94a3b8'}, 'Configure bandwidth limits based on time of day.'),
E('div', {style:'background:#1e293b;padding:20px;border-radius:12px;margin-top:20px'}, [

View File

@ -105,6 +105,11 @@ return L.view.extend({
o.placeholder = 'admin@example.com';
o.depends('enabled', '1');
return m.render();
return m.render().then(function(rendered) {
return E('div', {}, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
rendered
]);
});
}
});

View File

@ -31,6 +31,7 @@ return L.view.extend({
v.appendChild(graphContainer);
var container = E('div', { 'id': 'usage-container', 'class': 'cbi-section' });
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
v.appendChild(container);
// Initial render

View File

@ -22,6 +22,7 @@ return view.extend({
var logs = data[1].logs || [];
var view = E('div', { 'class': 'client-guardian-dashboard' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('link', { 'rel': 'stylesheet', 'href': L.resource('client-guardian/dashboard.css') }),
// Email Configuration

View File

@ -24,6 +24,7 @@ return view.extend({
var nds = sessions.nodogsplash || {};
var view = E('div', { 'class': 'cbi-map' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('h2', {}, _('Captive Portal Management')),
// Nodogsplash Status Card

View File

@ -20,6 +20,7 @@ return view.extend({
var self = this;
var view = E('div', { 'class': 'client-guardian-dashboard' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('link', { 'rel': 'stylesheet', 'href': L.resource('client-guardian/dashboard.css') }),
E('div', { 'class': 'cg-header' }, [

View File

@ -19,6 +19,7 @@ return view.extend({
var self = this;
var view = E('div', { 'class': 'client-guardian-dashboard' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('link', { 'rel': 'stylesheet', 'href': L.resource('client-guardian/dashboard.css') }),
// Filters

View File

@ -27,6 +27,7 @@ return view.extend({
var bannedClients = clients.filter(function(c) { return c.status === 'banned'; });
var view = E('div', { 'class': 'client-guardian-dashboard' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('link', { 'rel': 'stylesheet', 'href': L.resource('client-guardian/dashboard.css') }),
// Header

View File

@ -16,6 +16,7 @@ return view.extend({
var urlLists = data.url_lists || [];
return E('div', { 'class': 'client-guardian-dashboard' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('link', { 'rel': 'stylesheet', 'href': L.resource('client-guardian/dashboard.css') }),
E('div', { 'class': 'cg-header' }, [

View File

@ -15,6 +15,7 @@ return view.extend({
var self = this;
return E('div', { 'class': 'client-guardian-dashboard' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('link', { 'rel': 'stylesheet', 'href': L.resource('client-guardian/dashboard.css') }),
E('div', { 'class': 'cg-header' }, [

View File

@ -169,7 +169,11 @@ return view.extend({
]);
rendered.insertBefore(infoBox, rendered.firstChild);
return rendered;
return E('div', {}, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
rendered
]);
});
},

View File

@ -15,6 +15,7 @@ return view.extend({
var self = this;
return E('div', { 'class': 'client-guardian-dashboard' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('link', { 'rel': 'stylesheet', 'href': L.resource('client-guardian/dashboard.css') }),
E('div', { 'class': 'cg-header' }, [

View File

@ -130,6 +130,7 @@ return view.extend({
if (this.filteredAlerts.length === 0) {
return E('div', { 'class': 'cs-empty' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('div', { 'class': 'cs-empty-icon' }, this.searchQuery ? '🔍' : '📭'),
E('p', {}, this.searchQuery ? 'No matching alerts found' : 'No alerts recorded')
]);

View File

@ -19,6 +19,7 @@ return view.extend({
var status = data[1] || {};
var view = E('div', { 'class': 'cbi-map' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('h2', {}, _('CrowdSec Bouncers')),
E('div', { 'class': 'cbi-map-descr' },
_('Bouncers are components that enforce CrowdSec decisions by blocking malicious IPs at various points (firewall, web server, etc.).')),

View File

@ -184,6 +184,7 @@ return view.extend({
if (this.filteredDecisions.length === 0) {
return E('div', { 'class': 'cs-empty' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('div', { 'class': 'cs-empty-icon' }, this.searchQuery ? '🔍' : '✅'),
E('p', {}, this.searchQuery ? 'No matching decisions found' : 'No active decisions')
]);

View File

@ -62,6 +62,7 @@ return view.extend({
value = JSON.stringify(value);
}
return E('div', { 'class': 'cs-metric-item' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('span', { 'class': 'cs-metric-name' }, entry[0]),
E('span', { 'class': 'cs-metric-value' }, String(value))
]);

View File

@ -116,6 +116,7 @@ return view.extend({
if (!Array.isArray(decisions) || decisions.length === 0) {
return E('div', { 'class': 'cs-empty' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('div', { 'class': 'cs-empty-icon' }, '✅'),
E('p', {}, 'No active decisions - All clear!')
]);

View File

@ -21,6 +21,7 @@ return view.extend({
var collections = Array.isArray(data[3]) ? data[3] : [];
var view = E('div', { 'class': 'cbi-map' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('h2', {}, _('CrowdSec Settings')),
E('div', { 'class': 'cbi-map-descr' },
_('Configure and manage your CrowdSec installation, machines, and collections.')),

View File

@ -55,6 +55,7 @@ return view.extend({
renderLogsTable: function(logs) {
if (!logs || logs.length === 0) {
return E('div', { 'class': 'cbi-value' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('em', {}, _('No audit logs available.'))
]);
}

View File

@ -82,6 +82,7 @@ return view.extend({
renderCertificatesTable: function(certificates) {
if (!certificates || certificates.length === 0) {
return E('div', { 'class': 'cbi-value' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('em', {}, _('No certificates found.'))
]);
}

View File

@ -50,6 +50,7 @@ return view.extend({
renderDevices: function(devices) {
if (!devices || devices.length === 0) {
return E('div', { 'class': 'cbi-value' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('em', {}, _('No HSM devices detected. Connect a Nitrokey or YubiKey and click "Scan for Devices".'))
]);
}

View File

@ -97,6 +97,7 @@ return view.extend({
renderKeysTable: function(keys) {
if (!keys || keys.length === 0) {
return E('div', { 'class': 'cbi-value' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('em', {}, _('No keys found. Generate or import a key to get started.'))
]);
}

View File

@ -140,6 +140,7 @@ return view.extend({
hsmDevices.devices.map(function(device) {
var typeIcon = device.type === 'nitrokey' ? '🔐' : '🔑';
return E('div', { 'class': 'cbi-value' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('label', { 'class': 'cbi-value-title' }, typeIcon + ' ' + device.serial + ':'),
E('div', { 'class': 'cbi-value-field' }, [
E('span', {}, device.type.toUpperCase() + ' '),

View File

@ -62,6 +62,7 @@ return view.extend({
renderSecretsTable: function(secrets) {
if (!secrets || secrets.length === 0) {
return E('div', { 'class': 'cbi-value' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('em', {}, _('No secrets stored.'))
]);
}

View File

@ -89,7 +89,12 @@ return view.extend({
o.inputstyle = 'action';
o.onclick = L.bind(this.handleRestoreBackup, this);
return m.render();
return m.render().then(function(rendered) {
return E('div', {}, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
rendered
]);
});
},
handleCreateBackup: function() {

View File

@ -82,6 +82,7 @@ return view.extend({
renderSshKeysTable: function(keys) {
if (!keys || keys.length === 0) {
return E('div', { 'class': 'cbi-value' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('em', {}, _('No SSH keys found. Generate a key to get started.'))
]);
}

View File

@ -66,6 +66,11 @@ return L.view.extend({
}
};
return m.render();
return m.render().then(function(rendered) {
return E('div', {}, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
rendered
]);
});
}
});

View File

@ -16,6 +16,7 @@ return L.view.extend({
var clients = statsByClient.clients || {};
var v = E('div', { 'class': 'cbi-map' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('h2', {}, _('Clients Statistics')),
E('div', { 'class': 'cbi-map-descr' }, _('Streaming activity per client'))
]);

View File

@ -20,6 +20,7 @@ return L.view.extend({
var statsByService = data[2] || {};
var v = E('div', { 'class': 'cbi-map' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('h2', {}, _('Media Flow Dashboard')),
E('div', { 'class': 'cbi-map-descr' }, _('Real-time detection and monitoring of streaming services'))
]);

View File

@ -77,6 +77,7 @@ return L.view.extend({
}
return E('div', { 'class': 'cbi-section' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('h3', {}, _('Recent Sessions')),
table
]);

View File

@ -16,6 +16,7 @@ return L.view.extend({
var services = statsByService.services || {};
var v = E('div', { 'class': 'cbi-map' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('h2', {}, _('Services Statistics')),
E('div', { 'class': 'cbi-map-descr' }, _('Detailed statistics per streaming service'))
]);

View File

@ -24,6 +24,7 @@ return view.extend({
});
var view = E('div', { 'class': 'netdata-dashboard' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
// Header
E('div', { 'class': 'nd-header' }, [
E('div', { 'class': 'nd-logo' }, [

View File

@ -18,6 +18,7 @@ return view.extend({
var topProcs = procs.top || [];
var view = E('div', { 'class': 'netdata-dashboard' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
// Header
E('div', { 'class': 'nd-header' }, [
E('div', { 'class': 'nd-logo' }, [

View File

@ -37,6 +37,7 @@ return view.extend({
var statusClass = api.getStatusClass(percent);
return E('div', { 'class': 'nd-gauge', 'style': 'width:' + size + 'px;height:' + size + 'px' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('svg', { 'class': 'nd-gauge-svg', 'width': size, 'height': size, 'viewBox': '0 0 ' + size + ' ' + size }, [
E('circle', {
'class': 'nd-gauge-bg',

View File

@ -19,6 +19,7 @@ return view.extend({
var system = data[2] || {};
var view = E('div', { 'class': 'cbi-map' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('h2', {}, _('Netdata Settings')),
E('div', { 'class': 'cbi-map-descr' },
_('Configure Netdata monitoring service and view system information.')),

View File

@ -31,6 +31,7 @@ return view.extend({
var seconds = uptime % 60;
var view = E('div', { 'class': 'netdata-dashboard' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
// Header
E('div', { 'class': 'nd-header' }, [
E('div', { 'class': 'nd-logo' }, [

View File

@ -19,6 +19,7 @@ return view.extend({
var totalFlows = apps.reduce(function(sum, a) { return sum + (a.flows || 0); }, 0);
var view = E('div', { 'class': 'netifyd-dashboard' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
// Header
E('div', { 'class': 'nf-header' }, [
E('div', { 'class': 'nf-logo' }, [

View File

@ -17,6 +17,7 @@ return view.extend({
var devices = (data || {}).devices || [];
var view = E('div', { 'class': 'netifyd-dashboard' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
// Header
E('div', { 'class': 'nf-header' }, [
E('div', { 'class': 'nf-logo' }, [

View File

@ -17,6 +17,7 @@ return view.extend({
var flows = (data || {}).flows || [];
var view = E('div', { 'class': 'netifyd-dashboard' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
// Header
E('div', { 'class': 'nf-header' }, [
E('div', { 'class': 'nf-logo' }, [

View File

@ -73,6 +73,7 @@ return view.extend({
var maxAppBytes = topApps.length > 0 ? Math.max.apply(null, topApps.map(function(a) { return a.bytes; })) : 1;
var view = E('div', { 'class': 'netifyd-dashboard' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
// Header
E('div', { 'class': 'nf-header' }, [
E('div', { 'class': 'nf-logo' }, [

View File

@ -105,6 +105,7 @@ return view.extend({
var lowCount = risks.filter(function(r) { return r.severity === 'low'; }).length;
var view = E('div', { 'class': 'netifyd-dashboard' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
// Header
E('div', { 'class': 'nf-header' }, [
E('div', { 'class': 'nf-logo' }, [

View File

@ -16,6 +16,7 @@ return view.extend({
'class': 'netifyd-settings',
'style': 'max-width: 1200px; margin: 0 auto;'
}, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
// Header
E('div', { 'style': 'margin-bottom: 2em;' }, [
E('h1', {

View File

@ -65,6 +65,7 @@ return view.extend({
var totalBytes = talkers.reduce(function(sum, t) { return sum + t.total_bytes; }, 0);
var view = E('div', { 'class': 'netifyd-dashboard' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
// Header
E('div', { 'class': 'nf-header' }, [
E('div', { 'class': 'nf-logo' }, [

View File

@ -21,6 +21,7 @@ return view.extend({
'class': 'netifyd-wizard-container',
'style': 'max-width: 900px; margin: 2em auto; padding: 2em;'
}, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
// Header
E('div', { 'style': 'text-align: center; margin-bottom: 3em;' }, [
E('div', {

View File

@ -143,6 +143,7 @@ return view.extend({
});
var container = E('div', { 'class': 'nm-container' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
helpers.createNavigationTabs('dmz'),
hero,
wanSection,

View File

@ -14,6 +14,7 @@
"ap_config",
"relay_config",
"router_config",
"dmz_config",
"travel_config",
"doublenat_config",
"multiwan_config",

View File

@ -122,7 +122,11 @@ return view.extend({
]);
rendered.insertBefore(helpBox, rendered.firstChild);
return rendered;
return E('div', {}, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
rendered
]);
});
},

View File

@ -25,6 +25,7 @@ return view.extend({
var activeRules = rules.filter(function(r) { return r.enabled === '1'; });
var view = E('div', { 'class': 'traffic-shaper-dashboard' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('h2', {}, _('Traffic Shaper Overview')),
// Status Cards

View File

@ -14,6 +14,7 @@ return view.extend({
var presets = data.presets || [];
var container = E('div', { 'class': 'traffic-shaper-dashboard' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('h2', {}, _('Traffic Shaping Presets')),
E('div', { 'class': 'cbi-section' }, [

View File

@ -158,7 +158,11 @@ return view.extend({
]);
rendered.insertBefore(helpBox, rendered.firstChild);
return rendered;
return E('div', {}, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
rendered
]);
});
},

View File

@ -18,6 +18,7 @@ return view.extend({
var stats = data[1].stats || [];
var container = E('div', { 'class': 'traffic-shaper-dashboard' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('h2', {}, _('Traffic Statistics')),
E('div', { 'class': 'ts-stats-container' }, [

View File

@ -16,6 +16,7 @@ return view.extend({
var interfaces = (data || {}).interfaces || [];
var view = E('div', { 'class': 'wireguard-dashboard' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
// Header
E('div', { 'class': 'wg-header' }, [
E('div', { 'class': 'wg-logo' }, [

View File

@ -21,6 +21,7 @@ return view.extend({
var activePeers = peers.filter(function(p) { return p.status === 'active'; }).length;
var view = E('div', { 'class': 'wireguard-dashboard' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
// Header
E('div', { 'class': 'wg-header' }, [
E('div', { 'class': 'wg-logo' }, [

View File

@ -23,6 +23,7 @@ return view.extend({
var activePeers = peers.filter(function(p) { return p.status === 'active'; }).length;
var view = E('div', { 'class': 'cbi-map' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('h2', {}, _('WireGuard Peers')),
E('div', { 'class': 'cbi-map-descr' },
_('Manage WireGuard VPN peers - add, configure, and monitor connected devices.')),

View File

@ -59,6 +59,7 @@ return view.extend({
var interfaces = (data || {}).interfaces || [];
var view = E('div', { 'class': 'wireguard-dashboard' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
// Header
E('div', { 'class': 'wg-header' }, [
E('div', { 'class': 'wg-logo' }, [

View File

@ -17,6 +17,7 @@ return view.extend({
var interfaces = (data[1] || {}).interfaces || [];
var view = E('div', { 'class': 'cbi-map' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
E('h2', {}, _('WireGuard Settings')),
E('div', { 'class': 'cbi-map-descr' },
_('WireGuard VPN configuration and management information.')),

View File

@ -21,6 +21,7 @@ return view.extend({
var totalTraffic = totalRx + totalTx;
var view = E('div', { 'class': 'wireguard-dashboard' }, [
E('link', { 'rel': 'stylesheet', 'href': L.resource('secubox-theme/secubox-theme.css') }),
// Header
E('div', { 'class': 'wg-header' }, [
E('div', { 'class': 'wg-logo' }, [