/// /// /// /* © Microsoft. All rights reserved. This library is supported for use in Windows Tailored Apps only. Build: 6.2.8059.0 Version: 0.5 */ WinJS.Namespace.define("WinJS.UI", {}); (function (WinJS) { var thisWinUI = WinJS.UI; var mstransform = "-ms-transform"; var OffsetArray = WinJS.Class.define (function (offset, defOffset) { // Constructor if (Array.isArray(offset) && offset.length > 0) { this.offsetArray = offset; } else if (offset && offset.hasOwnProperty("top") && offset.hasOwnProperty("left")) { this.offsetArray = [offset]; } else if (defOffset) { this.offsetArray = defOffset; } else { this.offsetArray = [{ top: "0px", left: "11px" }]; // Default to 11 pixel from the left } }, { // Public Members getOffset: function (i) { if (i >= this.offsetArray.length) { i = this.offsetArray.length - 1; }; return this.offsetArray[i]; } }); function makeArray(elements) { if (Array.isArray(elements) || elements instanceof NodeList || elements instanceof HTMLCollection) { return elements; } else if (elements) { return [elements]; } else { return []; } } function collectOffsetArray(element, offsetArray) { var elemArray = makeArray(element); for (var i = 0; i < elemArray.length; i++) { offsetArray.push({ top: elemArray[i].offsetTop, left: elemArray[i].offsetLeft }); } } function staggerDelay(delay, delayFactor, delayCap) { return function (i, initialDelay) { var ret = initialDelay; for (var j = 0; j < i; j++) { delay *= delayFactor; ret += delay; } if (delayCap) { ret = Math.min(ret, delayCap); } return ret; }; } function getRelativeOffset(offsetArray1, offsetArray2) { for (var i = 0; i < offsetArray1.length; i++) { offsetArray1[i].top -= offsetArray2[i].top; offsetArray1[i].left -= offsetArray2[i].left; } } function setTransform(elem, transform){ if (elem.style.msTranform !== transform) { elem.style.msTransform = transform; return true; } else { return false; } } function setOffsetTranslateScale(elem, offset, scale) { return setTransform(elem, scale + "translateX(" + offset.left + ") translateY(" + offset.top + ")"); } function clearTransitionTransform(elem) { if (elem.style.msTransform === ""){ return false; } else { elem.style.msTransform = ""; return true; } } function setOpacityCallback(opacity) { return function (elem) { if (elem.style.opacity === opacity) { return false; } else { elem.style.opacity = opacity; return true; } }; } function animTranslate2DTransform(usedStyle, elemArray, offsetArray, transition) { var forceLayout = usedStyle.width; var newOffsetArray = []; collectOffsetArray(elemArray, newOffsetArray); getRelativeOffset(offsetArray, newOffsetArray); for (var i = 0; i < elemArray.length; i++) { if (offsetArray[i].top !== 0 || offsetArray[i].left !== 0) { setTransform(elemArray[i], "translateX(" + offsetArray[i].left + "px) translateY(" + offsetArray[i].top + "px)"); } } forceLayout = usedStyle.width; return thisWinUI.executeTransition(elemArray, transition); } function translateCallback(offsetArray){ return function (i) { var offset = offsetArray.getOffset(i); return mstransform + ":translate(" + offset.left + "," + offset.top + ")"; }; } function layoutTranstion(LayoutTransition, target, affected) { var offsetArray = []; var targetArray = makeArray(target); var affectedArray = makeArray(affected); collectOffsetArray(affectedArray, offsetArray); var layoutTransition = new LayoutTransition(targetArray, affectedArray, offsetArray); return layoutTransition; } var ExpandAnimation = WinJS.Class.define ( function (revealedArray, affectedArray, offsetArray) { // Constructor this.revealedArray = revealedArray; this.affectedArray = affectedArray; this.offsetArray = offsetArray; },{ // Public Members execute: function () { var usedStyle = window.getComputedStyle(this.revealedArray[0], null); var promise1 = thisWinUI.executeAnimation(this.revealedArray, { name: "e_r", delay: 200, duration: 167, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", from: "opacity: 0", to: "opacity: 1"} ); var promise2 = animTranslate2DTransform( usedStyle, this.affectedArray, this.offsetArray, {name: mstransform, delay: 0, duration: 367, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", transition: clearTransitionTransform} ); return WinJS.Promise.join([promise1, promise2]); } }); var CollapseAnimation = WinJS.Class.define ( function (hiddenArray, affectedArray, offsetArray) { // Constructor this.hiddenArray = hiddenArray; this.affectedArray = affectedArray; this.offsetArray = offsetArray; },{ // Public Members execute: function () { var usedStyle = window.getComputedStyle(this.hiddenArray[0], null); var promise1 = thisWinUI.executeAnimation(this.hiddenArray, { name: "collapse", delay: 0, duration: 167, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", from: "opacity: 1", to: "opacity : 0"} ); var promise2 = animTranslate2DTransform( usedStyle, this.affectedArray, this.offsetArray, {name: mstransform, delay: 167, duration: 367, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", transition: clearTransitionTransform} ); return WinJS.Promise.join([promise1, promise2]); } }); var RepositionAnimation = WinJS.Class.define ( function (target, elementArray, offsetArray) { // Constructor this.elementArray = elementArray; this.offsetArray = offsetArray; },{ // Public Members execute: function () { var usedStyle = window.getComputedStyle(this.elementArray[0], null); return animTranslate2DTransform( usedStyle, this.elementArray, this.offsetArray, {name: mstransform, delay : 0, stagger: staggerDelay(33, 1, 250), duration : 367, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", transition: clearTransitionTransform} ); } }); var AddToListAnimation = WinJS.Class.define ( function (addedArray, affectedArray, offsetArray) { // Constructor this.addedArray = addedArray; this.affectedArray = affectedArray; this.offsetArray = offsetArray; },{ // Public Members execute: function () { var usedStyle = window.getComputedStyle(this.addedArray[0], null); var promise1 = thisWinUI.executeAnimation(this.addedArray, [{name: "a_s", delay: 167, duration: 367, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", from: mstransform + ":scale(0.85, 0.85)", to: mstransform + ":scale(1.0, 1.0)"}, {name: "a_o", delay: 167, duration: 167, timing: "linear", from: "opacity: 0", to: "opacity: 1"}] ); var promise2 = animTranslate2DTransform( usedStyle, this.affectedArray, this.offsetArray, {name: mstransform, delay: 0, duration: 500, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", transition: clearTransitionTransform} ); return WinJS.Promise.join([promise1, promise2]); } }); var DeleteFromListAnimation = WinJS.Class.define ( function (deletedArray, remaningArray, offsetArray) { // Constructor this.deletedArray = deletedArray; this.remaningArray = remaningArray; this.offsetArray = offsetArray; },{ // Public Members execute: function () { var usedStyle = window.getComputedStyle(this.deletedArray[0], null); var promise1 = thisWinUI.executeAnimation(this.deletedArray, [{name: "d_s", delay: 0, duration: 367, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", from: mstransform + ":scale(1.0, 1.0)", to: mstransform + ":scale(0.85, 0.85)"}, {name: "d_o", delay: 0, duration: 167, timing: "linear", from: "opacity: 1", to: "opacity: 0"}] ); var promise2 = animTranslate2DTransform( usedStyle, this.remaningArray, this.offsetArray, {name: mstransform, delay: 167, duration: 500, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", transition: clearTransitionTransform} ); return WinJS.Promise.join([promise1, promise2]); } }); var AddToSearchListAnimation = WinJS.Class.define ( function (addedArray, affectedArray, offsetArray) { // Constructor this.addedArray = addedArray; this.affectedArray = affectedArray; this.offsetArray = offsetArray; },{ // Public Members execute: function () { var usedStyle = window.getComputedStyle(this.addedArray[0], null); var promise1 = thisWinUI.executeAnimation(this.addedArray, {name: "as_o", delay: 0, duration: 50, timing: "linear", from: "opacity: 0", to: "opacity: 1"} ); var promise2 = animTranslate2DTransform( usedStyle, this.affectedArray, this.offsetArray, {name: mstransform, delay: 0, duration: 300, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", transition: clearTransitionTransform} ); return WinJS.Promise.join([promise1, promise2]); } }); var DeleteFromSearchListAnimation = WinJS.Class.define ( function (deletedArray, remaningArray, offsetArray) { // Constructor this.deletedArray = deletedArray; this.remaningArray = remaningArray; this.offsetArray = offsetArray; },{ // Public Members execute: function () { var usedStyle = window.getComputedStyle(this.deletedArray[0], null); var promise1 = thisWinUI.executeAnimation(this.deletedArray, {name: "ds_o", delay: 0, duration: 50, timing: "linear", from: "opacity: 1", to: "opacity: 0"} ); var promise2 = animTranslate2DTransform( usedStyle, this.remaningArray, this.offsetArray, {name: mstransform, delay: 0, duration: 300, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", transition: clearTransitionTransform} ); return WinJS.Promise.join([promise1, promise2]); } }); var PeekAnimation = WinJS.Class.define ( function (target, elementArray, offsetArray) { // Constructor this.elementArray = elementArray; this.offsetArray = offsetArray; },{ // Public Members execute: function () { var usedStyle = window.getComputedStyle(this.elementArray[0], null); return animTranslate2DTransform( usedStyle, this.elementArray, this.offsetArray, {name: mstransform, delay : 0, duration : 2000, timing : "cubic-bezier(0.1, 0.9, 0.2, 1)", transition: clearTransitionTransform} ); } }); WinJS.Namespace.defineWithParent(thisWinUI, "Animation", { /// /// expand animation. The usage pattern is /// Call this function before expand the element, do real work to expand, /// finally call .execute method of the returning ExpandAnimation object /// /// /// Single element/element array/Node list of elements to be revealed /// /// /// Single element/element array/Node list of elements affected by the expand /// /// /// ExpandAnimation object /// createExpandAnimation: function (revealed, affected) { return layoutTranstion(ExpandAnimation, revealed, affected); }, /// /// Collapse clicked, set the element's style.display to "none", animate affected elements /// /// /// Single element/element array/Node list of elements to be collapsed. element.style.display becomes "none" /// /// /// Single element/element array/Node list of elements to affected by collapse /// /// /// Promise object to track when transition is done /// createCollapseAnimation: function (hidden, affected) { return layoutTranstion(CollapseAnimation, hidden, affected); }, /// /// reposition animation. The usage pattern is /// Call this function before reposition the elements, reposition the element, /// finally call .execute method of the returning RepositionAnimation object /// /// /// Single element/element array/Node list of elements to be repositioned /// /// /// RepositionAnimation object /// createRepositionAnimation: function (element) { return layoutTranstion(RepositionAnimation, null, element); }, /// /// Fade in element, transition opacity to 1 /// /// /// Single element/element array/Node list of elements /// /// /// Promise object to track when transition is done /// fadeIn: function (shown) { return thisWinUI.executeTransition( shown, {name: "opacity", delay: 0, duration: 167, timing: "linear", transition: setOpacityCallback(1)} ); }, /// /// Fade out element, Transition opacity to 0 /// /// /// Single element/element array/Node list of elements /// /// /// Promise object to track when transition is done /// fadeOut: function (hidden) { return thisWinUI.executeTransition( hidden, {name: "opacity", delay: 0, duration: 167, timing: "linear", transition: setOpacityCallback(0)} ); }, /// /// add to list animation. The usage pattern is /// Call this function before add the element, do real work to add an element to a list, /// finally call .execute method of the returning addtolist object /// /// /// Single element/element array/Node list of elements to be added /// /// /// Single element/element array/Node list of elements affected by the added /// /// /// AddToListAnimation object /// createAddToListAnimation: function (added, affected) { return layoutTranstion(AddToListAnimation, added, affected); }, /// /// remove from list animation. The usage pattern is /// Call this function before delete the element, do real work to remove the element from the list, /// finally call .execute method of the returning deleteAnimation object /// /// /// Single element/element array/Node list of elements to be deleted /// /// /// Single element/element array/Node list of elements remaining /// /// /// CreateDeleteFromList object /// createDeleteFromListAnimation: function (deleted, remaining) { return layoutTranstion(DeleteFromListAnimation, deleted, remaining); }, /// /// similiar to AddToList, just faster to fit the search filtering /// Call this function before add the element, do real work to add an element to a list, /// finally call .execute method of the returning addtolist object /// /// /// Single element/element array/Node list of elements to be added /// /// /// Single element/element array/Node list of elements affected by the added /// /// /// AddToListAnimation object /// createAddToSearchListAnimation: function (added, affected) { return layoutTranstion(AddToSearchListAnimation, added, affected); }, /// /// similiar to remove from list animation, just faster to fit search filtering. The usage pattern is /// Call this function before delete the element, do real work to remove the element from the list, /// finally call .execute method of the returning deleteAnimation object /// /// /// Single element/element array/Node list of elements to be deleted /// /// /// Single element/element array/Node list of elements remaining /// /// /// ExpandAnimation object /// createDeleteFromSearchListAnimation: function (deleted, remaining) { return layoutTranstion(DeleteFromSearchListAnimation, deleted, remaining); }, /// /// Show Edge UI, slide in from the edge for UI objects like appbar /// /// /// Single element/element array/Node list of elements to be slidein /// /// /// optional offset array of slide in. If length of offset is less than element, the last value of offset will be repeated /// /// /// promise object /// showEdgeUI: function (element, offset) { var offsetArray = new OffsetArray(offset); return thisWinUI.executeAnimation(element, {name: "showEdgeUI", delay: 0, duration: 367, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", fromCallback: translateCallback(offsetArray), to: mstransform + ":translate(0px, 0px)" } ); }, /// /// slide in a large object like keyboard from the edge /// /// /// Single element/element array/Node list of elements to be slided in /// /// /// optional offset array of slide in. If length of offset is less than element, the last value of offset will be repeated /// /// /// promise object /// showPanel: function (element, offset) { var offsetArray = new OffsetArray(offset); return thisWinUI.executeAnimation(element, {name: "showPanel", delay: 0, duration: 733, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", fromCallback: translateCallback(offsetArray), to: mstransform + ":translate(0px, 0px)" } ); }, /// /// hide Edge UI animation, slide out the element out to the edge /// /// /// Single element/element array/Node list of elements to be slide out /// /// /// optional offset array of slide out. If length of offset is less than element, the last value of offset will be repeated /// /// /// promise object /// hideEdgeUI: function (element, offset) { var offsetArray = new OffsetArray(offset); return thisWinUI.executeAnimation(element, {name: "hideEdgeUI", delay: 0, duration: 367, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", from: mstransform + ":translate(0px, 0px)", toCallback: translateCallback(offsetArray) } ); }, /// /// Slide out a large panel to the edge /// /// /// Single element/element array/Node list of elements to be slide out /// /// /// optional offset array of slide out. If length of offset is less than element, the last value of offset will be repeated /// /// /// promise object /// hidePanel: function (element, offset) { var offsetArray = new OffsetArray(offset); return thisWinUI.executeAnimation(element, {name: "hidePanel", delay: 0, duration: 733, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", from: mstransform + ":translate(0px, 0px)", toCallback: translateCallback(offsetArray) } ); }, /// /// Execute show Popup animation. /// /// /// Single element/element array/Node list of elements to be shown like a popup /// /// /// optional offset array of pop-in. If length of offset is less than element, the last value of offset will be repeated /// /// /// promise object /// showPopup: function (element, offset) { var offsetArray = new OffsetArray(offset,[{ top: "50px", left: "0px" }]); return thisWinUI.executeAnimation( element, [{ name: "sp_o", delay: 83, duration: 83, timing: "linear", from: "opacity: 0", to: "opacity : 1"}, { name: " sp_t", delay: 0, duration: 367, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", fromCallback: translateCallback(offsetArray), to: mstransform + ":translate(0px, 0px)"}] ); }, /// /// Hide popup ui /// /// /// Single element/element array/Node list of elements to be hidden /// /// /// promise object /// hidePopup: function (element) { return thisWinUI.executeAnimation( element, {name: "hp_o", delay: 0, duration: 83, timing: "linear", from: "opacity: 1", to: "opacity : 0"} ); }, /// /// Execute pointer down animation. Set element style transform property /// /// /// Single element/element array/Node list of elements to responding to pointer down /// /// /// promise object /// pointerDown: function (element) { return thisWinUI.executeTransition( element, {name: mstransform, delay: 0, duration: 167, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", transition: function (elem) {return setTransform(elem, "scale(0.95, 0.95)");}} ); }, /// /// Execute pointer up animation. Set element style transform property /// /// /// Single element/element array/Node list of elements respond to pointer up /// /// /// promise object /// pointerUp: function (element) { return thisWinUI.executeTransition( element, {name: mstransform, delay: 0, duration: 167, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", transition: clearTransitionTransform} ); }, /// /// Execute drag start animation. Set element style transform property on dragSource and affected /// /// /// Single element/element array/Node list of elements being dragged. /// /// /// Single element/element array/Node list of elements that are drag targets /// /// /// promise object /// dragSourceStart: function (dragSource, affected) { var promise1 = thisWinUI.executeTransition( dragSource, [{name: mstransform, delay: 0, duration: 240, timing : "cubic-bezier(0.1, 0.9, 0.2, 1)", transition: function (elem) { return setTransform(elem, "scale(1.05 , 1.05)");}}, {name: "opacity", delay: 0, duration: 240, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", transition: setOpacityCallback(0.65)}] ); var promise2 = thisWinUI.executeTransition( affected, {name: mstransform, delay: 0, duration: 240, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", transition: function (elem) { return setTransform(elem, "scale(.95, .95)");}} ); return WinJS.Promise.join([promise1, promise2]); }, /// /// Execute drag end animation. Set element style transform property on dragSource and affected /// /// /// Single element/element array/Node list of elements being dragged. /// /// /// optional offset array of drop. If length of offset is less than element, the last value of offset will be repeated /// /// /// Single element/element array/Node list of elements that are drag targets /// /// /// promise object /// dragSourceEnd: function (dragSource, offset, affected) { var flexOffset = new OffsetArray(offset); var affectedArray = makeArray(affected); // optimization, no promise object to scale to 1.0 thisWinUI.executeTransition( dragSource, [{name: mstransform, delay: 0, duration : 500, timing : "cubic-bezier(0.1, 0.9, 0.2, 1)", transition: clearTransitionTransform}, {name: "opacity", delay: 0, duration: 500, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", transition: setOpacityCallback(1.0)}] ); var promise1 = thisWinUI.executeAnimation( dragSource, {name: " dragEnd", delay: 0, duration: 500, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", fromCallback: translateCallback(flexOffset), to: mstransform + ":translate(0px, 0px)"} ); var promise2 = thisWinUI.executeTransition( affectedArray, {name: mstransform, delay : 0, duration : 500, timing : "cubic-bezier(0.1, 0.9, 0.2, 1)", transition: clearTransitionTransform} ); return WinJS.Promise.join([promise1, promise2]); }, /// /// Execute transitionContent animation /// /// /// Single element/element array/Node list of elements for incoming page /// /// /// optional offset array of entrance. If length of offset is less than element, the last value of offset will be repeated /// /// /// Single element/element array/Node list of elements for outgoing page, set opacity to 0. /// /// /// promise object /// transitionContent: function (incoming, offset, outgoing) { var offsetArray = new OffsetArray(offset,[{ top: "0px", left: "40px" }]); var promise1 = thisWinUI.executeAnimation( incoming, [{name: "opacity", delay: 160, duration: 400, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", from: "opacity: 0.0", to: "opacity : 1.0"}, {name: mstransform, delay: 0, duration: 1000, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", fromCallback: translateCallback(offsetArray), to: mstransform + ":translate(0px, 0px)"}] ); var promise2 = thisWinUI.executeTransition( outgoing, {name: "opacity", delay: 150, duration: 80, timing: "linear", transition: setOpacityCallback(0)} ); return WinJS.Promise.join([promise1, promise2]); }, /// /// Execute reveal animation. /// /// /// Single element/element array/Node list of elements that acts as the background for the revealed content. /// /// /// Single element/element array/Node list of elements that acts as the content being revealed. /// /// /// optional offset array of content entrance. If length of offset is less than the number of content elements, the last value of offset will be repeated /// /// /// Single element/element array/Node list of elements that acts as an outline for the tapped element. /// /// /// Single element/element array/Node list of elements that acts as the tapped element. /// /// /// promise object /// reveal: function (background, content, offset, outline, tapped) { var offsetArray = new OffsetArray(offset,[{ top: "0px", left: "-10px" }]); var promise1 = thisWinUI.executeAnimation( content, {name: "reveal_content", delay: 0, duration: 450, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", fromCallback: translateCallback(offsetArray), to: mstransform + ":translate(0px, 0px)" } ); var promise2 = thisWinUI.executeTransition( outline, {name: "opacity", delay: 0, duration: 50, timing: "linear", transition: setOpacityCallback(1)} ); var promise3 = thisWinUI.executeTransition( tapped, {name: mstransform, delay: 0, duration: 200, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", transition: function (elem) { return setTransform(elem, "scale(1.05 , 1.05)");}} ); return WinJS.Promise.join([promise1, promise2, promise3]); }, /// /// Execute hide animation. /// /// /// Single element/element array/Node list of elements that acts as the background for the hidden content. /// /// /// Single element/element array/Node list of elements that acts as the content being hidden. /// /// /// optional offset array of content exit. If length of offset is less than the number of content elements, the last value of offset will be repeated /// /// /// Single element/element array/Node list of elements that acts as an outline for the tapped element. /// /// /// Single element/element array/Node list of elements that acts as the tapped element. /// /// /// promise object /// hide: function (background, content, offset, outline, tapped) { var offsetArray = new OffsetArray(offset,[{ top: "0px", left: "10px" }]); var promise1 = thisWinUI.executeAnimation( content, {name: "hide_content", delay: 0, duration: 200, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", fromCallback: translateCallback(offsetArray), to: mstransform + ":translate(0px, 0px)" } ); var promise2 = thisWinUI.executeTransition( outline, {name: "opacity", delay: 0, duration: 50, timing: "linear", transition: setOpacityCallback(0)} ); var promise3 = thisWinUI.executeTransition( tapped, {name: mstransform, delay: 0, duration: 100, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", transition: clearTransitionTransform} ); return WinJS.Promise.join([promise1, promise2, promise3]); }, /// /// Execute dragBetweenEnter animation. Set element style transform property /// /// /// Single element/element array/Node list of elements that dragsource enter in between /// /// /// promise object /// dragBetweenEnter: function (target, offset) { var flexOffset = new OffsetArray(offset,[{ top: "-40px", left: "0px" }, { top: "40px", left: "0px" }]); return thisWinUI.executeTransition( target, {name: mstransform, delay: 0, duration: 60, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", transitionCallback: function (i) { return function (elem) { return setOffsetTranslateScale(elem, flexOffset.getOffset(i), "scale(.95, .95)");};} } ); }, /// /// Execute dragBetweenLeave animation. Set element style transform property /// /// /// Single element/element array/Node list of elements to be dragsource leave in between /// /// /// promise object /// dragBetweenLeave: function (target) { return thisWinUI.executeTransition( target, {name: mstransform, delay: 0, duration: 60, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", transition: function (elem) { return setTransform(elem, "scale(.95, .95)");}} ); }, /// /// Slide back an cross slide selected object when pointer is released. /// /// /// Single element/element array/Node list of elements to selected /// /// /// Single element/element array/Node list of elements that is the selection mark /// /// /// promise object /// crossSlideSelect: function (selected, selection) { var promise1 = thisWinUI.executeTransition( selected, {name: mstransform, delay: 0, duration: 300, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", transition: clearTransitionTransform} ); var promise2 = thisWinUI.executeAnimation( selection, {name: "cs_selection", delay: 0, duration: 300, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", from: "opacity: 0.0", to: "opacity : 1.0"} ); return WinJS.Promise.join([promise1, promise2]); }, /// /// Slide back an cross slide deselected object when pointer is released. /// /// /// Single element/element array/Node list of elements to deselected /// /// /// Single element/element array/Node list of elements that is the selection mark /// /// /// promise object /// crossSlideDeselect: function (deselected, selection) { var promise1 = thisWinUI.executeTransition( deselected, {name: mstransform, delay: 0, duration: 300, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", transition: clearTransitionTransform} ); var promise2 = thisWinUI.executeAnimation( selection, {name: "cs_deselection", delay: 0, duration: 300, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", from: "opacity: 1.0", to: "opacity : 0.0"} ); return WinJS.Promise.join([promise1, promise2]); }, /// /// object revealed by cross slide /// /// /// Single element/element array/Node list of elements to be revealed /// /// /// optional offset array of reveal. If length of offset is less than element, the last value of offset will be repeated /// /// /// promise object /// crossSlideReveal: function (target, offset) { var offsetArray = new OffsetArray(offset,[{ top: "-10px", left: "0px" }]); return thisWinUI.executeAnimation(target, {name: "cs_reveal", delay: 0, duration: 500, timing: "linear", fromCallback: translateCallback(offsetArray), to: mstransform + ":translate(0px, 0px)" } ); }, /// /// Execute enterPage animation /// /// /// Single element/element array/Node list of elements /// /// /// optional offset array of entrance. If length of offset is less than element, the last value of offset will be repeated /// /// /// promise object /// enterPage: function (element, offset) { var offsetArray = new OffsetArray(offset,[{ top: "0px", left: "100px" }]); var promise = thisWinUI.executeAnimation(element, [{name: "ep_o", delay: 0, stagger: staggerDelay(83, 1, 250), duration: 330, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", from: "opacity: 0", to: "opacity : 1"}, {name: "eo_t", delay: 0, stagger: staggerDelay(83, 1, 250), duration: 1000, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", fromCallback: translateCallback(offsetArray), to: mstransform + ":translate(0px, 0px)"}] ); return promise; }, /// /// Execute transitionPage animation /// /// /// Single element/element array/Node list of elements for incoming page /// /// /// optional offset array of entrance. If length of offset is less than element, the last value of offset will be repeated /// /// /// Single element/element array/Node list of elements for outgoing page /// /// /// promise object /// transitionPage: function (incoming, offset, outgoing) { var offsetArray = new OffsetArray(offset,[{ top: "0px", left: "100px" }]); var promise1 = thisWinUI.executeAnimation(incoming, [{name: "tp_o", delay: 83, stagger: staggerDelay(83, 1, 250), duration: 330, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", from: "opacity: 0", to: "opacity : 1"}, {name: "tp_t", delay: 83, stagger: staggerDelay(83, 1, 250), duration: 1000, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", fromCallback: translateCallback(offsetArray), to: mstransform + ":translate(0px, 0px)"}] ); var promise2 = thisWinUI.executeAnimation( outgoing, { name: "tp_o2", delay: 0, duration: 160, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", from: "opacity: 1", to: "opacity : 0"} ); return WinJS.Promise.join([promise1, promise2]); }, /// /// Execute crossFade animation /// /// /// Single element/element array/Node list of elements for incoming elements, set opacity to 1 /// /// /// Single element/element array/Node list of elements for outgoing elements, set opacity to 0 /// /// /// promise object /// crossFade: function (incoming, outgoing) { var promise1 = thisWinUI.executeTransition( incoming, {name: "opacity", delay: 0, duration: 167, timing: "linear", transition: setOpacityCallback(1)} ); var promise2 = thisWinUI.executeTransition( outgoing, {name: "opacity", delay: 0, duration: 167, timing: "linear", transition: setOpacityCallback(0)} ); return WinJS.Promise.join([promise1, promise2]); }, /// /// peek animation. The usage pattern is /// Call this function before reposition the elements, reposition the element, /// finally call .execute method of the returning PeekAnimation object /// /// /// Single element/element array/Node list of elements to be translated for peek /// /// /// PeekAnimation object /// createPeekAnimation: function (element) { return layoutTranstion(PeekAnimation, null, element); }, /// /// Execute updateBadge animation /// /// /// Single element/element array/Node list of elements for incoming badge /// /// /// Single element/element array/Node list of elements for outgoing badge /// /// /// optional offset array of incoming. If length of offset is less than element, the last value of offset will be repeated /// /// /// optional offset array of incoming. If length of offset is less than element, the last value of offset will be repeated /// /// /// promise object /// updateBadge: function (incoming, inOffset, outgoing, outOffset) { var inOffsetArray = new OffsetArray(inOffset,[{ top: "24px", left: "0px" }]); var outOffsetArray = new OffsetArray(outOffset,[{ top: "-24px", left: "0px" }]); var promise1 = thisWinUI.executeAnimation( incoming, [{name: "ub_o", delay: 0, duration: 367, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", from: "opacity: 0.0", to: "opacity : 1.0"}, {name: "ub_t", delay: 0, duration: 1333, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", fromCallback: translateCallback(inOffsetArray), to: mstransform + ":translate(0px, 0px)"}] ); var promise2 = thisWinUI.executeAnimation( outgoing, [{name: "ub_o2", delay: 0, duration: 167, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", from: "opacity: 1.0", to: "opacity : 0.0"}, {name: "ub_t2", delay: 0, duration: 367, timing: "cubic-bezier(0.1, 0.9, 0.2, 1)", from: mstransform + ":translate(0px, 0px)", toCallback: translateCallback(outOffsetArray)}] ); return WinJS.Promise.join([promise1, promise2]); } }); })(WinJS);