VulpesOS/assets/webapps/settings.gaiamobile.org/js/panels/wifi/panel.js
OverSu b38dea0597 Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
2026-09-30 23:13:03 +02:00

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