VulpesOS/assets/webapps/settings.gaiamobile.org/js/panels/simpin/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

33 lines
No EOL
19 KiB
JavaScript

define('modules/dialog_manager',['require','modules/panel_cache','shared/lazy_loader'],function(require){'use strict';var PanelCache=require('modules/panel_cache');var LazyLoader=require('shared/lazy_loader');var DialogManager=function(){this.OVERLAY_SELECTOR='.settings-dialog-overlay';this._overlayDOM=document.querySelector(this.OVERLAY_SELECTOR);};DialogManager.prototype={_loadPanel:function dm__loadPanel(panelId){var promise=new Promise(function(resolve,reject){var panelElement=document.getElementById(panelId);if(panelElement.dataset.rendered){resolve();return;}
panelElement.dataset.rendered=true;if(panelElement.dataset.requireSubPanels){var selector='section[id^="'+panelElement.id+'-"]';var subPanels=document.querySelectorAll(selector);for(var i=0,il=subPanels.length;i<il;i++){LazyLoader.load([subPanels[i]]);}
LazyLoader.load([panelElement],resolve);}else{LazyLoader.load([panelElement],resolve);}});return promise;},_getPanel:function dm__getPanel(panelId){var promise=new Promise(function(resolve){PanelCache.get(panelId,function(panel){resolve(panel);});});return promise;},_showOverlay:function dm__showOverlay(show){this._overlayDOM.hidden=!show;},_transit:function dm__transit(method,dialog,options){var promise=new Promise(function(resolve){var panel=dialog.panel;panel.addEventListener('transitionend',function paintWait(evt){if((method==='close'||method==='open')&&evt.propertyName==='visibility'){if(method==='close'){panel.hidden=true;}
panel.removeEventListener('transitionend',paintWait);resolve();}});if(method==='open'){panel.hidden=false;}
setTimeout(function(){if(method==='open'){panel.classList.add('current');}else{panel.classList.remove('current');}},150);});return promise;},_open:function dm__open(dialog,options){var self=this;var foundPanel;return Promise.resolve().then(function(){return self._loadPanel(dialog.panel.id);}).then(function(){return self._getPanel(dialog.panel.id);}).then(function(panel){foundPanel=panel;return foundPanel.beforeShow(dialog.panel,options);}).then(function(){dialog.init();dialog.initUI();dialog.bindEvents();if(dialog.TRANSITION_CLASS==='zoom-in-80'){self._showOverlay(true);}
return self._transit('open',dialog,options);}).then(function(){return foundPanel.show(dialog.panel,options);});},_close:function dm__close(dialog,options){var self=this;var foundPanel;var cachedResult;return Promise.resolve().then(function(){return self._getPanel(dialog.panel.id);}).then(function(panel){foundPanel=panel;var promise;if(foundPanel.onSubmit&&options._type==='submit'){promise=foundPanel.onSubmit();}else if(foundPanel.onCancel&&options._type==='cancel'){promise=foundPanel.onCancel();}else{promise=Promise.resolve();}
return promise;}).then(function(result){cachedResult=result;return foundPanel.beforeHide();}).then(function(){return self._transit('close',dialog,options);}).then(function(){return foundPanel.hide();}).then(function(){var result;if(dialog.DIALOG_CLASS==='prompt-dialog'){result=dialog.getResult();}else if(cachedResult){result=cachedResult;}
dialog.cleanup();if(dialog.TRANSITION_CLASS==='zoom-in-80'){self._showOverlay(false);}
return result;});},_navigate:function dm__navigate(method,dialog,options){method=(method==='open')?'_open':'_close';return this[method](dialog,options);},open:function dm_open(dialog,options){return this._navigate('open',dialog,options);},close:function dm_close(dialog,type,options){options._type=type;return this._navigate('close',dialog,options);}};var dialogManager=new DialogManager();return dialogManager;});define('modules/dialog/base_dialog',['require'],function(require){'use strict';var BaseDialog=function(panelDOM,options){this.panel=panelDOM;this._options=options||{};};BaseDialog.prototype.DIALOG_CLASS='dialog';BaseDialog.prototype.TRANSITION_CLASS='fade';BaseDialog.prototype.SUBMIT_BUTTON_SELECTOR='[type="submit"]';BaseDialog.prototype.CANCEL_BUTTON_SELECTOR='[type="reset"]';BaseDialog.prototype.MESSAGE_SELECTOR='.settings-dialog-message';BaseDialog.prototype.TITLE_SELECTOR='.settings-dialog-title';BaseDialog.prototype.init=function bd_init(){this.TRANSITION_CLASS=this._options.transition||this.TRANSITION_CLASS;this.panel.classList.add(this.DIALOG_CLASS);this.panel.classList.add(this.TRANSITION_CLASS);};BaseDialog.prototype.initUI=function bd_initUI(){var message=this._options.message;var title=this._options.title;var submitButton=this._options.submitButton;var cancelButton=this._options.cancelButton;this._updateMessage(message);this._updateTitle(title);this._updateSubmitButton(submitButton);this._updateCancelButton(cancelButton);};BaseDialog.prototype.bindEvents=function bd_bindEvent(){var self=this;this.getSubmitButton().onclick=function(){self._options.onWrapSubmit();};this.getCancelButton().onclick=function(){self._options.onWrapCancel();};};BaseDialog.prototype._updateMessage=function bd__updateMessage(message){var messageDOM=this.panel.querySelector(this.MESSAGE_SELECTOR);if(messageDOM&&message){message=this._getWrapL10nObject(message);document.l10n.setAttributes(messageDOM,message.id,message.args);}};BaseDialog.prototype._updateTitle=function bd__updateTitle(title){var titleDOM=this.panel.querySelector(this.TITLE_SELECTOR);if(titleDOM&&title){title=this._getWrapL10nObject(title);document.l10n.setAttributes(titleDOM,title.id,title.args);}};BaseDialog.prototype._updateSubmitButton=function bd__update(options){var buttonDOM=this.getSubmitButton();if(buttonDOM&&options){options=this._getWrapL10nObject(options);document.l10n.setAttributes(buttonDOM,options.id,options.args);buttonDOM.className=options.style||'recommend';}};BaseDialog.prototype._updateCancelButton=function bd__updateText(options){var buttonDOM=this.getCancelButton();if(buttonDOM&&options){options=this._getWrapL10nObject(options);document.l10n.setAttributes(buttonDOM,options.id,options.args);buttonDOM.className=options.style||'';}};BaseDialog.prototype._getWrapL10nObject=function bd__getWrapL10nObject(input){if(typeof input==='string'){return{id:input,args:null};}else if(typeof input==='object'){if(typeof input.id==='undefined'){throw new Error('You forgot to put l10nId - '+
JSON.stringify(input));}else{return{id:input.id,args:input.args||null,style:input.style};}}else{throw new Error('You are using the wrong L10nObject, '+'please check its format again');}};BaseDialog.prototype.getDOM=function bd_getDOM(){return this.panel;};BaseDialog.prototype.getSubmitButton=function bd_getSubmitButton(){return this.panel.querySelector(this.SUBMIT_BUTTON_SELECTOR);};BaseDialog.prototype.getCancelButton=function bd_getCancelButton(){return this.panel.querySelector(this.CANCEL_BUTTON_SELECTOR);};BaseDialog.prototype.cleanup=function bd_cleanup(){if(this.DIALOG_CLASS!=='panel-dialog'){this._updateTitle('settings-'+this.DIALOG_CLASS+'-header');this._updateSubmitButton('ok');this._updateCancelButton('cancel');}
this.panel.classList.remove(this.DIALOG_CLASS);this.panel.classList.remove(this.TRANSITION_CLASS);};return BaseDialog;});define('modules/dialog/panel_dialog',['require','modules/dialog/base_dialog'],function(require){'use strict';var BaseDialog=require('modules/dialog/base_dialog');var PanelDialog=function(panelDOM,options){BaseDialog.call(this,panelDOM,options);};PanelDialog.prototype=Object.create(BaseDialog.prototype);PanelDialog.prototype.constructor=PanelDialog;PanelDialog.prototype.DIALOG_CLASS='panel-dialog';PanelDialog.prototype.TRANSITION_CLASS='fade';return function ctor_PanelDialog(panelDOM,options){return new PanelDialog(panelDOM,options);};});define('modules/dialog/alert_dialog',['require','modules/dialog/base_dialog'],function(require){'use strict';var BaseDialog=require('modules/dialog/base_dialog');var AlertDialog=function(panelDOM,options){BaseDialog.call(this,panelDOM,options);};AlertDialog.prototype=Object.create(BaseDialog.prototype);AlertDialog.prototype.constructor=AlertDialog;AlertDialog.prototype.DIALOG_CLASS='alert-dialog';AlertDialog.prototype.TRANSITION_CLASS='fade';AlertDialog.prototype.bindEvents=function(){var self=this;this.getSubmitButton().onclick=function(){self._options.onWrapSubmit();};};return function ctor_alertDialog(panelDOM,options){return new AlertDialog(panelDOM,options);};});define('modules/dialog/confirm_dialog',['require','modules/dialog/base_dialog'],function(require){'use strict';var BaseDialog=require('modules/dialog/base_dialog');var ConfirmDialog=function(panelDOM,options){BaseDialog.call(this,panelDOM,options);};ConfirmDialog.prototype=Object.create(BaseDialog.prototype);ConfirmDialog.prototype.constructor=ConfirmDialog;ConfirmDialog.prototype.DIALOG_CLASS='confirm-dialog';ConfirmDialog.prototype.TRANSITION_CLASS='fade';ConfirmDialog.prototype.bindEvents=function(){var self=this;this.getSubmitButton().onclick=function(){self._options.onWrapSubmit();};this.getCancelButton().onclick=function(){self._options.onWrapCancel();};};return function ctor_confirmDialog(panelDOM,options){return new ConfirmDialog(panelDOM,options);};});define('modules/dialog/prompt_dialog',['require','modules/dialog/base_dialog'],function(require){'use strict';var BaseDialog=require('modules/dialog/base_dialog');var PromptDialog=function(panelDOM,options){BaseDialog.call(this,panelDOM,options);};PromptDialog.prototype=Object.create(BaseDialog.prototype);PromptDialog.prototype.constructor=PromptDialog;PromptDialog.prototype.DIALOG_CLASS='prompt-dialog';PromptDialog.prototype.TRANSITION_CLASS='fade';PromptDialog.prototype.INPUT_SELECTOR='.settings-dialog-input';PromptDialog.prototype.bindEvents=function(){var self=this;this.getSubmitButton().onclick=function(){self._options.onWrapSubmit();};this.getCancelButton().onclick=function(){self._options.onWrapCancel();};};PromptDialog.prototype.initUI=function(){BaseDialog.prototype.initUI.call(this);this.getInput().value=this._options.defaultValue||'';};PromptDialog.prototype.getInput=function(){return this.panel.querySelector(this.INPUT_SELECTOR);};PromptDialog.prototype.getResult=function(){return this.getInput().value;};return function ctor_promptDialog(panelDOM,options){return new PromptDialog(panelDOM,options);};});define('modules/dialog_service',['require','settings','modules/defer','modules/dialog_manager','modules/dialog/panel_dialog','modules/dialog/alert_dialog','modules/dialog/confirm_dialog','modules/dialog/prompt_dialog'],function(require){'use strict';var Settings=require('settings');var Defer=require('modules/defer');var DialogManager=require('modules/dialog_manager');var PanelDialog=require('modules/dialog/panel_dialog');var AlertDialog=require('modules/dialog/alert_dialog');var ConfirmDialog=require('modules/dialog/confirm_dialog');var PromptDialog=require('modules/dialog/prompt_dialog');var DialogService=function(){this._navigating=false;this._pendingRequests=[];this._settingsAlertDialogId='settings-alert-dialog';this._settingsBaseDialogId='settings-base-dialog';this._settingsConfirmDialogId='settings-confirm-dialog';this._settingsPromptDialogId='settings-prompt-dialog';};DialogService.prototype={alert:function(message,userOptions){var options=userOptions||{};return this.show(this._settingsAlertDialogId,{type:'alert',message:message,title:options.title,submitButton:options.submitButton});},confirm:function(message,userOptions){var options=userOptions||{};return this.show(this._settingsConfirmDialogId,{type:'confirm',message:message,title:options.title,submitButton:options.submitButton,cancelButton:options.cancelButton});},prompt:function(message,userOptions){var options=userOptions||{};return this.show(this._settingsPromptDialogId,{type:'prompt',message:message,title:options.title,defaultValue:options.defaultValue,submitButton:options.submitButton,cancelButton:options.cancelButton});},show:function dm_show(panelId,userOptions,_pendingDefer){var self=this;var defer;var dialog;var dialogDOM=document.getElementById(panelId);var currentPanel=Settings.currentPanel;var options=userOptions||{};if(_pendingDefer){defer=_pendingDefer;}else{defer=Defer();}
if(this._navigating){this._pendingRequests.push({defer:defer,panelId:panelId,userOptions:userOptions});}else{if('#'+panelId===currentPanel){defer.reject('You are showing the same panel #'+panelId);}else{options.onWrapSubmit=function(){DialogManager.close(dialog,'submit',options).then(function(result){defer.resolve({type:'submit',value:result});self._navigating=false;self._execPendingRequest();});};options.onWrapCancel=function(){DialogManager.close(dialog,'cancel',options).then(function(result){defer.resolve({type:'cancel',value:result});self._navigating=false;self._execPendingRequest();});};switch(options.type){case'alert':dialog=AlertDialog(dialogDOM,options);break;case'confirm':dialog=ConfirmDialog(dialogDOM,options);break;case'prompt':dialog=PromptDialog(dialogDOM,options);break;default:dialog=PanelDialog(dialogDOM,options);break;}
this._navigating=true;DialogManager.open(dialog,options);}}
return defer.promise;},_execPendingRequest:function(){var request=this._pendingRequests.pop();if(request){this.show(request.panelId,request.userOptions,request.defer);}}};var dialogService=new DialogService();return dialogService;});define('panels/simpin/simpin',['require','shared/airplane_mode_helper','shared/simslot_manager','modules/dialog_service','shared/sanitizer','shared/toaster','modules/sim_security'],function(require){'use strict';var AirplaneModeHelper=require('shared/airplane_mode_helper');var SIMSlotManager=require('shared/simslot_manager');var DialogService=require('modules/dialog_service');var Sanitizer=require('shared/sanitizer');var Toaster=require('shared/toaster');var SimSecurity=require('modules/sim_security');var SimPin=function(elements){this._elements=elements;};SimPin.prototype={init:function simpin_init(){AirplaneModeHelper.ready(()=>{this.conns=window.navigator.mozMobileConnections;this.iccManager=window.navigator.mozIccManager;this.isAirplaneMode=(AirplaneModeHelper.getStatus()==='enabled');this._elements.simPinContainer.addEventListener('click',this);this._elements.simPinContainer.addEventListener('change',this.simPinSwitched.bind(this));this.addIccDetectedEvent();this.addIccUndetectedEvent();this.addAirplaneModeChangeEvent();this.initSimPinBack();this.initSimPinsUI();this.updateSimPinsUI();this.addChangeEventOnIccs();});},simPinView:function({simIndex,simPinArgs}){return Sanitizer.escapeHTML`
<li class="simpin-enabled simpin-enabled-${simIndex}
simpin-${simIndex}">
<gaia-switch data-ignore data-sim-index="${simIndex}">
<label data-l10n-id="simPinWithIndex"
data-l10n-args="${simPinArgs}"></label>
</gaia-switch>
</li>
<li class="simpin-change simpin-change-${simIndex} simpin-${simIndex}"
hidden>
<a class="menu-item" href="#" data-sim-index="${simIndex}"
data-type="changeSimPin">
<span data-l10n-id="changeSimPin"></span>
</a>
</li>`;},initSimPinBack:function simpin_initSimPinBack(){this._elements.simPinHeader.dataset.href=SIMSlotManager.isMultiSIM()?'#sim-manager':'#root';},initSimPinsUI:function simpin_initSimPinsUI(){var simPinHTMLs=[];[].forEach.call(this.conns,(conn,index)=>{var simPinIndex=index+1;if(!SIMSlotManager.isMultiSIM()){simPinIndex='';}
simPinHTMLs.push(this.simPinView({'simIndex':index.toString(),'simPinArgs':JSON.stringify({'index':simPinIndex})}));});this._elements.simPinContainer.innerHTML=simPinHTMLs.join('');},updateSimPinUI:function simpin_updateSimPinUI(cardIndex){var iccId=this.conns[cardIndex].iccId;var icc=this.iccManager.getIccById(iccId);var changeSimPinItem=this._elements.simPinContainer.querySelector('.simpin-change-'+cardIndex);var simPinCheckbox=this._elements.simPinContainer.querySelector('.simpin-enabled-'+cardIndex+' gaia-switch');var isSimAvailable=icc&&icc.cardState&&icc.cardState!=='unknown';if(!isSimAvailable||this.isAirplaneMode){simPinCheckbox.disabled=true;changeSimPinItem.hidden=true;return Promise.resolve();}
return SimSecurity.getCardLock(cardIndex,'pin').then((result)=>{var enabled=result.enabled;simPinCheckbox.disabled=false;simPinCheckbox.checked=enabled;changeSimPinItem.hidden=!enabled;},()=>{console.log('onerror');console.log('cardIndex',cardIndex);});},updateSimPinsUI:function simpin_updateSimPinsUI(){[].forEach.call(this.conns,(simcard,cardIndex)=>{this.updateSimPinUI(cardIndex);});},handleEvent:function simpin_handleEvent(evt){var target=evt.target;var cardIndex=target.dataset&&target.dataset.simIndex;var type=target.dataset&&target.dataset.type;cardIndex=parseInt(cardIndex,10);switch(type){case'changeSimPin':this.changeSimPin(cardIndex);break;}},simPinSwitched:function simpin_simPinSwitched(evt){var target=evt.target;var cardIndex=target.dataset&&target.dataset.simIndex;cardIndex=parseInt(cardIndex,10);this.checkSimPin(target,cardIndex);},checkSimPin:function simpin_checkSimPin(checkbox,cardIndex){var enabled=checkbox.checked;var iccId=this.conns[cardIndex].iccId;var icc=this.iccManager.getIccById(iccId);switch(icc.cardState){case'pukRequired':return DialogService.show('simpin-dialog',{method:'unlock_puk',cardIndex:cardIndex}).then((result)=>{var type=result.type;if(type==='submit'){checkbox.checked=true;this.updateSimPinUI(cardIndex);}else{checkbox.checked=!enabled;this.updateSimPinUI(cardIndex);}});default:var action=enabled?'enable_lock':'disable_lock';return DialogService.show('simpin-dialog',{method:action,cardIndex:cardIndex}).then((result)=>{var type=result.type;if(type==='submit'){this.updateSimPinUI(cardIndex);}else{checkbox.checked=!enabled;this.updateSimPinUI(cardIndex);}});}},changeSimPin:function(cardIndex){return DialogService.show('simpin-dialog',{method:'change_pin',cardIndex:cardIndex}).then(function(result){var type=result.type;if(type==='submit'){var toast;if(SIMSlotManager.isMultiSIM()){toast={messageL10nId:'simPinChangedSuccessfullyWithIndex',messageL10nArgs:{'index':+(cardIndex)+1},latency:3000,useTransition:true};}else{toast={messageL10nId:'simPinChangedSuccessfully',latency:3000,useTransition:true};}
Toaster.showToast(toast);}});},addIccDetectedEvent:function simpin_addIccDetectedEvent(){this.iccManager.addEventListener('iccdetected',(evt)=>{var iccId=evt.iccId;var icc=this.iccManager.getIccById(iccId);if(icc){var cardIndex=this.getCardIndexByIccId(iccId);this.updateSimPinUI(cardIndex);this.addChangeEventOnIccByIccId(iccId);}});},addIccUndetectedEvent:function simpin_addIccDetectedEvent(){this.iccManager.addEventListener('iccundetected',(evt)=>{this.updateSimPinsUI();});},addAirplaneModeChangeEvent:function simpin_addAirplaneModeChangeEvent(){AirplaneModeHelper.addEventListener('statechange',(status)=>{this.isAirplaneMode=(status==='enabled');this.updateSimPinsUI();});},addChangeEventOnIccs:function simpin_addChangeEventOnIccs(){for(var i=0;i<this.conns.length;i++){var iccId=this.conns[i].iccId;var icc=this.iccManager.getIccById(iccId);if(icc){this.addChangeEventOnIccByIccId(iccId);}}},addChangeEventOnIccByIccId:function simpin_addChangeEventOnIccByIccId(iccId){var icc=this.iccManager.getIccById(iccId);if(icc){icc.addEventListener('cardstatechange',()=>{var cardIndex=this.getCardIndexByIccId(iccId);this.updateSimPinUI(cardIndex);});}},getCardIndexByIccId:function simpin_getCardIndexByIccId(iccId){var cardIndex;for(var i=0;i<this.conns.length;i++){if(this.conns[i].iccId==iccId){cardIndex=i;}}
return cardIndex;}};return function ctor_simpin(elements){return new SimPin(elements);};});define('panels/simpin/panel',['require','modules/settings_panel','panels/simpin/simpin'],function(require){'use strict';var SettingsPanel=require('modules/settings_panel');var SimPin=require('panels/simpin/simpin');return function ctor_simpin_panel(){return SettingsPanel({onInit:function(panel){var elements={};elements.simPinContainer=panel.querySelector('.simpin-container');elements.simPinHeader=panel.querySelector('.simpin-header');var simpin=SimPin(elements);simpin.init();}});};});