luci-base: widgets.js: support alias interfaces in CBIDeviceSelect
authorJo-Philipp Wich <jo@mein.io>
Wed, 14 Aug 2019 21:02:06 +0000 (23:02 +0200)
committerJo-Philipp Wich <jo@mein.io>
Wed, 14 Aug 2019 21:02:25 +0000 (23:02 +0200)
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
modules/luci-base/htdocs/luci-static/resources/tools/widgets.js

index 39e5aa165560d679acd9024648bc3bff638f171f..2da9e7435ffaa7fd05f347332471e7b5b92a0b24 100644 (file)
@@ -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));
@@ -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();