VulpesOS/assets/webapps/settings.gaiamobile.org/js/modules/dialog_service.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('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;});