transition-debug.js revision 2e49faa8717cc2acbd7ab2aac237061848568a6c
959c053d56a076109993a2f14094d20b1f8c0c17Matt SweeneyYUI.add('transition-native', function(Y) {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
9c94a3bab3da130a453194d151f33f11cd53f44eMatt Sweeney/**
9c94a3bab3da130a453194d151f33f11cd53f44eMatt Sweeney* Provides the transition method for Node.
4527b08ced97d1bf5f88cf786302fd66eb80a35bMatt Sweeney* Transition has no API of its own, but adds the transition method to Node.
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney*
60dcf3ebba038d9ec57d617a7395a9bff15802fcMatt Sweeney* @module transition
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney* @requires node-style
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney*/
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeneyvar CAMEL_VENDOR_PREFIX = '',
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney VENDOR_PREFIX = '',
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney DOCUMENT = Y.config.doc,
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney DOCUMENT_ELEMENT = 'documentElement',
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney TRANSITION = 'transition',
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney TRANSITION_CAMEL = 'Transition',
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney TRANSITION_PROPERTY_CAMEL,
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney TRANSITION_PROPERTY,
564c5c8d77e1fe074bfa96133bfdbbd0707c1ed3Matt Sweeney TRANSITION_DURATION,
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney TRANSITION_TIMING_FUNCTION,
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney TRANSITION_DELAY,
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney TRANSITION_END,
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney ON_TRANSITION_END,
ef982fe144b380cd6cd8dd1bc6ba74c7210033f9Matt Sweeney TRANSFORM_CAMEL,
ef982fe144b380cd6cd8dd1bc6ba74c7210033f9Matt Sweeney
ef982fe144b380cd6cd8dd1bc6ba74c7210033f9Matt Sweeney EMPTY_OBJ = {},
ef982fe144b380cd6cd8dd1bc6ba74c7210033f9Matt Sweeney
ef982fe144b380cd6cd8dd1bc6ba74c7210033f9Matt Sweeney VENDORS = [
ef982fe144b380cd6cd8dd1bc6ba74c7210033f9Matt Sweeney 'Webkit',
ef982fe144b380cd6cd8dd1bc6ba74c7210033f9Matt Sweeney 'Moz'
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney ],
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney VENDOR_TRANSITION_END = {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney Webkit: 'webkitTransitionEnd'
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney },
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney/**
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney * A class for constructing transition instances.
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney * Adds the "transition" method to Node.
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney * @class Transition
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney * @constructor
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney */
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney
f01d121976553130cab6089d35c71d5b947d1204Matt SweeneyTransition = function() {
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney this.init.apply(this, arguments);
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney};
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney
f01d121976553130cab6089d35c71d5b947d1204Matt SweeneyTransition._toCamel = function(property) {
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney property = property.replace(/-([a-z])/gi, function(m0, m1) {
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney return m1.toUpperCase();
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney });
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney return property;
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney};
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt SweeneyTransition.SHOW_TRANSITION = 'fadeIn';
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt SweeneyTransition.HIDE_TRANSITION = 'fadeOut';
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt SweeneyTransition._toHyphen = function(property) {
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney property = property.replace(/([A-Z]?)([a-z]+)([A-Z]?)/g, function(m0, m1, m2, m3) {
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney var str = '';
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney if (m1) {
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney str += '-' + m1.toLowerCase();
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney }
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney str += m2;
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney if (m3) {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney str += '-' + m3.toLowerCase();
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney }
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney return str;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney });
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney return property;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney};
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt SweeneyTransition.useNative = false;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt SweeneyY.Array.each(VENDORS, function(val) { // then vendor specific
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney var property = val + TRANSITION_CAMEL;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney if (property in DOCUMENT[DOCUMENT_ELEMENT].style) {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney CAMEL_VENDOR_PREFIX = val;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney VENDOR_PREFIX = Transition._toHyphen(val) + '-';
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney Transition.useNative = true;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney Transition.supported = true; // TODO: remove
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney }
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney});
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt SweeneyTRANSITION_CAMEL = CAMEL_VENDOR_PREFIX + 'Transition';
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt SweeneyTRANSITION_PROPERTY_CAMEL = CAMEL_VENDOR_PREFIX + 'TransitionProperty';
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt SweeneyTRANSITION_PROPERTY = VENDOR_PREFIX + 'transition-property';
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt SweeneyTRANSITION_DURATION = VENDOR_PREFIX + 'transition-duration';
959c053d56a076109993a2f14094d20b1f8c0c17Matt SweeneyTRANSITION_TIMING_FUNCTION = VENDOR_PREFIX + 'transition-timing-function';
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt SweeneyTRANSITION_DELAY = VENDOR_PREFIX + 'transition-delay';
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt SweeneyTRANSITION_END = 'transitionend';
959c053d56a076109993a2f14094d20b1f8c0c17Matt SweeneyON_TRANSITION_END = 'on' + CAMEL_VENDOR_PREFIX.toLowerCase() + 'transitionend';
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt SweeneyTRANSITION_END = VENDOR_TRANSITION_END[CAMEL_VENDOR_PREFIX] || TRANSITION_END;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt SweeneyTRANSFORM_CAMEL = CAMEL_VENDOR_PREFIX + 'Transform';
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt SweeneyTransition.fx = {};
448834d88f7c2818b5a70125bba193051806ccf9Matt SweeneyTransition.toggles = {};
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
448834d88f7c2818b5a70125bba193051806ccf9Matt SweeneyTransition._hasEnd = {};
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt SweeneyTransition._reKeywords = /^(?:node|duration|iterations|easing|delay|on|onstart|onend)$/i;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt SweeneyY.Node.DOM_EVENTS[TRANSITION_END] = 1;
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt SweeneyTransition.NAME = 'transition';
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt SweeneyTransition.DEFAULT_EASING = 'ease';
448834d88f7c2818b5a70125bba193051806ccf9Matt SweeneyTransition.DEFAULT_DURATION = 0.5;
5985d0db35cae8ef4c1a022bb03ac15792ff51adMatt SweeneyTransition.DEFAULT_DELAY = 0;
5985d0db35cae8ef4c1a022bb03ac15792ff51adMatt Sweeney
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt SweeneyTransition._nodeAttrs = {};
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt SweeneyTransition.prototype = {
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney constructor: Transition,
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney init: function(node, config) {
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney var anim = this;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney anim._node = node;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney if (!anim._running && config) {
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney anim._config = config;
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney node._transition = anim; // cache for reuse
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney anim._duration = ('duration' in config) ?
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney config.duration: anim.constructor.DEFAULT_DURATION;
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney anim._delay = ('delay' in config) ?
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney config.delay: anim.constructor.DEFAULT_DELAY;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney anim._easing = config.easing || anim.constructor.DEFAULT_EASING;
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney anim._count = 0; // track number of animated properties
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney anim._running = false;
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney }
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney return anim;
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney },
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney addProperty: function(prop, config) {
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney var anim = this,
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney node = this._node,
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney uid = Y.stamp(node),
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney nodeInstance = Y.one(node),
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney attrs = Transition._nodeAttrs[uid],
5985d0db35cae8ef4c1a022bb03ac15792ff51adMatt Sweeney computed,
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney compareVal,
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney dur,
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney attr,
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney val;
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney
5985d0db35cae8ef4c1a022bb03ac15792ff51adMatt Sweeney if (!attrs) {
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney attrs = Transition._nodeAttrs[uid] = {};
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney }
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney attr = attrs[prop];
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney // might just be a value
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney if (config && config.value !== undefined) {
5985d0db35cae8ef4c1a022bb03ac15792ff51adMatt Sweeney val = config.value;
5985d0db35cae8ef4c1a022bb03ac15792ff51adMatt Sweeney } else if (config !== undefined) {
5985d0db35cae8ef4c1a022bb03ac15792ff51adMatt Sweeney val = config;
5985d0db35cae8ef4c1a022bb03ac15792ff51adMatt Sweeney config = EMPTY_OBJ;
5985d0db35cae8ef4c1a022bb03ac15792ff51adMatt Sweeney }
5985d0db35cae8ef4c1a022bb03ac15792ff51adMatt Sweeney
5985d0db35cae8ef4c1a022bb03ac15792ff51adMatt Sweeney if (typeof val === 'function') {
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney val = val.call(nodeInstance, nodeInstance);
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney }
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney if (attr && attr.transition) {
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney // take control if another transition owns this property
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney if (attr.transition !== anim) {
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney attr.transition._count--; // remapping attr to this transition
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney }
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney }
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney anim._count++; // properties per transition
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney // make 0 async and fire events
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney dur = ((typeof config.duration != 'undefined') ? config.duration :
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney anim._duration) || 0.0001;
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney attrs[prop] = {
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney value: val,
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney duration: dur,
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney delay: (typeof config.delay != 'undefined') ? config.delay :
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney anim._delay,
ac08645fa535c4f48d2fa888fee02423ff9afe17Matt Sweeney
ac08645fa535c4f48d2fa888fee02423ff9afe17Matt Sweeney easing: config.easing || anim._easing,
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney transition: anim
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney };
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney // native end event doesnt fire when setting to same value
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney // supplementing with timer
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney // val may be a string or number (height: 0, etc), but computedStyle is always string
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney computed = Y.DOM.getComputedStyle(node, prop);
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney compareVal = (typeof val === 'string') ? computed : parseFloat(computed);
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney
ac08645fa535c4f48d2fa888fee02423ff9afe17Matt Sweeney if (Transition.useNative && compareVal === val) {
ac08645fa535c4f48d2fa888fee02423ff9afe17Matt Sweeney setTimeout(function() {
ac08645fa535c4f48d2fa888fee02423ff9afe17Matt Sweeney anim._onNativeEnd.call(node, {
ac08645fa535c4f48d2fa888fee02423ff9afe17Matt Sweeney propertyName: prop,
ac08645fa535c4f48d2fa888fee02423ff9afe17Matt Sweeney elapsedTime: dur
ac08645fa535c4f48d2fa888fee02423ff9afe17Matt Sweeney });
ac08645fa535c4f48d2fa888fee02423ff9afe17Matt Sweeney }, dur * 1000);
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney }
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney },
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
59171f95d68f00afaea1a329e4a463e2cb75bec0Matt Sweeney removeProperty: function(prop) {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney var anim = this,
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney attrs = Transition._nodeAttrs[Y.stamp(anim._node)];
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
59171f95d68f00afaea1a329e4a463e2cb75bec0Matt Sweeney if (attrs && attrs[prop]) {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney delete attrs[prop];
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney anim._count--;
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney }
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney },
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney initAttrs: function(config) {
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney var attr,
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney node = this._node;
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney if (config.transform && !config[TRANSFORM_CAMEL]) {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney config[TRANSFORM_CAMEL] = config.transform;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney delete config.transform; // TODO: copy
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney }
3f4cbe6edb218980892f798d09f41c804aeaa301Matt Sweeney
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney for (attr in config) {
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney if (config.hasOwnProperty(attr) && !Transition._reKeywords.test(attr)) {
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney this.addProperty(attr, config[attr]);
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney // when size is auto or % webkit starts from zero instead of computed
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney // (https://bugs.webkit.org/show_bug.cgi?id=16020)
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney // TODO: selective set
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney if (node.style[attr] === '') {
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney Y.DOM.setStyle(node, attr, Y.DOM.getComputedStyle(node, attr));
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney }
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney }
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney }
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney },
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney /**
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney * Starts or an animation.
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney * @method run
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney * @chainable
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney * @private
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney */
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney run: function(callback) {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney var anim = this,
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney node = anim._node,
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney config = anim._config,
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney data = {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney type: 'transition:start',
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney config: config
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney };
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney if (!anim._running) {
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney anim._running = true;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney //anim._node.fire('transition:start', data);
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney if (config.on && config.on.start) {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney config.on.start.call(Y.one(node), data);
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney }
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney anim.initAttrs(anim._config);
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney anim._callback = callback;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney anim._start();
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney }
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney return anim;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney },
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney _start: function() {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney this._runNative();
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney },
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney _prepDur: function(dur) {
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney dur = parseFloat(dur);
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney return dur + 's';
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney },
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney _runNative: function(time) {
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney var anim = this,
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney node = anim._node,
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney uid = Y.stamp(node),
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney style = node.style,
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney computed = getComputedStyle(node),
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney attrs = Transition._nodeAttrs[uid],
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney cssText = '',
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney cssTransition = computed[Transition._toCamel(TRANSITION_PROPERTY)],
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney transitionText = TRANSITION_PROPERTY + ': ',
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney duration = TRANSITION_DURATION + ': ',
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney easing = TRANSITION_TIMING_FUNCTION + ': ',
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney delay = TRANSITION_DELAY + ': ',
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney hyphy,
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney attr,
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney name;
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney
564c5c8d77e1fe074bfa96133bfdbbd0707c1ed3Matt Sweeney // preserve existing transitions
564c5c8d77e1fe074bfa96133bfdbbd0707c1ed3Matt Sweeney if (cssTransition !== 'all') {
564c5c8d77e1fe074bfa96133bfdbbd0707c1ed3Matt Sweeney transitionText += cssTransition + ',';
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney duration += computed[Transition._toCamel(TRANSITION_DURATION)] + ',';
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney easing += computed[Transition._toCamel(TRANSITION_TIMING_FUNCTION)] + ',';
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney delay += computed[Transition._toCamel(TRANSITION_DELAY)] + ',';
ac08645fa535c4f48d2fa888fee02423ff9afe17Matt Sweeney
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney }
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney // run transitions mapped to this instance
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney for (name in attrs) {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney hyphy = Transition._toHyphen(name);
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney attr = attrs[name];
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney if (attrs.hasOwnProperty(name) && attr.transition === anim) {
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney if (name in node.style) { // only native styles allowed
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney duration += anim._prepDur(attr.duration) + ',';
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney delay += anim._prepDur(attr.delay) + ',';
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney easing += (attr.easing) + ',';
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney transitionText += hyphy + ',';
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney cssText += hyphy + ': ' + attr.value + '; ';
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney } else {
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney this.removeProperty(name);
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney }
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney }
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney }
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney transitionText = transitionText.replace(/,$/, ';');
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney duration = duration.replace(/,$/, ';');
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney easing = easing.replace(/,$/, ';');
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney delay = delay.replace(/,$/, ';');
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney // only one native end event per node
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney if (!Transition._hasEnd[uid]) {
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney //anim._detach = Y.on(TRANSITION_END, anim._onNativeEnd, node);
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney //node[ON_TRANSITION_END] = anim._onNativeEnd;
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney node.addEventListener(TRANSITION_END, anim._onNativeEnd, '');
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney Transition._hasEnd[uid] = true;
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney }
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney //setTimeout(function() { // allow updates to apply (size fix, onstart, etc)
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney style.cssText += transitionText + duration + easing + delay + cssText;
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney //}, 1);
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney },
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney _end: function(elapsed) {
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney var anim = this,
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney node = anim._node,
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney callback = anim._callback,
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney config = anim._config,
ac08645fa535c4f48d2fa888fee02423ff9afe17Matt Sweeney data = {
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney type: 'transition:end',
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney config: config,
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney elapsedTime: elapsed
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney },
564c5c8d77e1fe074bfa96133bfdbbd0707c1ed3Matt Sweeney
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney nodeInstance = Y.one(node);
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney anim._running = false;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney anim._callback = null;
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney if (node) {
564c5c8d77e1fe074bfa96133bfdbbd0707c1ed3Matt Sweeney if (config.on && config.on.end) {
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney setTimeout(function() { // IE: allow previous update to finish
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney config.on.end.call(nodeInstance, data);
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney // nested to ensure proper fire order
056ec5e3a7c6ad7819398c8c3e6e225386c4bbd0Matt Sweeney if (callback) {
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney callback.call(nodeInstance, data);
056ec5e3a7c6ad7819398c8c3e6e225386c4bbd0Matt Sweeney }
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney }, 1);
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney } else if (callback) {
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney setTimeout(function() { // IE: allow previous update to finish
056ec5e3a7c6ad7819398c8c3e6e225386c4bbd0Matt Sweeney callback.call(nodeInstance, data);
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney }, 1);
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney }
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney //node.fire('transition:end', data);
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney }
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney },
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney _endNative: function(name) {
056ec5e3a7c6ad7819398c8c3e6e225386c4bbd0Matt Sweeney var node = this._node,
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney value = node.ownerDocument.defaultView.getComputedStyle(node, '')[Transition._toCamel(TRANSITION_PROPERTY)];
056ec5e3a7c6ad7819398c8c3e6e225386c4bbd0Matt Sweeney
056ec5e3a7c6ad7819398c8c3e6e225386c4bbd0Matt Sweeney if (typeof value === 'string') {
3f4cbe6edb218980892f798d09f41c804aeaa301Matt Sweeney value = value.replace(new RegExp('(?:^|,\\s)' + name + ',?'), ',');
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney value = value.replace(/^,|,$/, '');
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney node.style[TRANSITION_CAMEL] = value;
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney }
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney },
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney _onNativeEnd: function(e) {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney var node = this,
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney uid = Y.stamp(node),
6ae23e4adfd7a02fb24e8240a363e0decf126c95Matt Sweeney event = e,//e._event,
564c5c8d77e1fe074bfa96133bfdbbd0707c1ed3Matt Sweeney name = Transition._toCamel(event.propertyName),
6ae23e4adfd7a02fb24e8240a363e0decf126c95Matt Sweeney elapsed = event.elapsedTime,
6ae23e4adfd7a02fb24e8240a363e0decf126c95Matt Sweeney attrs = Transition._nodeAttrs[uid],
6ae23e4adfd7a02fb24e8240a363e0decf126c95Matt Sweeney attr = attrs[name],
564c5c8d77e1fe074bfa96133bfdbbd0707c1ed3Matt Sweeney anim = (attr) ? attr.transition : null,
564c5c8d77e1fe074bfa96133bfdbbd0707c1ed3Matt Sweeney data,
564c5c8d77e1fe074bfa96133bfdbbd0707c1ed3Matt Sweeney config;
6ae23e4adfd7a02fb24e8240a363e0decf126c95Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney if (anim) {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney anim.removeProperty(name);
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney anim._endNative(name);
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney config = anim._config[name];
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney data = {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney type: 'propertyEnd',
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney propertyName: name,
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney elapsedTime: elapsed,
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney config: config
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney };
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney
ef982fe144b380cd6cd8dd1bc6ba74c7210033f9Matt Sweeney if (config && config.on && config.on.end) {
ef982fe144b380cd6cd8dd1bc6ba74c7210033f9Matt Sweeney config.on.end.call(Y.one(node), data);
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney }
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney
ef982fe144b380cd6cd8dd1bc6ba74c7210033f9Matt Sweeney //node.fire('transition:propertyEnd', data);
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney if (anim._count <= 0) { // after propertyEnd fires
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney anim._end(elapsed);
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney }
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney }
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney },
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney destroy: function() {
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney var anim = this;
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney /*
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney if (anim._detach) {
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney anim._detach.detach();
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney }
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney */
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney //anim._node[ON_TRANSITION_END] = null;
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney node.removeEventListener(TRANSITION_END, anim._onNativeEnd, false);
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney anim._node = null;
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney }
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney};
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt SweeneyY.Transition = Transition;
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt SweeneyY.TransitionNative = Transition; // TODO: remove
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney/**
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney * Animate one or more css properties to a given value. Requires the "transition" module.
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney * <pre>example usage:
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney * Y.one('#demo').transition({
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney * duration: 1, // in seconds, default is 0.5
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney * easing: 'ease-out', // default is 'ease'
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney * delay: '1', // delay start for 1 second, default is 0
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney *
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney * height: '10px',
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney * width: '10px',
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney *
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney * opacity: { // per property
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney * value: 0,
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney * duration: 2,
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney * delay: 2,
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney * easing: 'ease-in'
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney * }
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney * });
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney * </pre>
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney * @for Node
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney * @method transition
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney * @param {Object} config An object containing one or more style properties, a duration and an easing.
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney * @param {Function} callback A function to run after the transition has completed.
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney * @chainable
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney*/
959c053d56a076109993a2f14094d20b1f8c0c17Matt SweeneyY.Node.prototype.transition = function(name, config, callback) {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney var
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney transitionAttrs = Transition._nodeAttrs[Y.stamp(this._node)],
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney anim = (transitionAttrs) ? transitionAttrs.transition || null : null,
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney fxConfig,
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney prop;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney if (typeof name === 'string') { // named effect, pull config from registry
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney if (typeof config === 'function') {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney callback = config;
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney config = null;
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney }
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney fxConfig = Transition.fx[name];
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney if (config && typeof config !== 'boolean') {
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney config = Y.clone(config);
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney for (prop in fxConfig) {
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney if (fxConfig.hasOwnProperty(prop)) {
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney if (! (prop in config)) {
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney config[prop] = fxConfig[prop];
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney }
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney }
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney }
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney } else {
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney config = fxConfig;
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney }
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney } else { // name is a config, config is a callback or undefined
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney callback = config;
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney config = name;
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney }
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney if (anim && !anim._running) {
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney anim.init(this, config);
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney } else {
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney anim = new Transition(this._node, config);
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney }
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney anim.run(callback);
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney return this;
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney};
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt SweeneyY.Node.prototype.show = function(name, config, callback) {
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney this._show(); // show prior to transition
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney if (name && Y.Transition) {
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney if (typeof name !== 'string' && !name.push) { // named effect or array of effects supercedes default
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney if (typeof config === 'function') {
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney callback = config;
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney config = name;
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney }
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney name = Transition.SHOW_TRANSITION;
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney }
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney this.transition(name, config, callback);
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney }
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney else if (name && !Y.Transition) { Y.log('unable to transition show; missing transition module', 'warn', 'node'); }
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney return this;
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney};
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeneyvar _wrapCallBack = function(anim, fn, callback) {
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney return function() {
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney if (fn) {
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney fn.call(anim);
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney }
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney if (callback) {
ef982fe144b380cd6cd8dd1bc6ba74c7210033f9Matt Sweeney callback.apply(anim._node, arguments);
ef982fe144b380cd6cd8dd1bc6ba74c7210033f9Matt Sweeney }
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney };
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney};
ef982fe144b380cd6cd8dd1bc6ba74c7210033f9Matt Sweeney
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt SweeneyY.Node.prototype.hide = function(name, config, callback) {
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney if (name && Y.Transition) {
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney if (typeof config === 'function') {
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney callback = config;
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney config = null;
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney }
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney callback = _wrapCallBack(this, this._hide, callback); // wrap with existing callback
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney if (typeof name !== 'string' && !name.push) { // named effect or array of effects supercedes default
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney if (typeof config === 'function') {
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney callback = config;
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney config = name;
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney }
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney name = Transition.HIDE_TRANSITION;
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney }
a8592deb8f7e9124b473044326ef8cfadc4281d5Matt Sweeney this.transition(name, config, callback);
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney } else if (name && !Y.Transition) { Y.log('unable to transition hide; missing transition module', 'warn', 'node'); // end if on nex
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney } else {
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney this._hide();
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney }
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney return this;
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney};
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney
a8592deb8f7e9124b473044326ef8cfadc4281d5Matt Sweeney/**
a8592deb8f7e9124b473044326ef8cfadc4281d5Matt Sweeney * Animate one or more css properties to a given value. Requires the "transition" module.
a8592deb8f7e9124b473044326ef8cfadc4281d5Matt Sweeney * <pre>example usage:
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney * Y.all('.demo').transition({
f0d88feb1b7e3a775e0e9c8648faf84a32250546Matt Sweeney * duration: 1, // in seconds, default is 0.5
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney * easing: 'ease-out', // default is 'ease'
f0d88feb1b7e3a775e0e9c8648faf84a32250546Matt Sweeney * delay: '1', // delay start for 1 second, default is 0
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney *
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney * height: '10px',
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney * width: '10px',
f0d88feb1b7e3a775e0e9c8648faf84a32250546Matt Sweeney *
f0d88feb1b7e3a775e0e9c8648faf84a32250546Matt Sweeney * opacity: { // per property
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney * value: 0,
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney * duration: 2,
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney * delay: 2,
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney * easing: 'ease-in'
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney * }
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney * });
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney * </pre>
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney * @for NodeList
f0d88feb1b7e3a775e0e9c8648faf84a32250546Matt Sweeney * @method transition
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney * @param {Object} config An object containing one or more style properties, a duration and an easing.
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney * @param {Function} callback A function to run after the transition has completed. The callback fires
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney * once per item in the NodeList.
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney * @chainable
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney*/
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt SweeneyY.NodeList.prototype.transition = function(config, callback) {
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney var nodes = this._nodes,
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney i = 0,
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney node;
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney while ((node = nodes[i++])) {
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney Y.one(node).transition(config, callback);
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney }
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney return this;
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney};
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt SweeneyY.Node.prototype.toggleView = function(name, on, callback) {
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney this._toggles = this._toggles || [];
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney callback = arguments[arguments.length - 1];
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney if (typeof name == 'boolean') { // no transition, just toggle
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney on = name;
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney name = null;
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney }
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney name = name || Y.Transition.DEFAULT_TOGGLE;
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney if (typeof on == 'undefined' && name in this._toggles) { // reverse current toggle
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney on = ! this._toggles[name];
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney }
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney on = (on) ? 1 : 0;
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney if (on) {
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney this._show();
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney } else {
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney callback = _wrapCallBack(this, this._hide, callback);
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney }
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney this._toggles[name] = on;
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney this.transition(Y.Transition.toggles[name][on], callback);
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney return this;
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney};
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney
484ded111840f4104ab556e0628b0e84632eba34Matt SweeneyY.NodeList.prototype.toggleView = function(name, on, callback) {
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney var nodes = this._nodes,
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney i = 0,
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney node;
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney while ((node = nodes[i++])) {
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney Y.one(node).toggleView(name, on, callback);
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney }
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney return this;
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney};
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney
484ded111840f4104ab556e0628b0e84632eba34Matt SweeneyY.mix(Transition.fx, {
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney fadeOut: {
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney opacity: 0,
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney duration: 0.5,
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney easing: 'ease-out'
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney },
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney fadeIn: {
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney opacity: 1,
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney duration: 0.5,
ed09628b372a1f5611ccd9e25581da187ddede17Matt Sweeney easing: 'ease-in'
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney },
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney sizeOut: {
f0d88feb1b7e3a775e0e9c8648faf84a32250546Matt Sweeney height: 0,
f0d88feb1b7e3a775e0e9c8648faf84a32250546Matt Sweeney width: 0,
Error!

 

There was an error!

null

java.lang.NullPointerException