156 lines
3.9 KiB
JavaScript
156 lines
3.9 KiB
JavaScript
'use strict';
|
|
|
|
angular.module('copayApp.services').factory('animationService', function(isCordova) {
|
|
var root = {};
|
|
|
|
var cachedTransitionState, cachedBackPanel;
|
|
|
|
// DISABLE ANIMATION ON DESKTOP
|
|
root.modalAnimated = {
|
|
slideUp: isCordova ? 'full animated slideInUp' : 'full',
|
|
slideRight: isCordova ? 'full animated slideInRight' : 'full',
|
|
slideOutDown: isCordova ? 'slideOutDown' : 'hideModal',
|
|
slideOutRight: isCordova ? 'slideOutRight' : 'hideModal',
|
|
};
|
|
|
|
var pageWeight = {
|
|
walletHome: 0,
|
|
copayers: -1,
|
|
cordova: -1,
|
|
payment: -1,
|
|
uriglidera: -1,
|
|
|
|
preferences: 11,
|
|
preferencesGlobal: 11,
|
|
glidera: 11,
|
|
preferencesColor: 12,
|
|
backup: 12,
|
|
preferencesAdvanced: 12,
|
|
buyGlidera: 12,
|
|
sellGlidera: 12,
|
|
preferencesGlidera: 12,
|
|
about: 12,
|
|
delete: 13,
|
|
preferencesLanguage: 12,
|
|
preferencesUnit: 12,
|
|
preferencesFee: 12,
|
|
preferencesAltCurrency: 12,
|
|
preferencesBwsUrl: 13,
|
|
preferencesHistory: 13,
|
|
preferencesAlias: 12,
|
|
preferencesEmail: 12,
|
|
export: 13,
|
|
paperWallet: 13,
|
|
logs: 13,
|
|
information: 13,
|
|
termOfUse: 13,
|
|
translators: 13,
|
|
add: 11,
|
|
create: 12,
|
|
join: 12,
|
|
import: 12,
|
|
importLegacy: 13
|
|
};
|
|
|
|
function cleanUpLater(e, e2) {
|
|
var cleanedUp = false,
|
|
timeoutID;
|
|
var cleanUp = function() {
|
|
if (cleanedUp) return;
|
|
cleanedUp = true;
|
|
e2.parentNode.removeChild(e2);
|
|
e2.innerHTML = "";
|
|
e.className = '';
|
|
cachedBackPanel = null;
|
|
cachedTransitionState = '';
|
|
if (timeoutID) {
|
|
timeoutID = null;
|
|
window.clearTimeout(timeoutID);
|
|
}
|
|
};
|
|
e.addEventListener("animationend", cleanUp, true);
|
|
e2.addEventListener("animationend", cleanUp, true);
|
|
e.addEventListener("webkitAnimationEnd", cleanUp, true);
|
|
e2.addEventListener("webkitAnimationEnd", cleanUp, true);
|
|
timeoutID = setTimeout(cleanUp, 500);
|
|
};
|
|
|
|
root.transitionAnimated = function(fromState, toState, event) {
|
|
|
|
if (isaosp)
|
|
return true;
|
|
|
|
// Animation in progress?
|
|
var x = document.getElementById('mainSectionDup');
|
|
if (x && !cachedTransitionState) {
|
|
console.log('Anim in progress');
|
|
return true;
|
|
}
|
|
|
|
var fromName = fromState.name;
|
|
var toName = toState.name;
|
|
if (!fromName || !toName)
|
|
return true;
|
|
|
|
var fromWeight = pageWeight[fromName];
|
|
var toWeight = pageWeight[toName];
|
|
|
|
|
|
var entering = null,
|
|
leaving = null;
|
|
|
|
// Horizontal Slide Animation?
|
|
if (isCordova && fromWeight && toWeight) {
|
|
if (fromWeight > toWeight) {
|
|
leaving = 'CslideOutRight';
|
|
} else {
|
|
entering = 'CslideInRight';
|
|
}
|
|
|
|
// Vertical Slide Animation?
|
|
} else if (isCordova && fromName && fromWeight >= 0 && toWeight >= 0) {
|
|
if (toWeight) {
|
|
entering = 'CslideInUp';
|
|
|
|
} else {
|
|
leaving = 'CslideOutDown';
|
|
}
|
|
|
|
// no Animation ?
|
|
} else {
|
|
return true;
|
|
}
|
|
|
|
var e = document.getElementById('mainSection');
|
|
|
|
|
|
var desiredTransitionState = (fromName || '-') + ':' + (toName || '-');
|
|
|
|
if (desiredTransitionState == cachedTransitionState) {
|
|
e.className = entering || '';
|
|
cachedBackPanel.className = leaving || '';
|
|
cleanUpLater(e, cachedBackPanel);
|
|
//console.log('USing animation', cachedTransitionState);
|
|
return true;
|
|
} else {
|
|
var sc;
|
|
// Keep prefDiv scroll
|
|
var contentDiv = e.getElementsByClassName('content');
|
|
if (contentDiv && contentDiv[0])
|
|
sc = contentDiv[0].scrollTop;
|
|
|
|
cachedBackPanel = e.cloneNode(true);
|
|
cachedBackPanel.id = 'mainSectionDup';
|
|
var c = document.getElementById('sectionContainer');
|
|
c.appendChild(cachedBackPanel);
|
|
|
|
if (sc)
|
|
cachedBackPanel.getElementsByClassName('content')[0].scrollTop = sc;
|
|
|
|
cachedTransitionState = desiredTransitionState;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return root;
|
|
});
|