luci-mod-admin-full: properly reset internal device form field
[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 var networks = [ ];
30
31 document.querySelectorAll('[data-network]').forEach(function(n) {
32 networks.push(n.getAttribute('data-network'));
33 });
34
35 XHR.poll(5, '<%=url('admin/network/wireless_status')%>/' + networks.join(','), null,
36 function(x, st)
37 {
38 if (st)
39 {
40 var rowstyle = 1;
41 var radiostate = { };
42
43 st.forEach(function(s) {
44 var r = radiostate[s.device.device] || (radiostate[s.device.device] = {});
45
46 s.is_assoc = (s.bssid && s.bssid != '00:00:00:00:00:00' && s.channel && s.mode != 'Unknown' && !s.disabled);
47
48 r.up = r.up || s.is_assoc;
49 r.channel = r.channel || s.channel;
50 r.bitrate = r.bitrate || s.bitrate;
51 r.frequency = r.frequency || s.frequency;
52 });
53
54 for( var i = 0; i < st.length; i++ )
55 {
56 var iw = st[i],
57 sig = document.getElementById(iw.id + '-iw-signal'),
58 info = document.getElementById(iw.id + '-iw-status'),
59 disabled = (info && info.getAttribute('data-disabled') === 'true');
60
61 var p = iw.quality;
62 var q = disabled ? -1 : p;
63
64 var icon;
65 if (q < 0)
66 icon = "<%=resource%>/icons/signal-none.png";
67 else if (q == 0)
68 icon = "<%=resource%>/icons/signal-0.png";
69 else if (q < 25)
70 icon = "<%=resource%>/icons/signal-0-25.png";
71 else if (q < 50)
72 icon = "<%=resource%>/icons/signal-25-50.png";
73 else if (q < 75)
74 icon = "<%=resource%>/icons/signal-50-75.png";
75 else
76 icon = "<%=resource%>/icons/signal-75-100.png";
77
78
79 if (sig)
80 sig.innerHTML = String.format(
81 '<span class="ifacebadge" title="<%:Signal%>: %d <%:dBm%> / <%:Noise%>: %d <%:dBm%>"><img src="%s" /> %d%%</span>',
82 iw.signal, iw.noise, icon, p
83 );
84
85 if (info)
86 {
87 if (iw.is_assoc)
88 info.innerHTML = String.format(
89 '<strong><%:SSID%>:</strong> %h | ' +
90 '<strong><%:Mode%>:</strong> %s<br />' +
91 '<strong><%:BSSID%>:</strong> %s | ' +
92 '<strong><%:Encryption%>:</strong> %s',
93 iw.ssid, iw.mode, iw.bssid,
94 iw.encryption ? iw.encryption : '<%:None%>'
95 );
96 else
97 info.innerHTML = String.format(
98 '<strong><%:SSID%>:</strong> %h | ' +
99 '<strong><%:Mode%>:</strong> %s<br />' +
100 '<em>%s</em>',
101 iw.ssid || '?', iw.mode,
102 disabled ? '<em><%:Wireless is disabled%></em>'
103 : '<em><%:Wireless is not associated%></em>'
104 );
105 }
106 }
107
108 for (var dev in radiostate)
109 {
110 var img = document.getElementById(dev + '-iw-upstate');
111 if (img)
112 img.src = '<%=resource%>/icons/wifi' + (radiostate[dev].up ? '' : '_disabled') + '.png';
113
114 var stat = document.getElementById(dev + '-iw-devinfo');
115 if (stat)
116 stat.innerHTML = String.format(
117 '<strong><%:Channel%>:</strong> %s (%s <%:GHz%>) | ' +
118 '<strong><%:Bitrate%>:</strong> %s <%:Mbit/s%>',
119 radiostate[dev].channel ? radiostate[dev].channel : '?',
120 radiostate[dev].frequency ? radiostate[dev].frequency : '?',
121 radiostate[dev].bitrate ? radiostate[dev].bitrate : '?'
122 );
123 }
124 }
125 }
126 );
127 //]]></script>