luci-mod-system: leds.js: fix handling device option
authorJo-Philipp Wich <jo@mein.io>
Fri, 18 Oct 2019 16:53:21 +0000 (18:53 +0200)
committerJo-Philipp Wich <jo@mein.io>
Fri, 18 Oct 2019 16:55:10 +0000 (18:55 +0200)
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>
modules/luci-mod-system/htdocs/luci-static/resources/view/system/leds.js

index 8a93aeb8c837ddeacb394019414f021198e2ff51..139db8797c0d8de578819f3315da2500d293ee24 100644 (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('');