luci-mod-admin-full: fix wifi add and scan actions
[project/luci.git] / modules / luci-mod-admin-full / luasrc / view / admin_network / wifi_overview_status.htm
1 <%#
2 Copyright 2008-2009 Steven Barth <steven@midlink.org>
3 Copyright 2008-2018 Jo-Philipp Wich <jo@mein.io>
4 Licensed to the public under the Apache License 2.0.
5 -%>
6
7 <script type="text/javascript">//<![CDATA[
8 function wifi_delete(ev) {
9 if (!confirm(<%=luci.http.write_json(translate('Really delete this wireless network? The deletion cannot be undone! You might lose access to this device if you are connected via this network.'))%>)) {
10 ev.preventDefault();
11 return false;
12 }
13
14 ev.target.previousElementSibling.value = '1';
15 return true;
16 }
17
18 function wifi_restart(ev) {
19 XHR.halt();
20
21 findParent(ev.target, '.table').querySelectorAll('[data-disabled="false"]').forEach(function(s) {
22 s.innerHTML = '<em><%:Wireless is restarting...%></em>';
23 });
24
25 (new XHR()).post('<%=url('admin/network/wireless_reconnect')%>/' + ev.target.getAttribute('data-radio'),
26 { token: '<%=token%>' }, XHR.run);
27 }
28
29 function wifi_action(ev, action) {
30 var i = ev.target,
31 e = i.getAttribute('data-radio');
32
33 i.parentNode.appendChild(E('input', { type: 'hidden', name: 'device', value: e }));
34 i.form.action = '<%=url('admin/network/wireless_')%>' + action;
35 }
36
37 var networks = [ ];
38
39 document.querySelectorAll('[data-network]').forEach(function(n) {
40 networks.push(n.getAttribute('data-network'));
41 });
42
43 XHR.poll(5, '<%=url('admin/network/wireless_status')%>/' + networks.join(','), null,
44 function(x, st)
45 {
46 if (st)
47 {
48 var rowstyle = 1;
49 var radiostate = { };
50
51 st.forEach(function(s) {
52 var r = radiostate[s.device.device] || (radiostate[s.device.device] = {});
53
54 s.is_assoc = (s.bssid && s.bssid != '00:00:00:00:00:00' && s.channel && s.mode != 'Unknown' && !s.disabled);
55
56 r.up = r.up || s.is_assoc;
57 r.channel = r.channel || s.channel;
58 r.bitrate = r.bitrate || s.bitrate;
59 r.frequency = r.frequency || s.frequency;
60 });
61
62 for( var i = 0; i < st.length; i++ )
63 {
64 var iw = st[i],
65 sig = document.getElementById(iw.id + '-iw-signal'),
66 info = document.getElementById(iw.id + '-iw-status'),
67 disabled = (info && info.getAttribute('data-disabled') === 'true');
68
69 var p = iw.quality;
70 var q = disabled ? -1 : p;
71
72 var icon;
73 if (q < 0)
74 icon = "<%=resource%>/icons/signal-none.png";
75 else if (q == 0)
76 icon = "<%=resource%>/icons/signal-0.png";
77 else if (q < 25)
78 icon = "<%=resource%>/icons/signal-0-25.png";
79 else if (q < 50)
80 icon = "<%=resource%>/icons/signal-25-50.png";
81 else if (q < 75)
82 icon = "<%=resource%>/icons/signal-50-75.png";
83 else
84 icon = "<%=resource%>/icons/signal-75-100.png";
85
86
87 if (sig)
88 sig.innerHTML = String.format(
89 '<span class="ifacebadge" title="<%:Signal%>: %d <%:dBm%> / <%:Noise%>: %d <%:dBm%>"><img src="%s" /> %d%%</span>',
90 iw.signal, iw.noise, icon, p
91 );
92
93 if (info)
94 {
95 if (iw.is_assoc)
96 info.innerHTML = String.format(
97 '<strong><%:SSID%>:</strong> %h | ' +
98 '<strong><%:Mode%>:</strong> %s<br />' +
99 '<strong><%:BSSID%>:</strong> %s | ' +
100 '<strong><%:Encryption%>:</strong> %s',
101 iw.ssid, iw.mode, iw.bssid,
102 iw.encryption ? iw.encryption : '<%:None%>'
103 );
104 else
105 info.innerHTML = String.format(
106 '<strong><%:SSID%>:</strong> %h | ' +
107 '<strong><%:Mode%>:</strong> %s<br />' +
108 '<em>%s</em>',
109 iw.ssid || '?', iw.mode,
110 disabled ? '<em><%:Wireless is disabled%></em>'
111 : '<em><%:Wireless is not associated%></em>'
112 );
113 }
114 }
115
116 for (var dev in radiostate)
117 {
118 var img = document.getElementById(dev + '-iw-upstate');
119 if (img)
120 img.src = '<%=resource%>/icons/wifi' + (radiostate[dev].up ? '' : '_disabled') + '.png';
121
122 var stat = document.getElementById(dev + '-iw-devinfo');
123 if (stat)
124 stat.innerHTML = String.format(
125 '<strong><%:Channel%>:</strong> %s (%s <%:GHz%>) | ' +
126 '<strong><%:Bitrate%>:</strong> %s <%:Mbit/s%>',
127 radiostate[dev].channel ? radiostate[dev].channel : '?',
128 radiostate[dev].frequency ? radiostate[dev].frequency : '?',
129 radiostate[dev].bitrate ? radiostate[dev].bitrate : '?'
130 );
131 }
132 }
133 }
134 );
135 //]]></script>