mirror of
				https://github.com/Ysurac/openmptcprouter-feeds.git
				synced 2025-03-09 15:40:03 +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();
 | 
						||
	}
 | 
						||
});
 |