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
|
|
@ -0,0 +1,200 @@
|
|||
/* exported ConfirmDialog */
|
||||
'use strict';
|
||||
|
||||
var ConfirmDialog = (function() {
|
||||
var isAnimationPlaying = false;
|
||||
var isShown = false;
|
||||
var doc = document; try { if (!document.getElementById("confirmation-message")) doc = parent.document; } catch (_) {}
|
||||
var screen = doc.getElementById('confirmation-message');
|
||||
var titleNode = screen.querySelector('h1');
|
||||
var messageNode = screen.querySelector('p');
|
||||
var action1Node = screen.querySelector('button:nth-of-type(1)');
|
||||
var action1Callback;
|
||||
var action2Node = screen.querySelector('button:nth-of-type(2)');
|
||||
var action2Callback;
|
||||
var oldzIndex;
|
||||
|
||||
var callBackAndPreventDefault = function callBackAndPreventDefault(ev) {
|
||||
if (ev.target === action1Node) {
|
||||
action1Callback();
|
||||
ev.preventDefault();
|
||||
return false;
|
||||
} else if (ev.target === action2Node) {
|
||||
action2Callback();
|
||||
ev.preventDefault();
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
var _hide = function _hide() {
|
||||
// Reset the 'confirmation-message' element and its children to their
|
||||
// initial values and hide it.
|
||||
if (!isShown) {
|
||||
return;
|
||||
}
|
||||
|
||||
titleNode.removeAttribute('data-l10n-id');
|
||||
titleNode.className = '';
|
||||
messageNode.removeAttribute('data-l10n-id');
|
||||
messageNode.className = '';
|
||||
action1Node.removeAttribute('data-l10n-id');
|
||||
action1Node.onclick = null;
|
||||
action2Node.removeAttribute('data-l10n-id');
|
||||
action2Node.onclick = null;
|
||||
screen.classList.remove('fade-in');
|
||||
screen.classList.add('fade-out');
|
||||
isAnimationPlaying = true;
|
||||
// Custom event that can be used to apply (screen reader) visibility
|
||||
// changes.
|
||||
window.dispatchEvent(new CustomEvent('confirmdialoghiding'));
|
||||
screen.addEventListener('animationend', function cd_fadeOut(ev) {
|
||||
action1Node.className = '';
|
||||
action2Node.className = '';
|
||||
isAnimationPlaying = false;
|
||||
screen.removeEventListener('animationend', cd_fadeOut);
|
||||
screen.classList.add('no-opacity');
|
||||
screen.classList.add('hide');
|
||||
isShown = false;
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Method that shows the dialog
|
||||
* @param {String} title the title of the dialog. null or empty for
|
||||
* no title.
|
||||
* @param {String} msg message for the dialog.
|
||||
* @param {Object} action1 {title, isDanger, callback} object.
|
||||
* @param {Object} action2 {title, isDanger, callback} object.
|
||||
*/
|
||||
var _show = function _show(title, msg, action1, action2, options) {
|
||||
|
||||
var setL10nAttributes = function (element, options){
|
||||
if ('string' === typeof options) {
|
||||
document.l10n.setAttributes(element, options);
|
||||
}
|
||||
|
||||
if(options.id) {
|
||||
document.l10n.setAttributes(element, options.id, options.args);
|
||||
}
|
||||
};
|
||||
|
||||
if (options && options.zIndex) {
|
||||
oldzIndex = screen.style.zIndex;
|
||||
screen.style.zIndex = options.zIndex;
|
||||
}
|
||||
else {
|
||||
oldzIndex = null;
|
||||
}
|
||||
if (title) {
|
||||
setL10nAttributes(titleNode, title);
|
||||
} else {
|
||||
titleNode.classList.add('hide');
|
||||
}
|
||||
if (msg) {
|
||||
setL10nAttributes(messageNode, msg);
|
||||
} else {
|
||||
messageNode.classList.add('hide');
|
||||
}
|
||||
if (action1) {
|
||||
if (action1.title) {
|
||||
setL10nAttributes(action1Node, action1.title);
|
||||
}
|
||||
if (action1.isDanger) {
|
||||
action1Node.classList.add('danger');
|
||||
}
|
||||
if (action1.isRecommend) {
|
||||
action1Node.classList.add('recommend');
|
||||
}
|
||||
if (action1.callback) {
|
||||
action1Callback = action1.callback;
|
||||
action1Node.onclick = callBackAndPreventDefault;
|
||||
}
|
||||
if (!action2) {
|
||||
action2Node.classList.add('hide');
|
||||
action1Node.classList.add('full');
|
||||
}
|
||||
}
|
||||
if (action2) {
|
||||
if (action2.title) {
|
||||
setL10nAttributes(action2Node, action2.title);
|
||||
}
|
||||
if (action2.isDanger) {
|
||||
action2Node.classList.add('danger');
|
||||
}
|
||||
if (action2.isRecommend) {
|
||||
action2Node.classList.add('recommend');
|
||||
}
|
||||
if (action2.callback) {
|
||||
action2Callback = action2.callback;
|
||||
action2Node.onclick = callBackAndPreventDefault;
|
||||
}
|
||||
if (!action1) {
|
||||
action1Node.classList.add('hide');
|
||||
action2Node.classList.add('full');
|
||||
}
|
||||
}
|
||||
if (isShown) {
|
||||
return;
|
||||
}
|
||||
|
||||
screen.classList.remove('hide');
|
||||
screen.classList.remove('fade-out');
|
||||
screen.classList.add('fade-in');
|
||||
isAnimationPlaying = true;
|
||||
// Custom event that can be used to apply (screen reader) visibility
|
||||
// changes.
|
||||
window.dispatchEvent(new CustomEvent('confirmdialogshowing'));
|
||||
screen.addEventListener('animationend', function cd_fadeIn(ev) {
|
||||
isAnimationPlaying = false;
|
||||
screen.removeEventListener('animationend', cd_fadeIn);
|
||||
screen.classList.remove('no-opacity');
|
||||
isShown = true;
|
||||
});
|
||||
};
|
||||
|
||||
return {
|
||||
hide: function dialog_hide() {
|
||||
// Reset the 'confirmation-message' element and its children to their
|
||||
// initial values and hide it.
|
||||
if (oldzIndex) {
|
||||
screen.style.zIndex = oldzIndex;
|
||||
oldzIndex = null;
|
||||
}
|
||||
|
||||
if (!isAnimationPlaying) {
|
||||
_hide();
|
||||
return;
|
||||
}
|
||||
|
||||
screen.addEventListener('animationend',
|
||||
function cd_hideWhenFinished(ev) {
|
||||
screen.removeEventListener('animationend', cd_hideWhenFinished);
|
||||
_hide();
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
/**
|
||||
* Method that shows the dialog
|
||||
* @param {String} title the title of the dialog. null or empty for
|
||||
* no title.
|
||||
* @param {String} msg message for the dialog.
|
||||
* @param {Object} action1 {title, isDanger, callback} object.
|
||||
* @param {Object} action2 {title, isDanger, callback} object.
|
||||
*/
|
||||
show: function dialog_show(title, msg, action1, action2, options) {
|
||||
if (!isAnimationPlaying) {
|
||||
_show(title, msg, action1, action2, options);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
screen.addEventListener('animationend',
|
||||
function cd_showWhenFinished(ev) {
|
||||
screen.removeEventListener('animationend', cd_showWhenFinished);
|
||||
_show(title, msg, action1, action2, options);
|
||||
}
|
||||
);
|
||||
}
|
||||
};
|
||||
}());
|
||||
Loading…
Reference in a new issue