summaryrefslogtreecommitdiffhomepage
path: root/modules/luci-mod-network/htdocs
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2018-11-21 21:07:34 +0100
committerJo-Philipp Wich <jo@mein.io>2018-11-22 12:58:34 +0100
commitf598b10c49ff5d196baea7c92a2859da70869a5f (patch)
treeb1ebdd48b02e03532d7ca2b735c57ac275566f2b /modules/luci-mod-network/htdocs
parent7c16decdb425b6fa5c61f738f5e3d3c4486543b8 (diff)
luci-mod-network: move interface overview JS into external file
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Diffstat (limited to 'modules/luci-mod-network/htdocs')
-rw-r--r--modules/luci-mod-network/htdocs/luci-static/resources/view/network/network.js135
1 files changed, 135 insertions, 0 deletions
diff --git a/modules/luci-mod-network/htdocs/luci-static/resources/view/network/network.js b/modules/luci-mod-network/htdocs/luci-static/resources/view/network/network.js
new file mode 100644
index 0000000000..acca7cf8a5
--- /dev/null
+++ b/modules/luci-mod-network/htdocs/luci-static/resources/view/network/network.js
@@ -0,0 +1,135 @@
+function iface_reconnect(id) {
+ L.halt();
+ L.dom.content(document.getElementById(id + '-ifc-description'), E('em', _('Interface is reconnecting...')));
+ L.post(L.url('admin/network/iface_reconnect', id), L.run);
+}
+
+function iface_delete(ev) {
+ if (!confirm(_('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': L.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': L.resource('icons/%s%s.png').format(
+ ifc.type, ifc.is_up ? '' : '_disabled') }),
+ L.itemlist(E('span', { 'class': 'left' }), [
+ _('Type'), ifc.typename,
+ _('Device'), ifc.ifname,
+ _('Connected'), ifc.is_up ? _('yes') : _('no'),
+ _('MAC'), ifc.macaddr,
+ _('RX'), '%.2mB (%d %s)'.format(ifc.rx_bytes, ifc.rx_packets, _('Pkts.')),
+ _('TX'), '%.2mB (%d %s)'.format(ifc.tx_bytes, ifc.tx_packets, _('Pkts.'))
+ ])
+ ])
+ ]);
+}
+
+L.poll(5, L.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 s = document.getElementById(ifc.id + '-ifc-devices');
+ if (s) {
+ var c = [ 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(')');
+
+ c.push(E('span', {}, sifs));
+ }
+
+ c.push(E('br'));
+ c.push(E('small', {}, ifc.is_alias ? _('Alias of "%s"').format(ifc.is_alias) : ifc.name));
+
+ L.dom.content(s, c);
+ }
+
+ var d = document.getElementById(ifc.id + '-ifc-description');
+ if (d && ifc.proto && ifc.ifname) {
+ var desc = null, c = [];
+
+ 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;
+
+ L.itemlist(d, [
+ _('Protocol'), '%h'.format(desc || '?'),
+ _('Uptime'), ifc.is_up ? '%t'.format(ifc.uptime) : null,
+ _('MAC'), (!ifc.is_dynamic && !ifc.is_alias && ifc.macaddr) ? ifc.macaddr : null,
+ _('RX'), (!ifc.is_dynamic && !ifc.is_alias) ? '%.2mB (%d %s)'.format(ifc.rx_bytes, ifc.rx_packets, _('Pkts.')) : null,
+ _('TX'), (!ifc.is_dynamic && !ifc.is_alias) ? '%.2mB (%d %s)'.format(ifc.tx_bytes, ifc.tx_packets, _('Pkts.')) : null,
+ _('IPv4'), ifc.ipaddrs ? ifc.ipaddrs[0] : null,
+ _('IPv4'), ifc.ipaddrs ? ifc.ipaddrs[1] : null,
+ _('IPv4'), ifc.ipaddrs ? ifc.ipaddrs[2] : null,
+ _('IPv4'), ifc.ipaddrs ? ifc.ipaddrs[3] : null,
+ _('IPv4'), ifc.ipaddrs ? ifc.ipaddrs[4] : null,
+ _('IPv6'), ifc.ip6addrs ? ifc.ip6addrs[0] : null,
+ _('IPv6'), ifc.ip6addrs ? ifc.ip6addrs[1] : null,
+ _('IPv6'), ifc.ip6addrs ? ifc.ip6addrs[2] : null,
+ _('IPv6'), ifc.ip6addrs ? ifc.ip6addrs[3] : null,
+ _('IPv6'), ifc.ip6addrs ? ifc.ip6addrs[4] : null,
+ _('IPv6'), ifc.ip6addrs ? ifc.ip6addrs[5] : null,
+ _('IPv6'), ifc.ip6addrs ? ifc.ip6addrs[6] : null,
+ _('IPv6'), ifc.ip6addrs ? ifc.ip6addrs[7] : null,
+ _('IPv6'), ifc.ip6addrs ? ifc.ip6addrs[8] : null,
+ _('IPv6'), ifc.ip6addrs ? ifc.ip6addrs[9] : null,
+ _('IPv6-PD'), ifc.ip6prefix,
+ _('Error'), ifc.errors ? ifc.errors[0] : null,
+ _('Error'), ifc.errors ? ifc.errors[1] : null,
+ _('Error'), ifc.errors ? ifc.errors[2] : null,
+ _('Error'), ifc.errors ? ifc.errors[3] : null,
+ _('Error'), ifc.errors ? ifc.errors[4] : null,
+ ]);
+ }
+ else if (d && !ifc.proto) {
+ var e = document.getElementById(ifc.id + '-ifc-edit');
+ if (e) e.disabled = true;
+
+ var link = L.url('admin/system/packages') + '?query=luci-proto&display=available';
+ L.dom.content(d, [
+ E('em', _('Unsupported protocol type.')), E('br'),
+ E('a', { href: link }, _('Install protocol extensions...'))
+ ]);
+ }
+ else if (d && !ifc.ifname) {
+ var link = L.url('admin/network/network', ifc.name) + '?tab.network.%s=physical'.format(ifc.name);
+ L.dom.content(d, [
+ E('em', _('Network without interfaces.')), E('br'),
+ E('a', { href: link }, _('Assign interfaces...'))
+ ]);
+ }
+ else if (d) {
+ L.dom.content(d, E('em' ,_('Interface not present or not connected yet.')));
+ }
+ }
+ }
+ }
+);