transition-native.js revision bf3c648d6ab588c8b04fb824a7281898c469bd67
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein* The Native Transition Utility provides an API wrapper for CSS transitions.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein* It is also the base module for the timer-based transition module.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein* @module transition
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein* Provides the base Transition class. The "transition" method is added to Node,
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein* and is how Transition should be used.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein* @module transition
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein* @submodule transition-native
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * A class for constructing transition instances.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * Adds the "transition" method to Node.
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * @class Transition
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein * @constructor
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein TRANSITION_PROPERTY = '-webkit-transition-property',
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein TRANSITION_DURATION = '-webkit-transition-duration',
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein TRANSITION_TIMING_FUNCTION = '-webkit-transition-timing-function',
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein property = property.replace(/-([a-z])/gi, function(m0, m1) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein property = property.replace(/([A-Z]?)([a-z]+)([A-Z]?)/g, function(m0, m1, m2, m3) {
71c66a876ecca77923638d3f94cc0783152b2f03Mark AndrewsTransition._reKeywords = /^(?:node|duration|iterations|easing|delay)$/;
71c66a876ecca77923638d3f94cc0783152b2f03Mark Andrewsif (TRANSITION in Y.config.doc.documentElement.style) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein config.duration: anim.constructor.DEFAULT_DURATION;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein anim._easing = config.easing || anim.constructor.DEFAULT_EASING;
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein anim._count = 0; // track number of animated properties
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (config.transform && !config[TRANSFORM_CAMEL]) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein if (config.hasOwnProperty(attr) && !Transition._reKeywords.test(attr)) {
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein attrs[attr].transition._count--; // remapping attr to this transition
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein duration = (typeof transition.duration !== 'undefined') ? transition.duration :
60e5e10f8d2e2b0c41e8abad38cacd867caa6ab2Rob Austein delay = (typeof transition.delay !== 'undefined') ? transition.delay :
var anim = this;
return anim;
_start: function() {
this._runNative();
var anim = this,
attr,
name;
var anim = this,
data = {
if (callback) {
_endNative: function() {
_onNativeEnd: function(e) {
var node = this,
if (anim) {
destroy: function() {
this.detachAll();
this._node = null;