luci-mod-system: leds.js: fix handling device option

Since the modal overlay map was unable to read the current trigger value,
it mistakingly allowed the removal of the device option value.

Fix it by finding the option object through lookupOption() instead of
relying on a reference.

Fixes: #3216
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
Jo-Philipp Wich 2019-10-18 18:53:21 +02:00
parent 254503dc8a
commit 45b56e85a6

View file

@ -30,7 +30,7 @@ return L.view.extend({
var leds = results[0],
usb = results[1],
triggers = {},
trigger, m, s, o;
m, s, o;
for (var k in leds)
for (var i = 0; i < leds[k].triggers.length; i++)
@ -54,12 +54,12 @@ return L.view.extend({
o = s.option(form.Flag, 'default', _('Default state'));
o.rmempty = false;
trigger = s.option(form.ListValue, 'trigger', _('Trigger'));
o = s.option(form.ListValue, 'trigger', _('Trigger'));
if (usb.devices && usb.devices.length)
triggers['usbdev'] = true;
if (usb.ports && usb.ports.length)
triggers['usbport'] = true;
Object.keys(triggers).sort().forEach(function(t) { trigger.value(t, t.replace(/-/g, '')) });
Object.keys(triggers).sort().forEach(function(t) { o.value(t, t.replace(/-/g, '')) });
o = s.option(form.Value, 'delayon', _('On-State Delay'));
o.modalonly = true;
@ -76,8 +76,10 @@ return L.view.extend({
o.noaliases = true;
o.depends('trigger', 'netdev');
o.remove = function(section_id) {
var t = trigger.formvalue(section_id);
if (t != 'netdev' && t != 'usbdev')
var topt = this.map.lookupOption('trigger', section_id),
tval = topt ? topt[0].formvalue(section_id) : null;
if (tval != 'netdev' && tval != 'usbdev')
uci.unset('system', section_id, 'dev');
};
@ -96,8 +98,10 @@ return L.view.extend({
o.ucioption = 'dev';
o.modalonly = true;
o.remove = function(section_id) {
var t = trigger.formvalue(section_id);
if (t != 'netdev' && t != 'usbdev')
var topt = this.map.lookupOption('trigger', section_id),
tval = topt ? topt[0].formvalue(section_id) : null;
if (tval != 'netdev' && tval != 'usbdev')
uci.unset('system', section_id, 'dev');
}
o.value('');