mirror of
https://github.com/Ysurac/openmptcprouter-feeds.git
synced 2025-02-13 11:01:50 +00:00
269 lines
6.9 KiB
JavaScript
269 lines
6.9 KiB
JavaScript
'use strict';
|
||
'require baseclass';
|
||
'require dom';
|
||
'require network';
|
||
'require rpc';
|
||
|
||
return baseclass.extend({
|
||
|
||
title: _('Wireless'),
|
||
|
||
params: [],
|
||
|
||
load: function() {
|
||
return Promise.all([
|
||
network.getWifiDevices(),
|
||
network.getWifiNetworks(),
|
||
network.getHostHints()
|
||
]).then(function(radios_networks_hints) {
|
||
var tasks = [];
|
||
|
||
for (var i = 0; i < radios_networks_hints[1].length; i++)
|
||
tasks.push(L.resolveDefault(radios_networks_hints[1][i].getAssocList(), []).then(L.bind(function(net, list) {
|
||
net.assoclist = list.sort(function(a, b) { return a.mac > b.mac });
|
||
}, this, radios_networks_hints[1][i])));
|
||
|
||
return Promise.all(tasks).then(function() {
|
||
return radios_networks_hints;
|
||
});
|
||
});
|
||
},
|
||
|
||
renderHtml: function() {
|
||
|
||
var container_wapper = E('div', { 'class': 'router-status-wifi dashboard-bg box-s1' });
|
||
var container_box = E('div', { 'class': 'wifi-info devices-list' });
|
||
var container_radio = E('div', { 'class': 'settings-info' });
|
||
var container_radio_item;
|
||
|
||
container_box.appendChild(E('div', { 'class': 'title'}, [
|
||
E('img', {
|
||
'src': L.resource('view/dashboard/icons/wireless.svg'),
|
||
'width': 55,
|
||
'title': this.title,
|
||
'class': 'middle'
|
||
}),
|
||
E('h3', this.title)
|
||
]));
|
||
|
||
container_box.appendChild(E('hr'));
|
||
|
||
for (var i =0; i < this.params.wifi.radios.length; i++) {
|
||
|
||
container_radio_item = E('div', { 'class': 'radio-info' })
|
||
|
||
for(var idx in this.params.wifi.radios[i]) {
|
||
var classname = idx,
|
||
radio = this.params.wifi.radios[i];
|
||
|
||
if (!radio[idx].visible) {
|
||
continue;
|
||
}
|
||
|
||
if ('actived' === idx) {
|
||
classname = radio[idx].value ? 'label label-success' : 'label label-danger';
|
||
radio[idx].value = radio[idx].value ? _('yes') : _('no');
|
||
}
|
||
|
||
container_radio_item.appendChild(
|
||
E('p', {}, [
|
||
E('span', { 'class': ''}, [ radio[idx].title + ':']),
|
||
E('span', { 'class': classname }, [ radio[idx].value ]),
|
||
])
|
||
);
|
||
}
|
||
|
||
container_radio.appendChild(container_radio_item);
|
||
}
|
||
|
||
container_box.appendChild(container_radio);
|
||
|
||
var container_devices = E('div', { 'class': 'table assoclist devices-info' }, [
|
||
E('div', { 'class': 'tr table-titles dashboard-bg' }, [
|
||
E('div', { 'class': 'th nowrap' }, _('Hostname')),
|
||
E('div', { 'class': 'th' }, _('Wireless')),
|
||
E('div', { 'class': 'th' }, _('Signal')),
|
||
E('div', { 'class': 'th' }, '%s / %s'.format( _('Up.'), _('Down.')))
|
||
])
|
||
]);
|
||
|
||
var container_devices_item;
|
||
var container_devices_list = E('div', { 'class': 'table assoclist devices-info' });
|
||
|
||
for (var i =0; i < this.params.wifi.devices.length; i++) {
|
||
container_devices_item = E('div', { 'class': 'tr cbi-rowstyle-1' });
|
||
|
||
for(var idx in this.params.wifi.devices[i]) {
|
||
var device = this.params.wifi.devices[i];
|
||
|
||
if (!device[idx].visible) {
|
||
continue;
|
||
}
|
||
|
||
var container_content;
|
||
|
||
if ('progress' == idx) {
|
||
container_content = E('div', { 'class' : 'td device-info' }, [
|
||
E('div', { 'class': 'progress' }, [
|
||
E('div', { 'class': 'progress-bar ' + device[idx].value.style, role: 'progressbar', style: 'width:'+device[idx].value.qualite+'%', 'aria-valuenow': device[idx].value.qualite, 'aria-valuemin': 0, 'aria-valuemax': 100 }),
|
||
])
|
||
]);
|
||
} else if ('rate' == idx) {
|
||
container_content = E('div', { 'class': 'td device-info' }, [
|
||
E('p', {}, [
|
||
E('span', { 'class': ''}, [ device[idx].value.rx ]),
|
||
E('br'),
|
||
E('span', { 'class': ''}, [ device[idx].value.tx ])
|
||
])
|
||
]);
|
||
} else {
|
||
container_content = E('div', { 'class': 'td device-info'}, [
|
||
E('p', {}, [
|
||
E('span', { 'class': ''}, [ device[idx].value ]),
|
||
])
|
||
]);
|
||
}
|
||
|
||
container_devices_item.appendChild(container_content);
|
||
}
|
||
|
||
container_devices_list.appendChild(container_devices_item);
|
||
}
|
||
|
||
if (this.params.wifi.devices.length > 0) {
|
||
container_devices.appendChild(container_devices_list);
|
||
container_box.appendChild(E('hr'));
|
||
container_box.appendChild(container_devices);
|
||
container_box.appendChild(container_devices_list);
|
||
container_wapper.appendChild(container_box);
|
||
}
|
||
|
||
return container_wapper;
|
||
},
|
||
|
||
renderUpdateData: function(radios, networks, hosthints) {
|
||
|
||
for (var i = 0; i < radios.sort(function(a, b) { a.getName() > b.getName() }).length; i++) {
|
||
var network_items = networks.filter(function(net) { return net.getWifiDeviceName() == radios[i].getName() });
|
||
|
||
for (var j = 0; j < network_items.length; j++) {
|
||
var net = network_items[j],
|
||
is_assoc = (net.getBSSID() != '00:00:00:00:00:00' && net.getChannel() && !net.isDisabled()),
|
||
chan = net.getChannel(),
|
||
freq = net.getFrequency(),
|
||
rate = net.getBitRate();
|
||
|
||
this.params.wifi.radios.push(
|
||
{
|
||
ssid : {
|
||
title: _('SSID'),
|
||
visible: true,
|
||
value: net.getActiveSSID() || '?'
|
||
},
|
||
|
||
actived : {
|
||
title: _('Active'),
|
||
visible: true,
|
||
value: !net.isDisabled()
|
||
},
|
||
|
||
chan : {
|
||
title: _('Channel'),
|
||
visible: true,
|
||
value: chan ? '%d (%.3f %s)'.format(chan, freq, _('GHz')) : '-'
|
||
},
|
||
|
||
rate : {
|
||
title: _('Bitrate'),
|
||
visible: true,
|
||
value: rate ? '%d %s'.format(rate, _('Mbit/s')) : '-'
|
||
},
|
||
|
||
bssid : {
|
||
title: _('BSSID'),
|
||
visible: true,
|
||
value: is_assoc ? (net.getActiveBSSID() || '-') : '-'
|
||
},
|
||
|
||
encryption : {
|
||
title: _('Encryption'),
|
||
visible: true,
|
||
value: is_assoc ? net.getActiveEncryption() : '-'
|
||
},
|
||
|
||
associations : {
|
||
title: _('Devices Connected'),
|
||
visible: true,
|
||
value: is_assoc ? (net.assoclist.length || '0') : 0
|
||
}
|
||
}
|
||
);
|
||
}
|
||
}
|
||
|
||
for (var i = 0; i < networks.length; i++) {
|
||
for (var k = 0; k < networks[i].assoclist.length; k++) {
|
||
var bss = networks[i].assoclist[k],
|
||
name = hosthints.getHostnameByMACAddr(bss.mac);
|
||
|
||
var progress_style;
|
||
var q = Math.min((bss.signal + 110) / 70 * 100, 100);
|
||
|
||
if (q == 0 || q < 25)
|
||
progress_style = 'bg-danger';
|
||
else if (q < 50)
|
||
progress_style = 'bg-warning';
|
||
else if (q < 75)
|
||
progress_style = 'bg-success';
|
||
else
|
||
progress_style = 'bg-success';
|
||
|
||
this.params.wifi.devices.push(
|
||
{
|
||
hostname : {
|
||
title: _('Hostname'),
|
||
visible: true,
|
||
value: name || '?'
|
||
},
|
||
|
||
ssid : {
|
||
title: _('SSID'),
|
||
visible: true,
|
||
value: networks[i].getActiveSSID()
|
||
},
|
||
|
||
progress : {
|
||
title: _('Channel'),
|
||
visible: true,
|
||
value: {
|
||
qualite: q,
|
||
style: progress_style
|
||
}
|
||
},
|
||
|
||
rate : {
|
||
title: _('Bitrate'),
|
||
visible: true,
|
||
value: {
|
||
rx: '%s'.format('%.2mB'.format(bss.rx.bytes)),
|
||
tx: '%s'.format('%.2mB'.format(bss.tx.bytes)),
|
||
}
|
||
}
|
||
}
|
||
);
|
||
}
|
||
}
|
||
},
|
||
|
||
render: function(data) {
|
||
|
||
this.params.wifi = {
|
||
radios: [],
|
||
devices: []
|
||
};
|
||
|
||
this.renderUpdateData(data[0], data[1], data[2]);
|
||
|
||
return this.renderHtml();
|
||
}
|
||
});
|