summaryrefslogtreecommitdiffhomepage
path: root/modules/luci-mod-network/luasrc
diff options
context:
space:
mode:
Diffstat (limited to 'modules/luci-mod-network/luasrc')
-rw-r--r--modules/luci-mod-network/luasrc/model/cbi/admin_network/network.lua63
-rw-r--r--modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi_overview.lua76
-rw-r--r--modules/luci-mod-network/luasrc/view/admin_network/iface_overview.htm53
-rw-r--r--modules/luci-mod-network/luasrc/view/admin_network/iface_overview_status.htm183
-rw-r--r--modules/luci-mod-network/luasrc/view/admin_network/wifi_overview.htm61
-rw-r--r--modules/luci-mod-network/luasrc/view/admin_network/wifi_overview_status.htm127
6 files changed, 119 insertions, 444 deletions
diff --git a/modules/luci-mod-network/luasrc/model/cbi/admin_network/network.lua b/modules/luci-mod-network/luasrc/model/cbi/admin_network/network.lua
index 0c0ca5263d..b98086dea6 100644
--- a/modules/luci-mod-network/luasrc/model/cbi/admin_network/network.lua
+++ b/modules/luci-mod-network/luasrc/model/cbi/admin_network/network.lua
@@ -15,59 +15,6 @@ m:chain("dhcp")
m.pageaction = false
-local tpl_networks = tpl.Template(nil, [[
- <div class="cbi-section-node">
- <div class="table">
- <%
- for i, net in ipairs(netlist) do
- local z = net[3]
- local c = z and z:get_color() or "#EEEEEE"
- local t = z and translate("Part of zone %q" % z:name()) or translate("No zone assigned")
- local disabled = (net[4]:get("auto") == "0")
- local dynamic = net[4]:is_dynamic()
- %>
- <div class="tr cbi-rowstyle-<%=i % 2 + 1%>">
- <div class="td col-3 center middle">
- <div class="ifacebox">
- <div class="ifacebox-head" style="background-color:<%=c%>" title="<%=pcdata(t)%>">
- <strong><%=net[1]:upper()%></strong>
- </div>
- <div class="ifacebox-body" id="<%=net[1]%>-ifc-devices" data-network="<%=net[1]%>">
- <img src="<%=resource%>/icons/ethernet_disabled.png" style="width:16px; height:16px" /><br />
- <small>?</small>
- </div>
- </div>
- </div>
- <div class="td col-5 left middle" id="<%=net[1]%>-ifc-description">
- <em><%:Collecting data...%></em>
- </div>
- <div class="td cbi-section-actions">
- <div>
- <input type="button" class="cbi-button cbi-button-neutral" onclick="iface_reconnect('<%=net[1]%>')" title="<%:Reconnect this interface%>" value="<%:Restart%>"<%=ifattr(disabled or dynamic, "disabled", "disabled")%> />
-
- <% if disabled then %>
- <input type="hidden" name="cbid.network.<%=net[1]%>.__disable__" value="1" />
- <input type="submit" name="cbi.apply" class="cbi-button cbi-button-neutral" onclick="this.previousElementSibling.value='0'" title="<%:Reconnect this interface%>" value="<%:Connect%>"<%=ifattr(dynamic, "disabled", "disabled")%> />
- <% else %>
- <input type="hidden" name="cbid.network.<%=net[1]%>.__disable__" value="0" />
- <input type="submit" name="cbi.apply" class="cbi-button cbi-button-neutral" onclick="this.previousElementSibling.value='1'" title="<%:Shutdown this interface%>" value="<%:Stop%>"<%=ifattr(dynamic, "disabled", "disabled")%> />
- <% end %>
-
- <input type="button" class="cbi-button cbi-button-action important" onclick="location.href='<%=url("admin/network/network", net[1])%>'" title="<%:Edit this interface%>" value="<%:Edit%>" id="<%=net[1]%>-ifc-edit"<%=ifattr(dynamic, "disabled", "disabled")%> />
-
- <input type="hidden" name="cbid.network.<%=net[1]%>.__delete__" value="" />
- <input type="submit" name="cbi.apply" class="cbi-button cbi-button-negative" onclick="iface_delete(event)" value="<%:Delete%>"<%=ifattr(dynamic, "disabled", "disabled")%> />
- </div>
- </div>
- </div>
- <% end %>
- </div>
- </div>
- <div class="cbi-section-create">
- <input type="button" class="cbi-button cbi-button-add" value="<%:Add new interface...%>" onclick="location.href='<%=url("admin/network/iface_add")%>'" />
- </div>
-]])
-
local _, net
local ifaces, netlist = { }, { }
@@ -102,6 +49,8 @@ table.sort(netlist,
end)
s = m:section(TypedSection, "interface", translate("Interface Overview"))
+s.template = "admin_network/iface_overview"
+s.netlist = netlist
function s.cfgsections(self)
local _, net, sl = nil, nil, { }
@@ -113,12 +62,6 @@ function s.cfgsections(self)
return sl
end
-function s.render(self)
- tpl_networks:render({
- netlist = netlist
- })
-end
-
o = s:option(Value, "__disable__")
function o.write(self, sid, value)
@@ -138,8 +81,6 @@ function o.write(self, sid, value)
end
-m:section(SimpleSection).template = "admin_network/iface_overview_status"
-
if fs.access("/etc/init.d/dsl_control") then
local ok, boarddata = pcall(json.parse, fs.readfile("/etc/board.json"))
local modemtype = (ok == true)
diff --git a/modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi_overview.lua b/modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi_overview.lua
index 3bffb3502c..54720d6889 100644
--- a/modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi_overview.lua
+++ b/modules/luci-mod-network/luasrc/model/cbi/admin_network/wifi_overview.lua
@@ -64,68 +64,6 @@ function guess_wifi_hw(dev)
end
end
-local tpl_radio = tpl.Template(nil, [[
- <div class="cbi-section-node">
- <div class="table">
- <!-- physical device -->
- <div class="tr cbi-rowstyle-2">
- <div class="td col-2 center middle">
- <span class="ifacebadge"><img src="<%=resource%>/icons/wifi_disabled.png" id="<%=dev:name()%>-iw-upstate" /> <%=dev:name()%></span>
- </div>
- <div class="td col-7 left middle">
- <big><strong><%=hw%></strong></big><br />
- <span id="<%=dev:name()%>-iw-devinfo"></span>
- </div>
- <div class="td middle cbi-section-actions">
- <div>
- <input type="button" class="cbi-button cbi-button-neutral" title="<%:Restart radio interface%>" value="<%:Restart%>" data-radio="<%=dev:name()%>" onclick="wifi_restart(event)" />
- <input type="button" class="cbi-button cbi-button-action important" title="<%:Find and join network%>" value="<%:Scan%>" onclick="cbi_submit(this, 'device', '<%=dev:name()%>', '<%=url('admin/network/wireless_join')%>')" />
- <input type="button" class="cbi-button cbi-button-add" title="<%:Provide new network%>" value="<%:Add%>" onclick="cbi_submit(this, 'device', '<%=dev:name()%>', '<%=url('admin/network/wireless_add')%>')" />
- </div>
- </div>
- </div>
- <!-- /physical device -->
-
- <!-- network list -->
- <% if #wnets > 0 then %>
- <% for i, net in ipairs(wnets) do local disabled = (dev:get("disabled") == "1" or net:get("disabled") == "1") %>
- <div class="tr cbi-rowstyle-<%=1 + ((i-1) % 2)%>">
- <div class="td col-2 center middle" id="<%=net:id()%>-iw-signal">
- <span class="ifacebadge" title="<%:Not associated%>"><img src="<%=resource%>/icons/signal-<%= disabled and "none" or "0" %>.png" /> 0%</span>
- </div>
- <div class="td col-7 left middle" id="<%=net:id()%>-iw-status" data-network="<%=net:id()%>" data-disabled="<%= disabled and "true" or "false" %>">
- <em><%= disabled and translate("Wireless is disabled") or translate("Collecting data...") %></em>
- </div>
- <div class="td middle cbi-section-actions">
- <div>
- <% if disabled then %>
- <input name="cbid.wireless.<%=net:name()%>.__disable__" type="hidden" value="1" />
- <input name="cbi.apply" type="submit" class="cbi-button cbi-button-neutral" title="<%:Enable this network%>" value="<%:Enable%>" onclick="this.previousElementSibling.value='0'" />
- <% else %>
- <input name="cbid.wireless.<%=net:name()%>.__disable__" type="hidden" value="0" />
- <input name="cbi.apply" type="submit" class="cbi-button cbi-button-neutral" title="<%:Disable this network%>" value="<%:Disable%>" onclick="this.previousElementSibling.value='1'" />
- <% end %>
-
- <input type="button" class="cbi-button cbi-button-action important" onclick="location.href='<%=net:adminlink()%>'" title="<%:Edit this network%>" value="<%:Edit%>" />
-
- <input name="cbid.wireless.<%=net:name()%>.__delete__" type="hidden" value="" />
- <input name="cbi.apply" type="submit" class="cbi-button cbi-button-negative" title="<%:Delete this network%>" value="<%:Remove%>" onclick="wifi_delete(event)" />
- </div>
- </div>
- </div>
- <% end %>
- <% else %>
- <div class="tr placeholder">
- <div class="td">
- <em><%:No network configured on this device%></em>
- </div>
- </div>
- <% end %>
- <!-- /network list -->
- </div>
- </div>
-]])
-
m = Map("wireless", translate("Wireless Overview"))
m:chain("network")
@@ -147,15 +85,10 @@ end
local _, dev, net
for _, dev in ipairs(ntm:get_wifidevs()) do
s = m:section(TypedSection)
+ s.template = "admin_network/wifi_overview"
s.wnets = dev:get_wifinets()
-
- function s.render(self, sid)
- tpl_radio:render({
- hw = guess_wifi_hw(dev),
- dev = dev,
- wnets = self.wnets
- })
- end
+ s.dev = dev
+ s.hw = guess_wifi_hw(dev)
function s.cfgsections(self)
local _, net, sl = nil, nil, { }
@@ -208,9 +141,6 @@ for _, dev in ipairs(ntm:get_wifidevs()) do
end
end
-s = m:section(NamedSection, "__script__")
-s.template = "admin_network/wifi_overview_status"
-
s = m:section(NamedSection, "__assoclist__")
function s.render(self, sid)
diff --git a/modules/luci-mod-network/luasrc/view/admin_network/iface_overview.htm b/modules/luci-mod-network/luasrc/view/admin_network/iface_overview.htm
new file mode 100644
index 0000000000..4fd46e2bff
--- /dev/null
+++ b/modules/luci-mod-network/luasrc/view/admin_network/iface_overview.htm
@@ -0,0 +1,53 @@
+<div class="cbi-section-node">
+ <div class="table">
+ <%
+ for i, net in ipairs(self.netlist) do
+ local z = net[3]
+ local c = z and z:get_color() or "#EEEEEE"
+ local t = z and translate("Part of zone %q" % z:name()) or translate("No zone assigned")
+ local disabled = (net[4]:get("auto") == "0")
+ local dynamic = net[4]:is_dynamic()
+ %>
+ <div class="tr cbi-rowstyle-<%=i % 2 + 1%>">
+ <div class="td col-3 center middle">
+ <div class="ifacebox">
+ <div class="ifacebox-head" style="background-color:<%=c%>" title="<%=pcdata(t)%>">
+ <strong><%=net[1]:upper()%></strong>
+ </div>
+ <div class="ifacebox-body" id="<%=net[1]%>-ifc-devices" data-network="<%=net[1]%>">
+ <img src="<%=resource%>/icons/ethernet_disabled.png" style="width:16px; height:16px" /><br />
+ <small>?</small>
+ </div>
+ </div>
+ </div>
+ <div class="td col-5 left middle" id="<%=net[1]%>-ifc-description">
+ <em><%:Collecting data...%></em>
+ </div>
+ <div class="td cbi-section-actions">
+ <div>
+ <input type="button" class="cbi-button cbi-button-neutral" onclick="iface_reconnect('<%=net[1]%>')" title="<%:Reconnect this interface%>" value="<%:Restart%>"<%=ifattr(disabled or dynamic, "disabled", "disabled")%> />
+
+ <% if disabled then %>
+ <input type="hidden" name="cbid.network.<%=net[1]%>.__disable__" value="1" />
+ <input type="submit" name="cbi.apply" class="cbi-button cbi-button-neutral" onclick="this.previousElementSibling.value='0'" title="<%:Reconnect this interface%>" value="<%:Connect%>"<%=ifattr(dynamic, "disabled", "disabled")%> />
+ <% else %>
+ <input type="hidden" name="cbid.network.<%=net[1]%>.__disable__" value="0" />
+ <input type="submit" name="cbi.apply" class="cbi-button cbi-button-neutral" onclick="this.previousElementSibling.value='1'" title="<%:Shutdown this interface%>" value="<%:Stop%>"<%=ifattr(dynamic, "disabled", "disabled")%> />
+ <% end %>
+
+ <input type="button" class="cbi-button cbi-button-action important" onclick="location.href='<%=url("admin/network/network", net[1])%>'" title="<%:Edit this interface%>" value="<%:Edit%>" id="<%=net[1]%>-ifc-edit"<%=ifattr(dynamic, "disabled", "disabled")%> />
+
+ <input type="hidden" name="cbid.network.<%=net[1]%>.__delete__" value="" />
+ <input type="submit" name="cbi.apply" class="cbi-button cbi-button-negative" onclick="iface_delete(event)" value="<%:Delete%>"<%=ifattr(dynamic, "disabled", "disabled")%> />
+ </div>
+ </div>
+ </div>
+ <% end %>
+ </div>
+</div>
+
+<div class="cbi-section-create">
+ <input type="button" class="cbi-button cbi-button-add" value="<%:Add new interface...%>" onclick="location.href='<%=url("admin/network/iface_add")%>'" />
+</div>
+
+<script type="text/javascript" src="<%=resource%>/view/network/network.js"></script>
diff --git a/modules/luci-mod-network/luasrc/view/admin_network/iface_overview_status.htm b/modules/luci-mod-network/luasrc/view/admin_network/iface_overview_status.htm
deleted file mode 100644
index 7427154a04..0000000000
--- a/modules/luci-mod-network/luasrc/view/admin_network/iface_overview_status.htm
+++ /dev/null
@@ -1,183 +0,0 @@
-<%#
- Copyright 2010-2018 Jo-Philipp Wich <jo@mein.io>
- Licensed to the public under the Apache License 2.0.
--%>
-
-<script type="text/javascript">//<![CDATA[
- function iface_reconnect(id) {
- XHR.halt();
-
- var d = document.getElementById(id + '-ifc-description');
- if (d) d.innerHTML = '<em><%:Interface is reconnecting...%></em>';
-
- (new XHR()).post('<%=url('admin/network/iface_reconnect')%>/' + id,
- { token: '<%=token%>' }, XHR.run);
- }
-
- function iface_delete(ev) {
- if (!confirm(<%=luci.http.write_json(translate('Really delete this interface? The deletion cannot be undone! You might lose access to this device if you are connected via this interface'))%>)) {
- ev.preventDefault();
- return false;
- }
-
- ev.target.previousElementSibling.value = '1';
- return true;
- }
-
- var networks = [];
-
- document.querySelectorAll('[data-network]').forEach(function(n) {
- networks.push(n.getAttribute('data-network'));
- });
-
- function render_iface(ifc) {
- return E('span', { class: 'cbi-tooltip-container' }, [
- E('img', { 'class' : 'middle', 'src': '<%=resource%>/icons/%s%s.png'.format(
- ifc.is_alias ? 'alias' : ifc.type,
- ifc.is_up ? '' : '_disabled') }),
- E('span', { 'class': 'cbi-tooltip ifacebadge large' }, [
- E('img', { 'src': '<%=resource%>/icons/%s%s.png'.format(
- ifc.type, ifc.is_up ? '' : '_disabled') }),
- E('span', { 'class': 'left' }, [
- E('strong', '<%:Type%>: '), ifc.typename, E('br'),
- E('strong', '<%:Device%>: '), ifc.ifname, E('br'),
- E('strong', '<%:Connected%>: '), ifc.is_up ? '<%:yes%>' : '<%:no%>', E('br'),
- ifc.macaddr ? E('strong', '<%:MAC%>: ') : '',
- ifc.macaddr ? ifc.macaddr : '',
- ifc.macaddr ? E('br') : '',
- E('strong', '<%:RX%>: '), '%.2mB (%d <%:Pkts.%>)'.format(ifc.rx_bytes, ifc.rx_packets), E('br'),
- E('strong', '<%:TX%>: '), '%.2mB (%d <%:Pkts.%>)'.format(ifc.tx_bytes, ifc.tx_packets)
- ])
- ])
- ]);
- }
-
- XHR.poll(5, '<%=url('admin/network/iface_status')%>/' + networks.join(','), null,
- function(x, ifcs)
- {
- if (ifcs)
- {
- for (var idx = 0; idx < ifcs.length; idx++)
- {
- var ifc = ifcs[idx];
- var html = '';
-
- var s = document.getElementById(ifc.id + '-ifc-devices');
- if (s)
- {
- while (s.firstChild)
- s.removeChild(s.firstChild);
-
- s.appendChild(render_iface(ifc));
-
- if (ifc.subdevices && ifc.subdevices.length)
- {
- var sifs = [ ' (' ];
-
- for (var j = 0; j < ifc.subdevices.length; j++)
- sifs.push(render_iface(ifc.subdevices[j]));
-
- sifs.push(')');
-
- s.appendChild(E('span', {}, sifs));
- }
-
- s.appendChild(E('br'));
- s.appendChild(E('small', {}, ifc.is_alias ? '<%:Alias of "%s"%>'.format(ifc.is_alias) : ifc.name));
- }
-
- var d = document.getElementById(ifc.id + '-ifc-description');
- if (d && ifc.proto && ifc.ifname)
- {
- var desc = null;
-
- if (ifc.is_dynamic)
- desc = '<%:Virtual dynamic interface%>';
- else if (ifc.is_alias)
- desc = '<%:Alias Interface%>';
-
- if (ifc.desc)
- desc = desc ? '%s (%s)'.format(desc, ifc.desc) : ifc.desc;
-
- html += String.format('<strong><%:Protocol%>:</strong> %h<br />', desc || '?');
-
- if (ifc.is_up)
- {
- html += String.format('<strong><%:Uptime%>:</strong> %t<br />', ifc.uptime);
- }
-
-
- if (!ifc.is_dynamic && !ifc.is_alias)
- {
- if (ifc.macaddr)
- html += String.format('<strong><%:MAC%>:</strong> %s<br />', ifc.macaddr);
-
- html += String.format(
- '<strong><%:RX%>:</strong> %.2mB (%d <%:Pkts.%>)<br />' +
- '<strong><%:TX%>:</strong> %.2mB (%d <%:Pkts.%>)<br />',
- ifc.rx_bytes, ifc.rx_packets,
- ifc.tx_bytes, ifc.tx_packets
- );
- }
-
- if (ifc.ipaddrs && ifc.ipaddrs.length)
- {
- for (var i = 0; i < ifc.ipaddrs.length; i++)
- html += String.format(
- '<strong><%:IPv4%>:</strong> %s<br />',
- ifc.ipaddrs[i]
- );
- }
-
- if (ifc.ip6addrs && ifc.ip6addrs.length)
- {
- for (var i = 0; i < ifc.ip6addrs.length; i++)
- html += String.format(
- '<strong><%:IPv6%>:</strong> %s<br />',
- ifc.ip6addrs[i]
- );
- }
-
- if (ifc.ip6prefix)
- html += String.format('<strong><%:IPv6-PD%>:</strong> %s<br />', ifc.ip6prefix);
-
- if (ifc.errors)
- {
- for (var i = 0; i < ifc.errors.length; i++)
- html += String.format(
- '<em class="error"><strong><%:Error%>:</strong> %h</em><br />',
- ifc.errors[i]
- );
- }
-
- d.innerHTML = html;
- }
- else if (d && !ifc.proto)
- {
- var e = document.getElementById(ifc.id + '-ifc-edit');
- if (e)
- e.disabled = true;
-
- d.innerHTML = String.format(
- '<em><%:Unsupported protocol type.%></em><br />' +
- '<a href="%h"><%:Install protocol extensions...%></a>',
- '<%=url("admin/system/packages")%>?query=luci-proto&display=available'
- );
- }
- else if (d && !ifc.ifname)
- {
- d.innerHTML = String.format(
- '<em><%:Network without interfaces.%></em><br />' +
- '<a href="<%=url("admin/network/network/%s")%>?tab.network.%s=physical"><%:Assign interfaces...%></a>',
- ifc.name, ifc.name
- );
- }
- else if (d)
- {
- d.innerHTML = '<em><%:Interface not present or not connected yet.%></em>';
- }
- }
- }
- }
- );
-//]]></script>
diff --git a/modules/luci-mod-network/luasrc/view/admin_network/wifi_overview.htm b/modules/luci-mod-network/luasrc/view/admin_network/wifi_overview.htm
new file mode 100644
index 0000000000..89bb404fd8
--- /dev/null
+++ b/modules/luci-mod-network/luasrc/view/admin_network/wifi_overview.htm
@@ -0,0 +1,61 @@
+<div class="cbi-section-node">
+ <div class="table">
+ <!-- physical device -->
+ <div class="tr cbi-rowstyle-2">
+ <div class="td col-2 center middle">
+ <span class="ifacebadge"><img src="<%=resource%>/icons/wifi_disabled.png" id="<%=self.dev:name()%>-iw-upstate" /> <%=self.dev:name()%></span>
+ </div>
+ <div class="td col-7 left middle">
+ <big><strong><%=self.hw%></strong></big><br />
+ <span id="<%=self.dev:name()%>-iw-devinfo"></span>
+ </div>
+ <div class="td middle cbi-section-actions">
+ <div>
+ <input type="button" class="cbi-button cbi-button-neutral" title="<%:Restart radio interface%>" value="<%:Restart%>" data-radio="<%=self.dev:name()%>" onclick="wifi_restart(event)" />
+ <input type="button" class="cbi-button cbi-button-action important" title="<%:Find and join network%>" value="<%:Scan%>" onclick="cbi_submit(this, 'device', '<%=self.dev:name()%>', '<%=url('admin/network/wireless_join')%>')" />
+ <input type="button" class="cbi-button cbi-button-add" title="<%:Provide new network%>" value="<%:Add%>" onclick="cbi_submit(this, 'device', '<%=self.dev:name()%>', '<%=url('admin/network/wireless_add')%>')" />
+ </div>
+ </div>
+ </div>
+ <!-- /physical device -->
+
+ <!-- network list -->
+ <% if #self.wnets > 0 then %>
+ <% for i, net in ipairs(self.wnets) do local disabled = (self.dev:get("disabled") == "1" or net:get("disabled") == "1") %>
+ <div class="tr cbi-rowstyle-<%=1 + ((i-1) % 2)%>">
+ <div class="td col-2 center middle" id="<%=net:id()%>-iw-signal">
+ <span class="ifacebadge" title="<%:Not associated%>"><img src="<%=resource%>/icons/signal-<%= disabled and "none" or "0" %>.png" /> 0%</span>
+ </div>
+ <div class="td col-7 left middle" id="<%=net:id()%>-iw-status" data-network="<%=net:id()%>" data-disabled="<%= disabled and "true" or "false" %>">
+ <em><%= disabled and translate("Wireless is disabled") or translate("Collecting data...") %></em>
+ </div>
+ <div class="td middle cbi-section-actions">
+ <div>
+ <% if disabled then %>
+ <input name="cbid.wireless.<%=net:name()%>.__disable__" type="hidden" value="1" />
+ <input name="cbi.apply" type="submit" class="cbi-button cbi-button-neutral" title="<%:Enable this network%>" value="<%:Enable%>" onclick="this.previousElementSibling.value='0'" />
+ <% else %>
+ <input name="cbid.wireless.<%=net:name()%>.__disable__" type="hidden" value="0" />
+ <input name="cbi.apply" type="submit" class="cbi-button cbi-button-neutral" title="<%:Disable this network%>" value="<%:Disable%>" onclick="this.previousElementSibling.value='1'" />
+ <% end %>
+
+ <input type="button" class="cbi-button cbi-button-action important" onclick="location.href='<%=net:adminlink()%>'" title="<%:Edit this network%>" value="<%:Edit%>" />
+
+ <input name="cbid.wireless.<%=net:name()%>.__delete__" type="hidden" value="" />
+ <input name="cbi.apply" type="submit" class="cbi-button cbi-button-negative" title="<%:Delete this network%>" value="<%:Remove%>" onclick="wifi_delete(event)" />
+ </div>
+ </div>
+ </div>
+ <% end %>
+ <% else %>
+ <div class="tr placeholder">
+ <div class="td">
+ <em><%:No network configured on this device%></em>
+ </div>
+ </div>
+ <% end %>
+ <!-- /network list -->
+ </div>
+</div>
+
+<script type="text/javascript" src="<%=resource%>/view/network/wireless.js"></script>
diff --git a/modules/luci-mod-network/luasrc/view/admin_network/wifi_overview_status.htm b/modules/luci-mod-network/luasrc/view/admin_network/wifi_overview_status.htm
deleted file mode 100644
index 9730bc2c92..0000000000
--- a/modules/luci-mod-network/luasrc/view/admin_network/wifi_overview_status.htm
+++ /dev/null
@@ -1,127 +0,0 @@
-<%#
- Copyright 2008-2009 Steven Barth <steven@midlink.org>
- Copyright 2008-2018 Jo-Philipp Wich <jo@mein.io>
- Licensed to the public under the Apache License 2.0.
--%>
-
-<script type="text/javascript">//<![CDATA[
- function wifi_delete(ev) {
- 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.'))%>)) {
- ev.preventDefault();
- return false;
- }
-
- ev.target.previousElementSibling.value = '1';
- return true;
- }
-
- function wifi_restart(ev) {
- XHR.halt();
-
- findParent(ev.target, '.table').querySelectorAll('[data-disabled="false"]').forEach(function(s) {
- s.innerHTML = '<em><%:Wireless is restarting...%></em>';
- });
-
- (new XHR()).post('<%=url('admin/network/wireless_reconnect')%>/' + ev.target.getAttribute('data-radio'),
- { token: '<%=token%>' }, XHR.run);
- }
-
- var networks = [ ];
-
- document.querySelectorAll('[data-network]').forEach(function(n) {
- networks.push(n.getAttribute('data-network'));
- });
-
- XHR.poll(5, '<%=url('admin/network/wireless_status')%>/' + networks.join(','), null,
- function(x, st)
- {
- if (st)
- {
- var rowstyle = 1;
- var radiostate = { };
-
- st.forEach(function(s) {
- var r = radiostate[s.device.device] || (radiostate[s.device.device] = {});
-
- s.is_assoc = (s.bssid && s.bssid != '00:00:00:00:00:00' && s.channel && s.mode != 'Unknown' && !s.disabled);
-
- r.up = r.up || s.is_assoc;
- r.channel = r.channel || s.channel;
- r.bitrate = r.bitrate || s.bitrate;
- r.frequency = r.frequency || s.frequency;
- });
-
- for( var i = 0; i < st.length; i++ )
- {
- var iw = st[i],
- sig = document.getElementById(iw.id + '-iw-signal'),
- info = document.getElementById(iw.id + '-iw-status'),
- disabled = (info && info.getAttribute('data-disabled') === 'true');
-
- var p = iw.quality;
- var q = disabled ? -1 : p;
-
- var icon;
- if (q < 0)
- icon = "<%=resource%>/icons/signal-none.png";
- else if (q == 0)
- icon = "<%=resource%>/icons/signal-0.png";
- else if (q < 25)
- icon = "<%=resource%>/icons/signal-0-25.png";
- else if (q < 50)
- icon = "<%=resource%>/icons/signal-25-50.png";
- else if (q < 75)
- icon = "<%=resource%>/icons/signal-50-75.png";
- else
- icon = "<%=resource%>/icons/signal-75-100.png";
-
-
- if (sig)
- sig.innerHTML = String.format(
- '<span class="ifacebadge" title="<%:Signal%>: %d <%:dBm%> / <%:Noise%>: %d <%:dBm%>"><img src="%s" /> %d%%</span>',
- iw.signal, iw.noise, icon, p
- );
-
- if (info)
- {
- if (iw.is_assoc)
- info.innerHTML = String.format(
- '<strong><%:SSID%>:</strong> %h | ' +
- '<strong><%:Mode%>:</strong> %s<br />' +
- '<strong><%:BSSID%>:</strong> %s | ' +
- '<strong><%:Encryption%>:</strong> %s',
- iw.ssid, iw.mode, iw.bssid,
- iw.encryption ? iw.encryption : '<%:None%>'
- );
- else
- info.innerHTML = String.format(
- '<strong><%:SSID%>:</strong> %h | ' +
- '<strong><%:Mode%>:</strong> %s<br />' +
- '<em>%s</em>',
- iw.ssid || '?', iw.mode,
- disabled ? '<em><%:Wireless is disabled%></em>'
- : '<em><%:Wireless is not associated%></em>'
- );
- }
- }
-
- for (var dev in radiostate)
- {
- var img = document.getElementById(dev + '-iw-upstate');
- if (img)
- img.src = '<%=resource%>/icons/wifi' + (radiostate[dev].up ? '' : '_disabled') + '.png';
-
- var stat = document.getElementById(dev + '-iw-devinfo');
- if (stat)
- stat.innerHTML = String.format(
- '<strong><%:Channel%>:</strong> %s (%s <%:GHz%>) | ' +
- '<strong><%:Bitrate%>:</strong> %s <%:Mbit/s%>',
- radiostate[dev].channel ? radiostate[dev].channel : '?',
- radiostate[dev].frequency ? radiostate[dev].frequency : '?',
- radiostate[dev].bitrate ? radiostate[dev].bitrate : '?'
- );
- }
- }
- }
- );
-//]]></script>