luci-app-olsr: handle empty result for non-status tables
[oweals/luci.git] / modules / luci-mod-network / htdocs / luci-static / resources / view / network / wireless.js
1 function wifi_delete(ev) {
2         if (!confirm(_('Really delete this wireless network? The deletion cannot be undone! You might lose access to this device if you are connected via this network.'))) {
3                 ev.preventDefault();
4                 return false;
5         }
6
7         ev.target.previousElementSibling.value = '1';
8         return true;
9 }
10
11 function wifi_restart(ev) {
12         L.halt();
13
14         findParent(ev.target, '.table').querySelectorAll('[data-disabled="false"]').forEach(function(s) {
15                 L.dom.content(s, E('em', _('Wireless is restarting...')));
16         });
17
18         L.post(L.url('admin/network/wireless_reconnect', ev.target.getAttribute('data-radio')), L.run);
19 }
20
21 var networks = [ ];
22
23 document.querySelectorAll('[data-network]').forEach(function(n) {
24         networks.push(n.getAttribute('data-network'));
25 });
26
27 L.poll(5, L.url('admin/network/wireless_status', networks.join(',')), null,
28         function(x, st) {
29                 if (st) {
30                         var rowstyle = 1;
31                         var radiostate = { };
32
33                         st.forEach(function(s) {
34                                 var r = radiostate[s.device.device] || (radiostate[s.device.device] = {});
35
36                                 s.is_assoc = (s.bssid && s.bssid != '00:00:00:00:00:00' && s.channel && s.mode != 'Unknown' && !s.disabled);
37
38                                 r.up        = r.up        || s.is_assoc;
39                                 r.channel   = r.channel   || s.channel;
40                                 r.bitrate   = r.bitrate   || s.bitrate;
41                                 r.frequency = r.frequency || s.frequency;
42                         });
43
44                         for (var i = 0; i < st.length; i++) {
45                                 var iw = st[i],
46                                     sig = document.getElementById(iw.id + '-iw-signal'),
47                                     info = document.getElementById(iw.id + '-iw-status'),
48                                     disabled = (info && info.getAttribute('data-disabled') === 'true');
49
50                                 var p = iw.quality;
51                                 var q = disabled ? -1 : p;
52
53                                 var icon;
54                                 if (q < 0)
55                                         icon = L.resource('icons/signal-none.png');
56                                 else if (q == 0)
57                                         icon = L.resource('icons/signal-0.png');
58                                 else if (q < 25)
59                                         icon = L.resource('icons/signal-0-25.png');
60                                 else if (q < 50)
61                                         icon = L.resource('icons/signal-25-50.png');
62                                 else if (q < 75)
63                                         icon = L.resource('icons/signal-50-75.png');
64                                 else
65                                         icon = L.resource('icons/signal-75-100.png');
66
67                                 L.dom.content(sig, E('span', {
68                                         class: 'ifacebadge',
69                                         title: '%s %d %s / %s: %d %s'.format(_('Signal'), iw.signal, _('dBm'), _('Noise'), iw.noise, _('dBm'))
70                                 }, [ E('img', { src: icon }), ' %d%%'.format(p) ]));
71
72                                 L.itemlist(info, [
73                                         _('SSID'),       iw.ssid || '?',
74                                         _('Mode'),       iw.mode,
75                                         _('BSSID'),      iw.is_assoc ? iw.bssid : null,
76                                         _('Encryption'), iw.is_assoc ? iw.encryption || _('None') : null,
77                                         null,            iw.is_assoc ? null : E('em', disabled ? _('Wireless is disabled') : _('Wireless is not associated'))
78                                 ], [ ' | ', E('br') ]);
79                         }
80
81                         for (var dev in radiostate) {
82                                 var img = document.getElementById(dev + '-iw-upstate');
83                                 if (img) img.src = L.resource('icons/wifi' + (radiostate[dev].up ? '' : '_disabled') + '.png');
84
85                                 var stat = document.getElementById(dev + '-iw-devinfo');
86                                 L.itemlist(stat, [
87                                         _('Channel'), '%s (%s %s)'.format(radiostate[dev].channel || '?', radiostate[dev].frequency || '?', _('GHz')),
88                                         _('Bitrate'), '%s %s'.format(radiostate[dev].bitrate || '?', _('Mbit/s'))
89                                 ], ' | ');
90                         }
91                 }
92         }
93 );