transition-native-debug.js revision 448834d88f7c2818b5a70125bba193051806ccf9
959c053d56a076109993a2f14094d20b1f8c0c17Matt SweeneyYUI.add('transition-native', function(Y) {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
9c94a3bab3da130a453194d151f33f11cd53f44eMatt Sweeney/**
9c94a3bab3da130a453194d151f33f11cd53f44eMatt Sweeney* The Native Transition Utility provides an API wrapper for CSS transitions.
4527b08ced97d1bf5f88cf786302fd66eb80a35bMatt Sweeney* It is also the base module for the timer-based transition module.
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney* @module node
60dcf3ebba038d9ec57d617a7395a9bff15802fcMatt Sweeney*/
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney/**
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney* Provides the base Transition class.
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney*
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney* @module node
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney* @submodule transition-native
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney*/
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney/**
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney * A class for constructing transition instances.
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney * @class Transition
564c5c8d77e1fe074bfa96133bfdbbd0707c1ed3Matt Sweeney * @for Transition
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney * @constructor
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney * @extends Base
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney */
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney
ef982fe144b380cd6cd8dd1bc6ba74c7210033f9Matt Sweeneyvar TRANSITION = '-webkit-transition',
ef982fe144b380cd6cd8dd1bc6ba74c7210033f9Matt Sweeney TRANSITION_CAMEL = 'WebkitTransition',
ef982fe144b380cd6cd8dd1bc6ba74c7210033f9Matt Sweeney TRANSITION_PROPERTY = '-webkit-transition-property',
ef982fe144b380cd6cd8dd1bc6ba74c7210033f9Matt Sweeney TRANSITION_DURATION = '-webkit-transition-duration',
ef982fe144b380cd6cd8dd1bc6ba74c7210033f9Matt Sweeney TRANSITION_TIMING_FUNCTION = '-webkit-transition-timing-function',
ef982fe144b380cd6cd8dd1bc6ba74c7210033f9Matt Sweeney TRANSITION_DELAY = '-webkit-transition-delay',
ef982fe144b380cd6cd8dd1bc6ba74c7210033f9Matt Sweeney TRANSITION_END = 'webkitTransitionEnd',
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt SweeneyTransition = function() {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney this.init.apply(this, arguments);
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney};
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt SweeneyTransition._reKeywords = /^(?:node|duration|iterations|easing|delay)$/;
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt SweeneyTransition.useNative = false;
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeneyif (TRANSITION in Y.config.doc.documentElement.style) {
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney Transition.useNative = true;
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney Transition.supported = true; // TODO: remove
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney}
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney
f01d121976553130cab6089d35c71d5b947d1204Matt SweeneyY.Node.DOM_EVENTS[TRANSITION_END] = 1;
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney
f01d121976553130cab6089d35c71d5b947d1204Matt SweeneyTransition.NAME = 'transition';
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt SweeneyTransition.DEFAULT_EASING = 'ease-in-out';
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt SweeneyTransition.DEFAULT_DURATION = 0.5;
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt SweeneyTransition.DEFAULT_DELAY = 0;
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt SweeneyTransition._nodeAttrs = {};
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt SweeneyTransition.prototype = {
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney constructor: Transition,
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney init: function(node, config) {
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney if (!this._running) {
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney this._node = node;
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney this._config = config;
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney node._transition = this; // cache for reuse
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney this._duration = ('duration' in config) ?
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney config.duration: this.constructor.DEFAULT_DURATION;
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney this._delay = ('delay' in config) ?
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney config.delay: this.constructor.DEFAULT_DELAY;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney this._easing = config.easing || this.constructor.DEFAULT_EASING;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney this._count = 0; // track number of animated properties
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney this._totalDuration = 0;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney this._running = false;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney this.initAttrs(config);
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney }
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney return this;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney },
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney initAttrs: function(config) {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney var anim = this,
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney node = anim._node,
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney uid = Y.stamp(node),
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney attrs = Transition._nodeAttrs[uid],
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney duration,
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney delay,
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney easing,
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney val,
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney transition,
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney attr;
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney if (!attrs) {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney attrs = Transition._nodeAttrs[uid] = {};
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney }
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney if (config.transform && !config['-webkit-transform']) {
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney config['-webkit-transform'] = config.transform;
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney delete config.transform; // TODO: copy
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney }
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney for (attr in config) {
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney if (config.hasOwnProperty(attr) && !Transition._reKeywords.test(attr)) {
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney val = transition = config[attr];
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney if (attrs[attr] && attrs[attr].transition) {
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney attrs[attr].transition._count--; // remapping attr to this transition
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney }
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney if (typeof transition.value !== 'undefined') {
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney val = transition.value;
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney }
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney if (typeof val === 'function') {
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney val = val.call(node, node);
5985d0db35cae8ef4c1a022bb03ac15792ff51adMatt Sweeney }
5985d0db35cae8ef4c1a022bb03ac15792ff51adMatt Sweeney
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney duration = (typeof transition.duration !== 'undefined') ? transition.duration :
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney anim._duration;
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney delay = (typeof transition.delay !== 'undefined') ? transition.delay :
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney anim._delay;
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney if (!duration) { // make async and fire events
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney duration = 0.00001;
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney }
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney easing = transition.easing || anim._easing;
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney anim._count++; // track number of bound properties
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney attrs[attr] = {
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney value: val,
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney duration: duration,
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney delay: delay,
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney easing: easing,
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney transition: anim
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney };
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney }
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney }
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney },
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney /**
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney * Starts or an animation.
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney * @method run
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney * @chainable
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney */
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney run: function(callback) {
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney var anim = this;
5985d0db35cae8ef4c1a022bb03ac15792ff51adMatt Sweeney
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney if (!anim._running) {
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney anim._running = true;
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney anim._start();
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney anim._callback = callback;
5985d0db35cae8ef4c1a022bb03ac15792ff51adMatt Sweeney }
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney return anim;
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney },
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney _start: function() {
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney this._runNative();
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney },
5985d0db35cae8ef4c1a022bb03ac15792ff51adMatt Sweeney
5985d0db35cae8ef4c1a022bb03ac15792ff51adMatt Sweeney _prepDur: function(dur) {
5985d0db35cae8ef4c1a022bb03ac15792ff51adMatt Sweeney dur = parseFloat(dur);
5985d0db35cae8ef4c1a022bb03ac15792ff51adMatt Sweeney
5985d0db35cae8ef4c1a022bb03ac15792ff51adMatt Sweeney if (dur > this._totalDuration) {
5985d0db35cae8ef4c1a022bb03ac15792ff51adMatt Sweeney this._totalDuration = dur;
5985d0db35cae8ef4c1a022bb03ac15792ff51adMatt Sweeney }
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney return dur + 's';
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney },
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney _runNative: function(time) {
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney var anim = this,
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney node = anim._node,
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney uid = Y.stamp(node),
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney domNode = node._node,
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney style = domNode.style,
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney computed = getComputedStyle(domNode),
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney attrs = Transition._nodeAttrs[uid],
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney cssText = '',
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney cssTransition = computed[TRANSITION_PROPERTY],
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney transitionText = TRANSITION_PROPERTY + ': ',
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney duration = TRANSITION_DURATION + ': ',
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney easing = TRANSITION_TIMING_FUNCTION + ': ',
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney delay = TRANSITION_DELAY + ': ',
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney attr,
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney name;
ac08645fa535c4f48d2fa888fee02423ff9afe17Matt Sweeney
ac08645fa535c4f48d2fa888fee02423ff9afe17Matt Sweeney // preserve existing transitions
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney if (cssTransition !== 'all') {
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney transitionText += cssTransition + ',';
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney duration += computed[TRANSITION_DURATION] + ',';
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney easing += computed[TRANSITION_TIMING_FUNCTION] + ',';
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney delay += computed[TRANSITION_DELAY] + ',';
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney }
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney // run transitions mapped to this instance
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney for (name in attrs) {
ac08645fa535c4f48d2fa888fee02423ff9afe17Matt Sweeney attr = attrs[name];
ac08645fa535c4f48d2fa888fee02423ff9afe17Matt Sweeney if (attrs.hasOwnProperty(name) && attr.transition === anim) {
ac08645fa535c4f48d2fa888fee02423ff9afe17Matt Sweeney duration += anim._prepDur(attr.duration) + ',';
ac08645fa535c4f48d2fa888fee02423ff9afe17Matt Sweeney delay += anim._prepDur(attr.delay) + ',';
ac08645fa535c4f48d2fa888fee02423ff9afe17Matt Sweeney easing += (attr.easing) + ',';
ac08645fa535c4f48d2fa888fee02423ff9afe17Matt Sweeney
ac08645fa535c4f48d2fa888fee02423ff9afe17Matt Sweeney transitionText += name + ',';
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney cssText += name + ': ' + attr.value + '; ';
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney }
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney }
59171f95d68f00afaea1a329e4a463e2cb75bec0Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney transitionText = transitionText.replace(/,$/, ';');
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney duration = duration.replace(/,$/, ';');
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney easing = easing.replace(/,$/, ';');
59171f95d68f00afaea1a329e4a463e2cb75bec0Matt Sweeney delay = delay.replace(/,$/, ';');
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney // only one native end event per node
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney if (!node._hasTransitionEnd) {
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney node.on(TRANSITION_END, anim._onNativeEnd);
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney node._hasTransitionEnd = true;
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney }
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney style.cssText += transitionText + duration + easing + delay + cssText;
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney },
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney _onNativeEnd: function(e) {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney var node = this,
3f4cbe6edb218980892f798d09f41c804aeaa301Matt Sweeney uid = Y.stamp(node),
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney name = e._event.propertyName,
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney attrs = Transition._nodeAttrs[uid],
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney attr = attrs[name],
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney anim = attr.transition,
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney callback = anim._callback;
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney anim._count--;
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney delete attrs[name];
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney if (anim._count <= 0) {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney node._node.style[TRANSITION_CAMEL] = '';
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney anim._running = false;
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney if (callback) {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney anim._callback = null;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney callback.call(node, {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney elapsedTime: event.elapsedTime
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney });
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney }
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney }
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney },
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney destroy: function() {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney this.detachAll();
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney this._node = null;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney }
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney};
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
448834d88f7c2818b5a70125bba193051806ccf9Matt SweeneyY.Transition = Transition;
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt SweeneyY.TransitionNative = Transition; // TODO: remove
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney/**
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney Animate one or more css properties to a given value.
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney <pre>example usage:
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney Y.one('#demo').transition({
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney duration: 1, // seconds
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney easing: 'ease-out',
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney height: '10px',
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney width: '10px',
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney opacity: { // per property duration and/or easing
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney value: 0,
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney duration: 2,
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney easing: 'ease-in'
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney }
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney });
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney </pre>
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney @for node
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney @method transition
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney @param {Object} An object containing one or more style properties, a duration and an easing.
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney @chainable
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney*/
959c053d56a076109993a2f14094d20b1f8c0c17Matt SweeneyY.Node.prototype.transition = function(config, callback) {
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney var anim = this._transition;
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney if (anim && !anim._running) {
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney anim.init(this, config);
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney } else {
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney anim = new Transition(this, config);
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney }
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney anim.run(callback);
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney return this;
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney};
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney}, '@VERSION@' ,{requires:['node-base']});
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney