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:
parent
4c8799d520
commit
9def2ad15a
@ -109,25 +109,15 @@ return view.extend({
|
|||||||
svc.address.replace(/^.*:/, '').length < 4 ? svc.address : (isExternal ? '0.0.0.0' : '127.0.0.1')),
|
svc.address.replace(/^.*:/, '').length < 4 ? svc.address : (isExternal ? '0.0.0.0' : '127.0.0.1')),
|
||||||
// Tor toggle
|
// Tor toggle
|
||||||
E('td', { 'style': 'text-align: center;' },
|
E('td', { 'style': 'text-align: center;' },
|
||||||
isExternal ? E('label', { 'class': 'toggle-switch' }, [
|
isExternal ? self.makeToggle(!!torInfo, 'tor-slider',
|
||||||
E('input', {
|
ui.createHandlerFn(self, 'handleTorToggle', svc, torInfo)
|
||||||
'type': 'checkbox',
|
) : E('span', { 'class': 'exp-text-muted' }, '-')
|
||||||
'checked': !!torInfo,
|
|
||||||
'change': ui.createHandlerFn(self, 'handleTorToggle', svc, torInfo)
|
|
||||||
}),
|
|
||||||
E('span', { 'class': 'toggle-slider tor-slider' })
|
|
||||||
]) : E('span', { 'class': 'exp-text-muted' }, '-')
|
|
||||||
),
|
),
|
||||||
// SSL toggle
|
// SSL toggle
|
||||||
E('td', { 'style': 'text-align: center;' },
|
E('td', { 'style': 'text-align: center;' },
|
||||||
isExternal ? E('label', { 'class': 'toggle-switch' }, [
|
isExternal ? self.makeToggle(!!(sslInfo || domains.length > 0), 'ssl-slider',
|
||||||
E('input', {
|
ui.createHandlerFn(self, 'handleSslToggle', svc, sslInfo, domains)
|
||||||
'type': 'checkbox',
|
) : E('span', { 'class': 'exp-text-muted' }, '-')
|
||||||
'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' }, '-')
|
|
||||||
),
|
),
|
||||||
// Exposure info
|
// Exposure info
|
||||||
E('td', {}, infoItems.length > 0 ? infoItems :
|
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) {
|
parseBackendPort: function(backend) {
|
||||||
if (!backend) return null;
|
if (!backend) return null;
|
||||||
var m = backend.match(/:(\d+)$/);
|
var m = backend.match(/:(\d+)$/);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user