transition-debug.js revision 142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0
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
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney*/
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeneyvar TRANSITION = '-webkit-transition',
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney TRANSITION_CAMEL = 'WebkitTransition',
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney TRANSITION_PROPERTY_CAMEL = 'WebkitTransitionProperty',
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney TRANSITION_PROPERTY = '-webkit-transition-property',
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney TRANSITION_DURATION = '-webkit-transition-duration',
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney TRANSITION_TIMING_FUNCTION = '-webkit-transition-timing-function',
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney TRANSITION_DELAY = '-webkit-transition-delay',
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney TRANSITION_END = 'webkitTransitionEnd',
564c5c8d77e1fe074bfa96133bfdbbd0707c1ed3Matt Sweeney TRANSFORM_CAMEL = 'WebkitTransform',
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney EMPTY_OBJ = {},
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney/**
ef982fe144b380cd6cd8dd1bc6ba74c7210033f9Matt Sweeney * A class for constructing transition instances.
ef982fe144b380cd6cd8dd1bc6ba74c7210033f9Matt Sweeney * Adds the "transition" method to Node.
ef982fe144b380cd6cd8dd1bc6ba74c7210033f9Matt Sweeney * @class Transition
ef982fe144b380cd6cd8dd1bc6ba74c7210033f9Matt Sweeney * @constructor
ef982fe144b380cd6cd8dd1bc6ba74c7210033f9Matt Sweeney */
ef982fe144b380cd6cd8dd1bc6ba74c7210033f9Matt Sweeney
ef982fe144b380cd6cd8dd1bc6ba74c7210033f9Matt SweeneyTransition = function() {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney this.init.apply(this, arguments);
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney};
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt SweeneyTransition._fx = {};
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt SweeneyTransition._hasEnd = {};
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt SweeneyTransition.add = function(name, config) {
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney if (typeof name !== 'string') {
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney Y.Object.each(name, function(v, n) {
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney Transition.add(n, v);
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney });
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney } else {
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney Transition._fx[name] = config;
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney }
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney};
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney
f01d121976553130cab6089d35c71d5b947d1204Matt SweeneyTransition._toCamel = function(property) {
f01d121976553130cab6089d35c71d5b947d1204Matt 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._toHyphen = function(property) {
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney property = property.replace(/([A-Z]?)([a-z]+)([A-Z]?)/g, function(m0, m1, m2, m3) {
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney var str = '';
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney if (m1) {
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney str += '-' + m1.toLowerCase();
bf3c648d6ab588c8b04fb824a7281898c469bd67Matt Sweeney }
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney str += m2;
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney if (m3) {
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney str += '-' + m3.toLowerCase();
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney }
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney return str;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney });
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney return property;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney};
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt SweeneyTransition._reKeywords = /^(?:node|duration|iterations|easing|delay|on|onstart|onend)$/i;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt SweeneyTransition.useNative = false;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeneyif (TRANSITION in Y.config.doc.documentElement.style) {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney Transition.useNative = true;
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney Transition.supported = true; // TODO: remove
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney}
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt SweeneyY.Node.DOM_EVENTS[TRANSITION_END] = 1;
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney
448834d88f7c2818b5a70125bba193051806ccf9Matt SweeneyTransition.NAME = 'transition';
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt SweeneyTransition.DEFAULT_EASING = 'ease';
959c053d56a076109993a2f14094d20b1f8c0c17Matt SweeneyTransition.DEFAULT_DURATION = 0.5;
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt SweeneyTransition.DEFAULT_DELAY = 0;
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt SweeneyTransition._nodeAttrs = {};
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt SweeneyTransition.prototype = {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney constructor: Transition,
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney init: function(node, config) {
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney var anim = this;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney if (!anim._running) {
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney anim._node = node;
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney anim._config = config;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney node._transition = anim; // cache for reuse
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney anim._duration = ('duration' in config) ?
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney config.duration: anim.constructor.DEFAULT_DURATION;
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney anim._delay = ('delay' in config) ?
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney config.delay: anim.constructor.DEFAULT_DELAY;
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney anim._easing = config.easing || anim.constructor.DEFAULT_EASING;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney anim._count = 0; // track number of animated properties
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney anim._running = false;
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney }
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney return anim;
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney },
5985d0db35cae8ef4c1a022bb03ac15792ff51adMatt Sweeney
5985d0db35cae8ef4c1a022bb03ac15792ff51adMatt Sweeney addProperty: function(prop, config) {
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney var anim = this,
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney node = this._node,
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney uid = Y.stamp(node),
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney attrs = Transition._nodeAttrs[uid],
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney attr,
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney val;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney if (!attrs) {
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney attrs = Transition._nodeAttrs[uid] = {};
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney }
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney attr = attrs[prop];
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney // might just be a value
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney if (config && config.value !== undefined) {
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney val = config.value;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney } else if (config !== undefined) {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney val = config;
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney config = EMPTY_OBJ;
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney }
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney if (typeof val === 'function') {
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney val = val.call(node, node);
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney }
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney if (attr && attr.transition) {
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney // take control if another transition owns this property
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney if (attr.transition !== anim) {
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney attr.transition._count--; // remapping attr to this transition
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney }
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney } else {
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney // when size is auto or % webkit starts from zero instead of computed
5985d0db35cae8ef4c1a022bb03ac15792ff51adMatt Sweeney // (https://bugs.webkit.org/show_bug.cgi?id=16020)
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney // workaround by setting to current value
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney // TODO: move to run
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney/*
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney if (prop == 'height' || prop == 'width') {
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney // avoid setting if already set or transitioning
5985d0db35cae8ef4c1a022bb03ac15792ff51adMatt Sweeney // TODO: handle inline percent / auto
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney if (!node._node.style[prop] && !node.getStyle(TRANSITION_PROPERTY_CAMEL) == 'prop') {
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney node.setStyle(prop, node.getComputedStyle(prop));
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney }
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney }
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney*/
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney }
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney
5985d0db35cae8ef4c1a022bb03ac15792ff51adMatt Sweeney anim._count++; // properties per transition
5985d0db35cae8ef4c1a022bb03ac15792ff51adMatt Sweeney
5985d0db35cae8ef4c1a022bb03ac15792ff51adMatt Sweeney attrs[prop] = {
5985d0db35cae8ef4c1a022bb03ac15792ff51adMatt Sweeney value: val,
5985d0db35cae8ef4c1a022bb03ac15792ff51adMatt Sweeney duration: ((typeof config.duration !== 'undefined') ? config.duration :
5985d0db35cae8ef4c1a022bb03ac15792ff51adMatt Sweeney anim._duration) || 0.0001, // make 0 async and fire events
5985d0db35cae8ef4c1a022bb03ac15792ff51adMatt Sweeney
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney delay: (typeof config.delay !== 'undefined') ? config.delay :
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney anim._delay,
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney easing: config.easing || anim._easing,
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney transition: anim
0df23d09dc16bc41af5ceff68c11ed9c7d6285edMatt Sweeney };
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney },
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney removeProperty: function(prop) {
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney var anim = this,
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney attrs = Transition._nodeAttrs[Y.stamp(anim._node)];
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney if (attrs && attrs[prop]) {
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney delete attrs[prop];
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney anim._count--;
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney }
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney },
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney initAttrs: function(config) {
ac08645fa535c4f48d2fa888fee02423ff9afe17Matt Sweeney var attr;
ac08645fa535c4f48d2fa888fee02423ff9afe17Matt Sweeney
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney if (config.transform && !config[TRANSFORM_CAMEL]) {
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney config[TRANSFORM_CAMEL] = config.transform;
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney delete config.transform; // TODO: copy
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney }
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney for (attr in config) {
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney if (config.hasOwnProperty(attr) && !Transition._reKeywords.test(attr)) {
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney this.addProperty(attr, config[attr]);
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney }
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney
ac08645fa535c4f48d2fa888fee02423ff9afe17Matt Sweeney }
ac08645fa535c4f48d2fa888fee02423ff9afe17Matt Sweeney },
ac08645fa535c4f48d2fa888fee02423ff9afe17Matt Sweeney
ac08645fa535c4f48d2fa888fee02423ff9afe17Matt Sweeney /**
ac08645fa535c4f48d2fa888fee02423ff9afe17Matt Sweeney * Starts or an animation.
ac08645fa535c4f48d2fa888fee02423ff9afe17Matt Sweeney * @method run
ac08645fa535c4f48d2fa888fee02423ff9afe17Matt Sweeney * @chainable
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney * @private
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney */
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney run: function(callback) {
59171f95d68f00afaea1a329e4a463e2cb75bec0Matt Sweeney var anim = this,
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney node = anim._node,
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney config = anim._config,
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney data = {
59171f95d68f00afaea1a329e4a463e2cb75bec0Matt Sweeney type: 'transition:start',
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney config: config
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney };
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney if (!anim._running) {
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney anim._running = true;
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney anim._node.fire('transition:start', data);
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney if (config.on && config.on.start) {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney config.on.start.call(node, data);
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney }
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney anim.initAttrs(anim._config);
3f4cbe6edb218980892f798d09f41c804aeaa301Matt Sweeney
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney anim._callback = callback;
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney anim._start();
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney }
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney return anim;
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney },
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney _start: function() {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney this._runNative();
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney },
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney _prepDur: function(dur) {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney dur = parseFloat(dur);
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney return dur + 's';
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney },
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney _runNative: function(time) {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney var anim = this,
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney node = anim._node,
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney uid = Y.stamp(node),
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney domNode = node._node,
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney style = domNode.style,
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney computed = getComputedStyle(domNode),
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney attrs = Transition._nodeAttrs[uid],
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney cssText = '',
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney cssTransition = computed[TRANSITION_PROPERTY],
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney transitionText = TRANSITION_PROPERTY + ': ',
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney duration = TRANSITION_DURATION + ': ',
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney easing = TRANSITION_TIMING_FUNCTION + ': ',
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney delay = TRANSITION_DELAY + ': ',
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney hyphy,
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney attr,
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney name;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney // preserve existing transitions
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney if (cssTransition !== 'all') {
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney transitionText += cssTransition + ',';
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney duration += computed[TRANSITION_DURATION] + ',';
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney easing += computed[TRANSITION_TIMING_FUNCTION] + ',';
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney delay += computed[TRANSITION_DELAY] + ',';
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney }
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney // run transitions mapped to this instance
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney for (name in attrs) {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney hyphy = Transition._toHyphen(name);
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney attr = attrs[name];
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney if (attrs.hasOwnProperty(name) && attr.transition === anim) {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney if (name in domNode.style) { // only native styles allowed
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney duration += anim._prepDur(attr.duration) + ',';
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney delay += anim._prepDur(attr.delay) + ',';
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney easing += (attr.easing) + ',';
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney transitionText += hyphy + ',';
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney cssText += hyphy + ': ' + attr.value + '; ';
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney } else {
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney this.removeProperty(name);
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney }
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney }
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney }
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney transitionText = transitionText.replace(/,$/, ';');
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney duration = duration.replace(/,$/, ';');
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney easing = easing.replace(/,$/, ';');
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney delay = delay.replace(/,$/, ';');
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney // only one native end event per node
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney if (!Transition._hasEnd[uid]) {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney anim._detach = node.on(TRANSITION_END, anim._onNativeEnd);
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney Transition._hasEnd[uid] = true;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney }
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney
564c5c8d77e1fe074bfa96133bfdbbd0707c1ed3Matt Sweeney //setTimeout(function() { // allow updates to apply (size fix, onstart, etc)
564c5c8d77e1fe074bfa96133bfdbbd0707c1ed3Matt Sweeney style.cssText += transitionText + duration + easing + delay + cssText;
564c5c8d77e1fe074bfa96133bfdbbd0707c1ed3Matt Sweeney //}, 1);
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney },
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
ac08645fa535c4f48d2fa888fee02423ff9afe17Matt Sweeney _end: function(elapsed) {
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney var anim = this,
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney node = anim._node,
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney callback = anim._callback,
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney config = anim._config,
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney data = {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney type: 'transition:end',
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney config: config,
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney elapsedTime: elapsed
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney };
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney anim._running = false;
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney anim._callback = null;
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney if (config.on && config.on.end) {
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney setTimeout(function() { // IE: allow previous update to finish
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney config.on.end.call(node, data);
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney // nested to ensure proper fire order
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney if (callback) {
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney callback.call(node, data);
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney }
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney }, 1);
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney } else if (callback) {
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney setTimeout(function() { // IE: allow previous update to finish
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney callback.call(node, data);
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney }, 1);
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney }
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney node.fire('transition:end', data);
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney },
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney _endNative: function(name) {
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney var node = this._node,
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney value = node.getComputedStyle(TRANSITION_PROPERTY);
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney if (typeof value === 'string') {
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney value = value.replace(new RegExp('(?:^|,\\s)' + name + ',?'), ',');
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney value = value.replace(/^,|,$/, '');
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney node.setStyle(TRANSITION_CAMEL, value);
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney }
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney },
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney _onNativeEnd: function(e) {
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney var node = this,
ac08645fa535c4f48d2fa888fee02423ff9afe17Matt Sweeney uid = Y.stamp(node),
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney event = e._event,
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney name = Transition._toCamel(event.propertyName),
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney elapsed = event.elapsedTime,
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney attrs = Transition._nodeAttrs[uid],
564c5c8d77e1fe074bfa96133bfdbbd0707c1ed3Matt Sweeney attr = attrs[name],
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney anim = (attr) ? attr.transition : null,
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney data = {
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney type: 'propertyEnd',
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney propertyName: name,
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney elapsedTime: elapsed
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney },
564c5c8d77e1fe074bfa96133bfdbbd0707c1ed3Matt Sweeney config;
f01d121976553130cab6089d35c71d5b947d1204Matt Sweeney
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney if (anim) {
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney anim.removeProperty(name);
448834d88f7c2818b5a70125bba193051806ccf9Matt Sweeney anim._endNative(name);
056ec5e3a7c6ad7819398c8c3e6e225386c4bbd0Matt Sweeney config = anim._config[name];
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney
056ec5e3a7c6ad7819398c8c3e6e225386c4bbd0Matt Sweeney if (config && config.on && config.on.end) {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney config.on.end.call(node, data);
0dfbad86367ee46837c580e51d7d76e8bd6d88b7Matt Sweeney }
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney node.fire('transition:propertyEnd', data);
056ec5e3a7c6ad7819398c8c3e6e225386c4bbd0Matt Sweeney
100cd7da99ccec416d3021e9a567addc2d9ed3dfMatt Sweeney if (anim._count <= 0) { // after propertEnd fires
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney anim._end(elapsed);
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney }
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney }
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney },
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney destroy: function() {
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney var anim = this;
056ec5e3a7c6ad7819398c8c3e6e225386c4bbd0Matt Sweeney if (anim._detach) {
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney anim._detach.detach();
056ec5e3a7c6ad7819398c8c3e6e225386c4bbd0Matt Sweeney }
056ec5e3a7c6ad7819398c8c3e6e225386c4bbd0Matt Sweeney anim._node = null;
3f4cbe6edb218980892f798d09f41c804aeaa301Matt Sweeney }
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt Sweeney};
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney
576e5aadaa60b824ce0a3875d3551ca3151a1957Matt SweeneyY.Transition = Transition;
959c053d56a076109993a2f14094d20b1f8c0c17Matt SweeneyY.TransitionNative = Transition; // TODO: remove
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney/**
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney * Animate one or more css properties to a given value. Requires the "transition" module.
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney * <pre>example usage:
6ae23e4adfd7a02fb24e8240a363e0decf126c95Matt Sweeney * Y.one('#demo').transition({
564c5c8d77e1fe074bfa96133bfdbbd0707c1ed3Matt Sweeney * duration: 1, // in seconds, default is 0.5
6ae23e4adfd7a02fb24e8240a363e0decf126c95Matt Sweeney * easing: 'ease-out', // default is 'ease'
6ae23e4adfd7a02fb24e8240a363e0decf126c95Matt Sweeney * delay: '1', // delay start for 1 second, default is 0
6ae23e4adfd7a02fb24e8240a363e0decf126c95Matt Sweeney *
564c5c8d77e1fe074bfa96133bfdbbd0707c1ed3Matt Sweeney * height: '10px',
564c5c8d77e1fe074bfa96133bfdbbd0707c1ed3Matt Sweeney * width: '10px',
564c5c8d77e1fe074bfa96133bfdbbd0707c1ed3Matt Sweeney *
6ae23e4adfd7a02fb24e8240a363e0decf126c95Matt Sweeney * opacity: { // per property
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney * value: 0,
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney * duration: 2,
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney * delay: 2,
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney * easing: 'ease-in'
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney * }
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney * });
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney * </pre>
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney * @for Node
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney * @method transition
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney * @param {Object} config An object containing one or more style properties, a duration and an easing.
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney * @param {Function} callback A function to run after the transition has completed.
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney * @chainable
ef982fe144b380cd6cd8dd1bc6ba74c7210033f9Matt Sweeney*/
ef982fe144b380cd6cd8dd1bc6ba74c7210033f9Matt SweeneyY.Node.prototype.transition = function(name, config, callback) {
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney var
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney transitionAttrs = Transition._nodeAttrs[Y.stamp(this)],
ef982fe144b380cd6cd8dd1bc6ba74c7210033f9Matt Sweeney anim = (transitionAttrs) ? transitionAttrs.transition : null,
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney fxConfig,
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney prop;
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney if (typeof name === 'string') { // named effect, pull config from registry
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney if (typeof config === 'function') {
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney callback = config;
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney config = null;
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney }
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney fxConfig = Transition._fx[name];
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney if (config && typeof config !== 'boolean') {
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney config = Y.clone(config);
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney for (prop in fxConfig) {
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney if (fxConfig.hasOwnProperty(prop)) {
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney if (! (prop in config)) {
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney config[prop] = fxConfig[prop];
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney }
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney }
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney }
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney } else {
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney config = fxConfig;
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney }
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney } else { // name is a config, config is a callback or undefined
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney callback = config;
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney config = name;
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney }
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney if (anim && !anim._running) {
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney anim.init(this, config);
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney } else {
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney anim = new Transition(this, config);
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney }
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney anim.run(callback);
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney return this;
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney};
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt SweeneyY.Node.prototype.show = function(name, config, callback) {
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney this._show(); // show prior to transition
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney if (name && Y.Transition) {
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney if (typeof name !== 'string' && !name.push) { // named effect or array of effects supercedes default
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney if (typeof config === 'function') {
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney callback = config;
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney config = name;
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney }
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney name = this.SHOW_TRANSITION;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney }
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney this.transition(name, config, callback);
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney }
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney else if (name && !Y.Transition) { Y.log('unable to transition show; missing transition module', 'warn', 'node'); }
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney return this;
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney};
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeneyvar _wrapCallBack = function(callback, fn) {
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney return function() {
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney if (fn) {
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney fn.call(this);
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney }
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney callback.apply(this, arguments);
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney };
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney};
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt SweeneyY.Node.prototype.hide = function(name, config, callback) {
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney if (name && Y.Transition) {
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney if (typeof config === 'function') {
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney callback = config;
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney config = null;
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney }
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney if (callback) { // need to hide when transition ends
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney callback = _wrapCallBack(callback, this._hide); // wrap with existing callback
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney } else {
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney callback = this._hide;
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney }
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney if (typeof name !== 'string' && !name.push) { // named effect or array of effects supercedes default
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney if (typeof config === 'function') {
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney callback = config;
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney config = name;
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney }
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney name = this.HIDE_TRANSITION;
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney }
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney this.transition(name, config, callback);
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney } else if (name && !Y.Transition) { Y.log('unable to transition hide; missing transition module', 'warn', 'node'); // end if on nex
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney } else {
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney this._hide();
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney }
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney return this;
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney};
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney
b92e4372c5a34f48e457b60dfa9b136cf19c8498Matt Sweeney/**
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney * Animate one or more css properties to a given value. Requires the "transition" module.
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney * <pre>example usage:
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney * Y.all('.demo').transition({
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney * duration: 1, // in seconds, default is 0.5
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney * easing: 'ease-out', // default is 'ease'
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney * delay: '1', // delay start for 1 second, default is 0
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney *
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney * height: '10px',
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney * width: '10px',
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney *
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney * opacity: { // per property
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney * value: 0,
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney * duration: 2,
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney * delay: 2,
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney * easing: 'ease-in'
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney * }
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney * });
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney * </pre>
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney * @for NodeList
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney * @method transition
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney * @param {Object} config An object containing one or more style properties, a duration and an easing.
ef982fe144b380cd6cd8dd1bc6ba74c7210033f9Matt Sweeney * @param {Function} callback A function to run after the transition has completed. The callback fires
ef982fe144b380cd6cd8dd1bc6ba74c7210033f9Matt Sweeney * once per item in the NodeList.
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney * @chainable
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney*/
ef982fe144b380cd6cd8dd1bc6ba74c7210033f9Matt SweeneyY.NodeList.prototype.transition = function(config, callback) {
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney var nodes = this._nodes,
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney i = 0,
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney node;
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney while ((node = nodes[i++])) {
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney Y.one(node).transition(config, callback);
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney }
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney return this;
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney};
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt SweeneyTransition.add({
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney fadeOut: {
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney opacity: 0,
54329bf323458a34db1104ad4b4b0b1eaa1f12feMatt Sweeney duration: 0.5,
a8592deb8f7e9124b473044326ef8cfadc4281d5Matt Sweeney easing: 'ease-out'
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney },
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney fadeIn: {
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney opacity: 1,
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney duration: 0.5,
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney easing: 'ease-in'
142b1eb4e6b33c96ecf163bf42d31147b2e0e1d0Matt Sweeney },
a8592deb8f7e9124b473044326ef8cfadc4281d5Matt Sweeney
a8592deb8f7e9124b473044326ef8cfadc4281d5Matt Sweeney sizeOut: {
a8592deb8f7e9124b473044326ef8cfadc4281d5Matt Sweeney height: 0,
959c053d56a076109993a2f14094d20b1f8c0c17Matt Sweeney width: 0,
f0d88feb1b7e3a775e0e9c8648faf84a32250546Matt Sweeney duration: 0.75,
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney easing: 'ease-out'
f0d88feb1b7e3a775e0e9c8648faf84a32250546Matt Sweeney },
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney sizeIn: {
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney height: function(node) {
20161237a86d2a737d4137221848801fdc54610fMatt Sweeney return node.get('scrollHeight') + 'px';
20161237a86d2a737d4137221848801fdc54610fMatt Sweeney },
20161237a86d2a737d4137221848801fdc54610fMatt Sweeney width: function(node) {
20161237a86d2a737d4137221848801fdc54610fMatt Sweeney return node.get('scrollWidth') + 'px';
20161237a86d2a737d4137221848801fdc54610fMatt Sweeney },
20161237a86d2a737d4137221848801fdc54610fMatt Sweeney duration: 0.5,
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney easing: 'ease-in',
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney on: {
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney start: function() {
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney var overflow = this.getStyle('overflow');
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney if (overflow !== 'hidden') { // enable scrollHeight/Width
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney this.setStyle('overflow', 'hidden');
f0d88feb1b7e3a775e0e9c8648faf84a32250546Matt Sweeney this._transitionOverflow = overflow;
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney }
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney },
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney end: function() {
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney if (this._transitionOverflow) { // revert overridden value
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney this.setStyle('overflow', this._transitionOverflow);
20161237a86d2a737d4137221848801fdc54610fMatt Sweeney }
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney }
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney }
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney }
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney});
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney
20161237a86d2a737d4137221848801fdc54610fMatt Sweeney
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney}, '@VERSION@' ,{requires:['node-base']});
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt SweeneyYUI.add('transition-timer', function(Y) {
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney/*
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney* The Transition Utility provides an API for creating advanced transitions.
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney* @module transition
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney*/
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney
73857faca3d4266c7840cd6ce428a71cf9a94d0cMatt Sweeney/*
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney* Provides the base Transition class, for animating numeric properties.
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney*
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney* @module transition
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney* @submodule transition-timer
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney*/
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeneyvar Transition = Y.Transition;
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney
484ded111840f4104ab556e0628b0e84632eba34Matt SweeneyY.mix(Transition.prototype, {
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney _start: function() {
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney if (Transition.useNative) {
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney this._runNative();
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney } else {
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney this._runTimer();
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney }
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney },
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney _runTimer: function() {
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney var anim = this;
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney anim._initAttrs();
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney Transition._running[Y.stamp(anim)] = anim;
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney anim._startTime = new Date();
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney Transition._startTimer();
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney },
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney _endTimer: function() {
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney var anim = this;
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney delete Transition._running[Y.stamp(anim)];
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney anim._startTime = null;
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney },
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney _runFrame: function() {
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney var t = new Date() - this._startTime;
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney this._runAttrs(t);
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney },
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney _runAttrs: function(time) {
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney var anim = this,
484ded111840f4104ab556e0628b0e84632eba34Matt Sweeney node = anim._node,
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney config = anim._config,
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney uid = Y.stamp(node),
c56d37350cde9ba6fcde1a42433b3d759fe2b2ecMatt Sweeney attrs = Transition._nodeAttrs[uid],
0512667d3ebce1dd2bac2bd1de6367420402cfb3Matt Sweeney customAttr = Transition. Error!

 

There was an error!

null

java.lang.NullPointerException