Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
15 lines
No EOL
13 KiB
JavaScript
15 lines
No EOL
13 KiB
JavaScript
|
|
define('panels/wifi/wifi_wps',['require','shared/wifi_helper'],function(require){'use strict';var WifiHelper=require('shared/wifi_helper');var wifiManager=WifiHelper.getWifiManager();var WifiWps=function(){var wifiWps={inProgress:false,_statusResetEventListeners:[],statusReset:function(){this._statusResetEventListeners.forEach(function(handler){handler();});},connect:function(options){var self=this;var req;var onSuccess=options.onSuccess||function(){};var onError=options.onError||function(){};var bssid=options.selectedAp;var method=options.selectedMethod;var pin=options.pin;if(method==='pbc'){req=wifiManager.wps({method:'pbc'});}else if(method==='myPin'){req=wifiManager.wps({method:'pin',bssid:bssid});}else{req=wifiManager.wps({method:'pin',bssid:bssid,pin:pin});}
|
|
req.onsuccess=function(){if(method==='myPin'){document.l10n.formatValue('wpsPinInput',{pin:req.result}).then(msg=>{alert(msg);self.inProgress=true;onSuccess();});}else{self.inProgress=true;onSuccess();}};req.onerror=function(){onError(req.error);};},cancel:function(options){var self=this;var onError=options.onError||function(){};var onSuccess=options.onSuccess||function(){};var req=wifiManager.wps({method:'cancel'});req.onsuccess=function(){self.inProgress=false;self.statusReset();onSuccess();};req.onerror=function(){onError(req.error);};},addEventListener:function(eventName,callback){if(eventName==='statusreset'){this._statusResetEventListeners.push(callback);}},removeEventListener:function(eventName,callback){if(eventName==='statusreset'){var index=this._statusResetEventListeners.indexOf(callback);if(index>=0){this._statusResetEventListeners.splice(index,1);}}}};return wifiWps;};return WifiWps;});define('panels/wifi/wifi_network_list',['require','modules/dialog_service','modules/wifi_utils','shared/wifi_helper','modules/wifi_context'],function(require){'use strict';var DialogService=require('modules/dialog_service');var WifiUtils=require('modules/wifi_utils');var WifiHelper=require('shared/wifi_helper');var WifiContext=require('modules/wifi_context');var wifiManager=WifiHelper.getWifiManager();var WifiNetworkList=function(elements){var list=elements.wifiAvailableNetworks;var wifiNetworkList={_scanRate:5000,_scanning:false,_autoscan:false,_index:{},_networks:{},_list:elements.wifiAvailableNetworks,clear:function(addScanningItem){this._index={};this._networks={};var wifiItems=list.querySelectorAll('li:not([data-state])');var len=wifiItems.length;for(var i=len-1;i>=0;i--){list.removeChild(wifiItems[i]);}
|
|
list.dataset.state=addScanningItem?'on':'off';},scan:function(){window.performance.measure('settingsPanelWifiVisible','wifiListStart');var self=this;if(this._scanning){return;}
|
|
if(!wifiManager.enabled||document.hidden){this._scanning=false;return;}
|
|
this._scanning=true;var req=WifiHelper.getAvailableAndKnownNetworks();req.onsuccess=function onScanSuccess(){self.clear(false);var allNetworks=req.result;var network;for(var i=0;i<allNetworks.length;++i){network=allNetworks[i];var key=WifiUtils.getNetworkKey(network);if(!self._networks[key]||network.connected){self._networks[key]=network;}else{if(!self._networks[key].connected&&network.relSignalStrength>self._networks[key].relSignalStrength){self._networks[key]=network;}}}
|
|
var networkKeys=Object.getOwnPropertyNames(self._networks);if(networkKeys.length){networkKeys.sort(function(a,b){let barDelta=WifiHelper.getSignalLevel(self._networks[b])-
|
|
WifiHelper.getSignalLevel(self._networks[a]);return(barDelta?barDelta:a.localeCompare(b));});for(var j=0;j<networkKeys.length;j++){network=self._networks[networkKeys[j]];var listItem=WifiUtils.newListItem({network:network,onClick:self._toggleNetwork.bind(self),showNotInRange:true});if(WifiHelper.isConnected(network)){list.insertBefore(listItem,elements.infoItem.nextSibling);}else{list.insertBefore(listItem,elements.scanItem);}
|
|
self._index[networkKeys[j]]=listItem;}}else{list.insertBefore(WifiUtils.newExplanationItem('noNetworksFound'),elements.scanItem);}
|
|
list.dataset.state='ready';window.performance.measure('settingsPanelWifiReady','wifiListStart');if(self._autoscan){window.setTimeout(self.scan.bind(self),self._scanRate);}
|
|
self._scanning=false;};req.onerror=function onScanError(error){self._scanning=false;window.performance.measure('settingsPanelWifiReady','wifiListStart');window.setTimeout(self.scan.bind(self),self._scanRate);};},getWpsAvailableNetworks:function(){var ssids=Object.getOwnPropertyNames(this._networks);var wpsAvailableNetworks=[];for(var i=0;i<ssids.length;i++){var network=this._networks[ssids[i]];if(WifiHelper.isWpsAvailable(network)){wpsAvailableNetworks.push(network);}}
|
|
return wpsAvailableNetworks;},set autoscan(value){this._autoscan=value;},get autoscan(){return this._autoscan;},get scanning(){return this._scanning;},_toggleNetwork:function(network){var self=this;var keys=WifiHelper.getSecurity(network);var security=(keys&&keys.length)?keys.join(', '):'';var sl=WifiHelper.getSignalLevel(network);if(WifiHelper.isConnected(network)){DialogService.show('wifi-status',{sl:sl,network:network,security:security,}).then(function(result){var type=result.type;if(type==='submit'){WifiContext.forgetNetwork(network,function(){self.scan();});}});}else if(network.password&&(network.password=='*')){WifiHelper.setPassword(network);WifiContext.associateNetwork(network);}else{var key=WifiHelper.getKeyManagement(network);switch(key){case'WEP':case'WPA-PSK':case'WPA-EAP':DialogService.show('wifi-auth',{sl:sl,security:security,network:network,}).then(function(result){var type=result.type;var authOptions=result.value;if(type==='submit'){WifiHelper.setPassword(network,authOptions.password,authOptions.identity,authOptions.eap,authOptions.authPhase2,authOptions.certificate);WifiContext.associateNetwork(network);}});break;default:WifiContext.associateNetwork(network);break;}}}};WifiContext.addEventListener('wifiEnabled',function(event){WifiUtils.updateListItemStatus({listItems:wifiNetworkList._index,activeItemDOM:list.querySelector('.active'),network:event.network,networkStatus:event.status});});WifiContext.addEventListener('wifiStatusChange',function(event){WifiUtils.updateListItemStatus({listItems:wifiNetworkList._index,activeItemDOM:list.querySelector('.active'),network:event.network,networkStatus:event.status});});WifiContext.addEventListener('wifiConnectionInfoUpdate',function(event){WifiUtils.updateNetworkSignal(event.network,event.relSignalStrength);});WifiContext.addEventListener('wifiNetworkForgotten',event=>{var networkKey=WifiUtils.getNetworkKey(event.network);var forgottenNetwork=wifiNetworkList._networks[networkKey];if(forgottenNetwork){forgottenNetwork.password='';}});return wifiNetworkList;};return WifiNetworkList;});define('panels/wifi/panel',['require','modules/dialog_service','modules/settings_panel','shared/settings_listener','panels/wifi/wifi_wps','modules/wifi_context','shared/wifi_helper'],function(require){'use strict';var DialogService=require('modules/dialog_service');var SettingsPanel=require('modules/settings_panel');var SettingsListener=require('shared/settings_listener');var WifiWps=require('panels/wifi/wifi_wps');var WifiContext=require('modules/wifi_context');var WifiHelper=require('shared/wifi_helper');var wifiManager=WifiHelper.getWifiManager();return function ctor_wifi(){var elements;return SettingsPanel({onInit:function(panel){this._settings=navigator.mozSettings;this._wifiSectionVisible=true;this._scanPending=false;this._networkListPromise=null;this._initialized=false;elements={panel:panel,wifi:panel,wpsColumn:panel.querySelector('.wps-column'),wpsInfoBlock:panel.querySelector('.wps-column small'),wpsPbcLabelBlock:panel.querySelector('.wps-column span'),wifiCheckbox:panel.querySelector('.wifi-enabled gaia-switch'),wifiAvailableNetworks:panel.querySelector('.wifi-availableNetworks'),dialogElement:panel.querySelector('.wifi-bad-credentials-dialog'),okBtn:panel.querySelector('.wifi-bad-credentials-confirm'),cancelBtn:panel.querySelector('.wifi-bad-credentials-cancel')};elements.infoItem=elements.wifiAvailableNetworks.querySelector('li[data-state="on"]');elements.scanItem=elements.wifiAvailableNetworks.querySelector('li[data-state="ready"]');elements.wifiItem=elements.wifiAvailableNetworks.querySelector('li:not([data-state])');elements.networklist={infoItem:elements.infoItem,scanItem:elements.scanItem,wifiAvailableNetworks:elements.wifiAvailableNetworks};elements.wps={wpsColumn:elements.wpsColumn,wpsInfoBlock:elements.wpsInfoBlock,wpsPbcLabelBlock:elements.wpsPbcLabelBlock};this._wps=WifiWps();this._wps.addEventListener('statusreset',function(){elements.wps.wpsPbcLabelBlock.setAttribute('data-l10n-id','wpsMessage');setTimeout(function resetWpsInfoBlock(){elements.wps.wpsPbcLabelBlock.setAttribute('data-l10n-id','wpsDescription2');},1500);});elements.scanItem.addEventListener('click',this._onScanItemClick.bind(this));elements.wifiCheckbox.addEventListener('change',this._onWifiCheckboxChange.bind(this));elements.wpsColumn.addEventListener('click',this._onWpsColumnClick.bind(this));WifiContext.addEventListener('wifiEnabled',function(){elements.wifiCheckbox.removeAttribute('disabled');this._updateNetworkState();this._networkList().then((networkList)=>{networkList.scan();});}.bind(this));WifiContext.addEventListener('wifiDisabled',function(){elements.wifiCheckbox.removeAttribute('disabled');this._networkList().then((networkList)=>{networkList.clear(false);networkList.autoscan=false;});}.bind(this));WifiContext.addEventListener('wifiStatusChange',function(event){var scanStates=new Set(['connected','connectingfailed','disconnected']);this._updateNetworkState();if(scanStates.has(event.status)){if(this._wifiSectionVisible){this._networkList().then((networkList)=>{networkList.scan();});}else{this._scanPending=true;}}}.bind(this));WifiContext.addEventListener('wifiWrongPassword',function(event){var currentNetwork=WifiContext.currentNetwork;if(currentNetwork.known===false){this._openBadCredentialsDialog(currentNetwork);}}.bind(this));window.performance.mark('wifiListStart');},onBeforeShow:function(){this._wifiSectionVisible=true;this._updateVisibilityStatus();},onShow:function(){if(!this._initialized){this._initialized=true;SettingsListener.observe('wifi.enabled',true,function(enabled){this._setMozSettingsEnabled(enabled);if(enabled){this._updateNetworkState();this._networkList().then((networkList)=>{networkList.scan();});}}.bind(this));}},onBeforeHide:function(){this._wifiSectionVisible=false;},_onWpsColumnClick:function(){var self=this;if(this._wps.inProgress){this._wps.cancel({onSuccess:function(){elements.wpsInfoBlock.setAttribute('data-l10n-id','fullStatus-wps-canceled');},onError:function(error){document.l10n.setAttributes(elements.wpsInfoBlock,'wpsCancelFailedMessageError',{error:error.name});}});}else{DialogService.show('wifi-wps',{wpsAvailableNetworks:function(){return self._networkList().then((networkList)=>{return networkList.getWpsAvailableNetworks();});}}).then(function(result){var type=result.type;var value=result.value;if(type==='submit'){self._wps.connect({pin:value.pin,selectedAp:value.selectedAp,selectedMethod:value.selectedMethod,onSuccess:function(){elements.wps.wpsPbcLabelBlock.setAttribute('data-l10n-id','wpsCancelMessage');elements.wps.wpsInfoBlock.setAttribute('data-l10n-id','fullStatus-wps-inprogress');},onError:function(error){document.l10n.setAttributes(elements.wpsInfoBlock,'fullStatus-wps-failed-error',{error:error.name});}});}});}},_onWifiCheckboxChange:function(e){var checkbox=elements.wifiCheckbox;this._settings.createLock().set({'wifi.enabled':checkbox.checked}).onerror=function(){checkbox.removeAttribute('disabled');};checkbox.setAttribute('disabled',true);},_onScanItemClick:function(){this._networkList().then((networkList)=>{networkList.clear(true);networkList.scan();});},_updateVisibilityStatus:function(){this._networkList().then((networkList)=>{if(this._scanPending){networkList.scan();this._scanPending=false;}});},_setMozSettingsEnabled:function(enabled){this._networkList().then((networkList)=>{elements.wifiCheckbox.checked=enabled;if(enabled){networkList.clear(true);elements.wpsColumn.hidden=false;}else{if(this._wps.inProgress){elements.wpsInfoBlock.setAttribute('data-l10n-id',WifiContext.wifiStatusText.id);if(WifiContext.wifiStatusText.args){elements.wpsInfoBlock.setAttribute('data-l10n-args',JSON.stringify(WifiContext.wifiStatusText.args));}else{elements.wpsInfoBlock.removeAttribute('data-l10n-args');}}
|
|
networkList.clear(false);networkList.autoscan=false;elements.wpsColumn.hidden=true;}});},_updateNetworkState:function(){var networkStatus=wifiManager.connection.status;if(this._wps.inProgress){if(networkStatus!=='disconnected'){elements.wpsInfoBlock.setAttribute('data-l10n-id',WifiContext.wifiStatusText.id);if(WifiContext.wifiStatusText.args){elements.wpsInfoBlock.setAttribute('data-l10n-args',JSON.stringify(WifiContext.wifiStatusText.args));}else{elements.wpsInfoBlock.removeAttribute('data-l10n-args');}}
|
|
if(networkStatus==='connected'||networkStatus==='wps-timedout'||networkStatus==='wps-failed'||networkStatus==='wps-overlapped'){this._wps.inProgress=false;this._wps.statusReset();}}},_openBadCredentialsDialog:function(network){DialogService.confirm({id:'wifi-bad-credentials-confirm',args:{ssid:network.ssid}},{title:'wifi-bad-credentials-title',submitButton:{id:'ok',style:'recommend'},cancelButton:'cancel',}).then((result)=>{if(result.type==='submit'){this._networkList().then((networkList)=>{networkList._toggleNetwork(network);});}});},_networkList:function(){if(!this._networkListPromise){this._networkListPromise=new Promise((resolve)=>{require(['panels/wifi/wifi_network_list'],(WifiNetworkList)=>{resolve(WifiNetworkList(elements.networklist));});});}
|
|
return this._networkListPromise;}});};}); |