fix(exposure): Fix toggle switches always showing as ON

Use DOM property assignment (cb.checked = value) instead of HTML
attribute ('checked': false) which browsers treat as checked since
any attribute presence means ON for boolean HTML attributes.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
CyberMind-FR 2026-02-04 14:19:49 +01:00
parent 4c8799d520
commit 9def2ad15a

View File

@ -109,25 +109,15 @@ return view.extend({
svc.address.replace(/^.*:/, '').length < 4 ? svc.address : (isExternal ? '0.0.0.0' : '127.0.0.1')),
// Tor toggle
E('td', { 'style': 'text-align: center;' },
isExternal ? E('label', { 'class': 'toggle-switch' }, [
E('input', {
'type': 'checkbox',
'checked': !!torInfo,
'change': ui.createHandlerFn(self, 'handleTorToggle', svc, torInfo)
}),
E('span', { 'class': 'toggle-slider tor-slider' })
]) : E('span', { 'class': 'exp-text-muted' }, '-')
isExternal ? self.makeToggle(!!torInfo, 'tor-slider',
ui.createHandlerFn(self, 'handleTorToggle', svc, torInfo)
) : E('span', { 'class': 'exp-text-muted' }, '-')
),
// SSL toggle
E('td', { 'style': 'text-align: center;' },
isExternal ? E('label', { 'class': 'toggle-switch' }, [
E('input', {
'type': 'checkbox',
'checked': !!(sslInfo || domains.length > 0),
'change': ui.createHandlerFn(self, 'handleSslToggle', svc, sslInfo, domains)
}),
E('span', { 'class': 'toggle-slider ssl-slider' })
]) : E('span', { 'class': 'exp-text-muted' }, '-')
isExternal ? self.makeToggle(!!(sslInfo || domains.length > 0), 'ssl-slider',
ui.createHandlerFn(self, 'handleSslToggle', svc, sslInfo, domains)
) : E('span', { 'class': 'exp-text-muted' }, '-')
),
// Exposure info
E('td', {}, infoItems.length > 0 ? infoItems :
@ -167,6 +157,15 @@ return view.extend({
]);
},
makeToggle: function(checked, sliderClass, handler) {
var cb = E('input', { 'type': 'checkbox', 'change': handler });
cb.checked = checked;
return E('label', { 'class': 'toggle-switch' }, [
cb,
E('span', { 'class': 'toggle-slider ' + sliderClass })
]);
},
parseBackendPort: function(backend) {
if (!backend) return null;
var m = backend.match(/:(\d+)$/);