Merge pull request #1735 from sumpfralle/olsr-jsoninfo-parser-handle-empty-result
[oweals/luci.git] / modules / luci-base / htdocs / luci-static / resources / tools / widgets.js
index 39e5aa165560d679acd9024648bc3bff638f171f..1667fa670726d5f95719c385840320f6e85ef4e3 100644 (file)
@@ -358,7 +358,7 @@ var CBINetworkSelect = form.ListValue.extend({
                        var network = this.networks[i],
                            name = network.getName();
 
-                       if (name == 'loopback' || !this.filter(section_id, name))
+                       if (name == 'loopback' || name == this.exclude || !this.filter(section_id, name))
                                continue;
 
                        if (this.novirtual && network.isVirtual())
@@ -420,8 +420,12 @@ var CBIDeviceSelect = form.ListValue.extend({
        __name__: 'CBI.DeviceSelect',
 
        load: function(section_id) {
-               return network.getDevices().then(L.bind(function(devices) {
-                       this.devices = devices;
+               return Promise.all([
+                       network.getDevices(),
+                       this.noaliases ? null : network.getNetworks()
+               ]).then(L.bind(function(data) {
+                       this.devices = data[0];
+                       this.networks = data[1];
 
                        return this.super('load', section_id);
                }, this));
@@ -474,7 +478,7 @@ var CBIDeviceSelect = form.ListValue.extend({
                        var networks = device.getNetworks();
 
                        if (networks.length > 0)
-                               L.dom.append(item.lastChild, [ ' (', networks.join(', '), ')' ]);
+                               L.dom.append(item.lastChild, [ ' (', networks.map(function(n) { return n.getName() }).join(', '), ')' ]);
 
                        if (checked[name])
                                values.push(name);
@@ -483,6 +487,35 @@ var CBIDeviceSelect = form.ListValue.extend({
                        order.push(name);
                }
 
+               if (this.networks != null) {
+                       for (var i = 0; i < this.networks.length; i++) {
+                               var net = this.networks[i],
+                                   device = network.instantiateDevice('@%s'.format(net.getName()), net),
+                                   name = device.getName();
+
+                               if (name == '@loopback' || name == this.exclude || !this.filter(section_id, name))
+                                       continue;
+
+                               if (this.noinactive && net.isUp() == false)
+                                       continue;
+
+                               var item = E([
+                                       E('img', {
+                                               'title': device.getI18n(),
+                                               'src': L.resource('icons/alias%s.png'.format(net.isUp() ? '' : '_disabled'))
+                                       }),
+                                       E('span', { 'class': 'hide-open' }, [ name ]),
+                                       E('span', { 'class': 'hide-close'}, [ device.getI18n() ])
+                               ]);
+
+                               if (checked[name])
+                                       values.push(name);
+
+                               choices[name] = item;
+                               order.push(name);
+                       }
+               }
+
                if (!this.nocreate) {
                        var keys = Object.keys(checked).sort();