From abfa0e1e951b74548f9441a7ba44325d8c4d55b7 Mon Sep 17 00:00:00 2001 From: Alex Dovenmuehle Date: Fri, 19 Nov 2010 08:54:11 -0500 Subject: [PATCH] Core: Fixed switchClass queueing issues using lazy evaluation of element's style. Fixed #6244 - switchClass queues incorrectly. --- ui/jquery.effects.core.js | 56 ++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 24 deletions(-) diff --git a/ui/jquery.effects.core.js b/ui/jquery.effects.core.js index 111cb6f84fa..9be70412877 100644 --- a/ui/jquery.effects.core.js +++ b/ui/jquery.effects.core.js @@ -232,33 +232,41 @@ $.effects.animateClass = function(value, duration, easing, callback) { } return this.each(function() { + $.queue(this, 'fx', function() { + var that = $(this), + originalStyleAttr = that.attr('style') || ' ', + originalStyle = filterStyles(getElementStyles.call(this)), + newStyle, + className = that.attr('className'); - var that = $(this), - originalStyleAttr = that.attr('style') || ' ', - originalStyle = filterStyles(getElementStyles.call(this)), - newStyle, - className = that.attr('className'); - - $.each(classAnimationActions, function(i, action) { - if (value[action]) { - that[action + 'Class'](value[action]); - } - }); - newStyle = filterStyles(getElementStyles.call(this)); - that.attr('className', className); - - that.animate(styleDifference(originalStyle, newStyle), duration, easing, function() { $.each(classAnimationActions, function(i, action) { - if (value[action]) { that[action + 'Class'](value[action]); } + if (value[action]) { + that[action + 'Class'](value[action]); + } }); - // work around bug in IE by clearing the cssText before setting it - if (typeof that.attr('style') == 'object') { - that.attr('style').cssText = ''; - that.attr('style').cssText = originalStyleAttr; - } else { - that.attr('style', originalStyleAttr); - } - if (callback) { callback.apply(this, arguments); } + newStyle = filterStyles(getElementStyles.call(this)); + that.attr('className', className); + + that.animate(styleDifference(originalStyle, newStyle), duration, easing, function() { + $.each(classAnimationActions, function(i, action) { + if (value[action]) { that[action + 'Class'](value[action]); } + }); + // work around bug in IE by clearing the cssText before setting it + if (typeof that.attr('style') == 'object') { + that.attr('style').cssText = ''; + that.attr('style').cssText = originalStyleAttr; + } else { + that.attr('style', originalStyleAttr); + } + if (callback) { callback.apply(this, arguments); } + }); + + // $.animate adds a function to the end of the queue + // but we want it at the front + var queue = $.queue(this), + anim = queue.splice(queue.length - 1, 1)[0]; + queue.splice(1, 0, anim); + $.dequeue(this); }); }); };