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.
This commit is contained in:
parent
93e3a48004
commit
b38dea0597
25901 changed files with 9982925 additions and 369 deletions
328
gaia/tv_apps/smart-system/js/app_install_dialogs.js
Executable file
328
gaia/tv_apps/smart-system/js/app_install_dialogs.js
Executable file
|
|
@ -0,0 +1,328 @@
|
|||
/* global SmartModalDialog, Promise, focusManager */
|
||||
(function(exports) {
|
||||
'use strict';
|
||||
|
||||
function AppInstallDialogs(containerElement) {
|
||||
this.containerElement = containerElement;
|
||||
}
|
||||
|
||||
var TYPES = Object.freeze({
|
||||
'InstallDialog': 'install',
|
||||
'InstallCancelDialog': 'installcancel',
|
||||
'UninstallDialog': 'uninstall',
|
||||
'DownloadCancelDialog': 'downloadcancel',
|
||||
'SetupAppDialog': 'setupapp',
|
||||
'AddAppDialog': 'add'
|
||||
});
|
||||
|
||||
AppInstallDialogs.TYPES = TYPES;
|
||||
|
||||
var proto = AppInstallDialogs.prototype;
|
||||
|
||||
proto.start = function aid_start() {
|
||||
this.containerElement.addEventListener('modal-dialog-closed', this);
|
||||
this.containerElement.addEventListener('modal-dialog-will-open', this);
|
||||
this._visibleDialogs = [];
|
||||
this._dialogs = [];
|
||||
};
|
||||
|
||||
proto.stop = function aid_stop() {
|
||||
this.containerElement.removeEventListener('modal-dialog-closed', this);
|
||||
this.containerElement.removeEventListener('modal-dialog-will-open', this);
|
||||
this._visibleDialogs = [];
|
||||
this.dialogs.forEach(function(dialog) {
|
||||
if (dialog.isOpened) {
|
||||
dialog.close();
|
||||
}
|
||||
});
|
||||
this._dialogs = [];
|
||||
|
||||
this._installDialog = null;
|
||||
this._installCancelDialog = null;
|
||||
this._uninstallDialog = null;
|
||||
this._setupAppDialog = null;
|
||||
this._addAppDialog = null;
|
||||
|
||||
this.containerElement.innerHTML = '';
|
||||
};
|
||||
|
||||
// install dialog
|
||||
proto._renderInstallDialog = function aid__renderInstallDialog() {
|
||||
if (this._installDialog) {
|
||||
return;
|
||||
}
|
||||
this._installDialog = new SmartModalDialog(this.containerElement);
|
||||
this._installDialog.element.classList.add('app-install-dialog');
|
||||
this._dialogs.push(this._installDialog);
|
||||
};
|
||||
|
||||
proto._showInstallDialog = function aid__showInstallDialog(options) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
this._renderInstallDialog();
|
||||
this._installDialog.open({
|
||||
'onCancel': reject,
|
||||
'message': {
|
||||
'textL10nId': {
|
||||
'id': 'install-app',
|
||||
'args': {'name': options.manifest.name }
|
||||
}
|
||||
},
|
||||
'buttonSettings': [
|
||||
{
|
||||
'textL10nId': 'cancel',
|
||||
'onClick': reject
|
||||
}, {
|
||||
'textL10nId': 'install',
|
||||
'onClick': resolve,
|
||||
'defaultFocus': true,
|
||||
'class': 'primary'
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
}.bind(this));
|
||||
};
|
||||
// end of install dialog
|
||||
|
||||
// install cancel dialog
|
||||
proto._renderInstallCancelDialog = function aid__renderInstallDialog() {
|
||||
if (this._installCancelDialog) {
|
||||
return;
|
||||
}
|
||||
this._installCancelDialog = new SmartModalDialog(this.containerElement);
|
||||
this._installCancelDialog.element.classList.add(
|
||||
'app-install-cancel-dialog');
|
||||
this._dialogs.push(this._installCancelDialog);
|
||||
};
|
||||
|
||||
proto._showInstallCancelDialog = function aid__showInstallDialog(options) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
this._renderInstallCancelDialog();
|
||||
var message = document.createElement('div');
|
||||
var lines = [ document.createElement('h1'),
|
||||
document.createElement('h1'),
|
||||
document.createElement('h1') ];
|
||||
lines[0].setAttribute('data-l10n-id', 'cancelling-will-not-refund');
|
||||
lines[1].setAttribute('data-l10n-id', 'apps-can-be-installed-later');
|
||||
lines[2].setAttribute('data-l10n-id', 'are-you-sure-you-want-to-cancel');
|
||||
lines.forEach(message.appendChild.bind(message));
|
||||
|
||||
this._installCancelDialog.open({
|
||||
'onCancel': reject,
|
||||
'customElementSettings': {
|
||||
'element': message
|
||||
},
|
||||
'buttonSettings': [
|
||||
{
|
||||
'textL10nId': 'cancel-install-button',
|
||||
'onClick': resolve,
|
||||
'defaultFocus': true
|
||||
}, {
|
||||
'textL10nId': 'resume',
|
||||
'onClick': reject
|
||||
}
|
||||
]
|
||||
});
|
||||
}.bind(this));
|
||||
};
|
||||
// end of install cancel dialog
|
||||
|
||||
// uninstall dialog
|
||||
proto._renderUninstallDialog = function aid__renderUninstallDialog() {
|
||||
if (this._uninstallDialog) {
|
||||
return;
|
||||
}
|
||||
this._uninstallDialog = new SmartModalDialog(this.containerElement);
|
||||
this._uninstallDialog.element.classList.add('app-uninstall-dialog');
|
||||
this._dialogs.push(this._uninstallDialog);
|
||||
};
|
||||
|
||||
proto._showUninstallDialog = function aid__showUninstallDialog(options) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
this._renderUninstallDialog();
|
||||
var message = options.unrecoverable ? 'unrecoverable-error-body' : {
|
||||
'id': 'delete-body',
|
||||
'args': {'name': options.manifest.name }
|
||||
};
|
||||
|
||||
var buttons = options.unrecoverable ? [{
|
||||
'textL10nId': 'delete',
|
||||
'onClick': resolve,
|
||||
'class': 'danger'
|
||||
}] : [
|
||||
{
|
||||
'textL10nId': 'cancel',
|
||||
'onClick': reject,
|
||||
'defaultFocus': true
|
||||
}, {
|
||||
'textL10nId': 'delete',
|
||||
'onClick': resolve,
|
||||
'class': 'danger'
|
||||
}
|
||||
];
|
||||
if (options.unrecoverable) {
|
||||
this._uninstallDialog.element.classList.add('unrecoverable');
|
||||
} else {
|
||||
this._uninstallDialog.element.classList.remove('unrecoverable');
|
||||
}
|
||||
|
||||
this._uninstallDialog.open({
|
||||
'onCancel': reject,
|
||||
'message': {
|
||||
'textL10nId': message
|
||||
},
|
||||
'buttonSettings': buttons
|
||||
});
|
||||
}.bind(this));
|
||||
};
|
||||
// end of uninstall dialog
|
||||
|
||||
// setup installed app dialog
|
||||
proto._renderSetupAppDialog = function aid__renderUninstallDialog() {
|
||||
if (this._setupAppDialog) {
|
||||
return;
|
||||
}
|
||||
this._setupAppDialog = new SmartModalDialog(this.containerElement);
|
||||
this._setupAppDialog.element.classList.add('setup-app-dialog');
|
||||
this._dialogs.push(this._setupAppDialog);
|
||||
};
|
||||
|
||||
proto._showSetupAppDialog = function aid__showUninstallDialog(options) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
this._renderSetupAppDialog();
|
||||
|
||||
var message = document.createElement('div');
|
||||
var lines = [ document.createElement('h1'),
|
||||
document.createElement('p')];
|
||||
navigator.mozL10n.setAttributes(lines[0], 'app-install-success',
|
||||
{ 'appName': options.manifest.name });
|
||||
lines[1].textContent = options.manifest.description;
|
||||
lines.forEach(message.appendChild.bind(message));
|
||||
this._setupAppDialog.open({
|
||||
'onCancel': reject,
|
||||
'customElementSettings': {
|
||||
'element': message
|
||||
},
|
||||
'buttonSettings': [
|
||||
{
|
||||
'textL10nId': 'later',
|
||||
'onClick': reject,
|
||||
'defaultFocus': true
|
||||
}, {
|
||||
'textL10nId': 'setup',
|
||||
'onClick': resolve,
|
||||
'class': 'primary'
|
||||
}
|
||||
]
|
||||
});
|
||||
}.bind(this));
|
||||
};
|
||||
// end of uninstall dialog
|
||||
|
||||
// add app to apps dialog
|
||||
proto._renderAddAppDialog = function aid__renderUninstallDialog() {
|
||||
if (this._addAppDialog) {
|
||||
return;
|
||||
}
|
||||
this._addAppDialog = new SmartModalDialog(this.containerElement);
|
||||
this._addAppDialog.element.classList.add('add-app-dialog');
|
||||
this._dialogs.push(this._addAppDialog);
|
||||
};
|
||||
|
||||
proto._showAddAppDialog = function aid__showAddAppDialog(options) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
this._renderAddAppDialog();
|
||||
|
||||
this._addAppDialog.open({
|
||||
'onCancel': reject,
|
||||
'message': {
|
||||
'textL10nId': {
|
||||
'id': 'add-app',
|
||||
'args': {
|
||||
'name': options.manifest.name
|
||||
}
|
||||
}
|
||||
},
|
||||
'buttonSettings': [
|
||||
{
|
||||
'textL10nId': 'cancel',
|
||||
'onClick': reject
|
||||
}, {
|
||||
'textL10nId': 'add',
|
||||
'onClick': resolve,
|
||||
'defaultFocus': true,
|
||||
'class': 'primary'
|
||||
}
|
||||
]
|
||||
});
|
||||
}.bind(this));
|
||||
};
|
||||
// end of add app to apps dialog
|
||||
|
||||
proto.show = function aid_show(type, options) {
|
||||
switch(type) {
|
||||
case TYPES.InstallDialog:
|
||||
return this._showInstallDialog(options);
|
||||
case TYPES.InstallCancelDialog:
|
||||
return this._showInstallCancelDialog(options);
|
||||
case TYPES.UninstallDialog:
|
||||
return this._showUninstallDialog(options);
|
||||
case TYPES.DownloadCancelDialog:
|
||||
// do nothing because we don't have such UI to trigger it.
|
||||
return Promise.resolve();
|
||||
case TYPES.SetupAppDialog:
|
||||
return this._showSetupAppDialog(options);
|
||||
case TYPES.AddAppDialog:
|
||||
return this._showAddAppDialog(options);
|
||||
default:
|
||||
return Promise.reject();
|
||||
}
|
||||
};
|
||||
|
||||
proto.handleEvent = function aid_handleEvent(evt) {
|
||||
switch(evt.type) {
|
||||
case 'modal-dialog-will-open':
|
||||
this._visibleDialogs.push(evt.detail);
|
||||
focusManager.focus();
|
||||
break;
|
||||
case 'modal-dialog-closed':
|
||||
var idx = this._visibleDialogs.indexOf(evt.detail);
|
||||
if (idx > -1) {
|
||||
this._visibleDialogs.splice(idx, 1);
|
||||
}
|
||||
focusManager.focus();
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
proto.focus = function aid_focus() {
|
||||
var topMostDialog = this.getTopMostDialog();
|
||||
if (topMostDialog) {
|
||||
document.activeElement.blur();
|
||||
topMostDialog.focus();
|
||||
}
|
||||
};
|
||||
|
||||
proto.getTopMostDialog = function aid_getTopMostDialog() {
|
||||
return this.hasVisibleDialog() ?
|
||||
this._visibleDialogs[this._visibleDialogs.length - 1] : null;
|
||||
};
|
||||
|
||||
proto.getTopMostDialogElement = function aid_getTopMostDialogElement() {
|
||||
var topMostDialog = this.getTopMostDialog();
|
||||
return topMostDialog ? topMostDialog.element : null;
|
||||
};
|
||||
|
||||
proto.hasVisibleDialog = function aid_hasVisibleDialog() {
|
||||
return this._visibleDialogs.length > 0;
|
||||
};
|
||||
|
||||
proto.hideAll = function aid_hideAll() {
|
||||
this._visibleDialogs.forEach(function(dialog) {
|
||||
dialog.close();
|
||||
});
|
||||
};
|
||||
|
||||
exports.AppInstallDialogs = AppInstallDialogs;
|
||||
|
||||
})(window);
|
||||
Loading…
Reference in a new issue