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();
 | ||
| 	}
 | ||
| });
 |