From 60d4e0ae42efd780e6147f981c55bdfeafdfaa54 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Scott=20Gonz=C3=A1lez?= Date: Wed, 27 Apr 2011 10:42:21 -0400 Subject: [PATCH] Class Animation: Use .attr( "class" ) instead of .attr( "className" ) and adjust the queueing logic for jQuery 1.6 compatibility. Fixes #7275 - $.effects.animateClass broken in jQuery 1.6." --- ui/jquery.effects.core.js | 49 +++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/ui/jquery.effects.core.js b/ui/jquery.effects.core.js index 573cb2554..581fb0861 100644 --- a/ui/jquery.effects.core.js +++ b/ui/jquery.effects.core.js @@ -234,12 +234,12 @@ $.effects.animateClass = function( value, duration, easing, callback ) { easing = null; } - return this.queue( 'fx', function() { + return this.queue(function() { var that = $( this ), originalStyleAttr = that.attr( 'style' ) || ' ', originalStyle = filterStyles( getElementStyles.call( this ) ), newStyle, - className = that.attr( 'className' ); + className = that.attr( 'class' ); $.each( classAnimationActions, function(i, action) { if ( value[ action ] ) { @@ -247,32 +247,31 @@ $.effects.animateClass = function( value, duration, easing, callback ) { } }); 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 ] ); + that.attr( 'class', className ); + + that.animate( styleDifference( originalStyle, newStyle ), { + queue: false, + duration: duration, + easing: easing, + complete: 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 ); } - }); - // 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 ); + if ( callback ) { + callback.apply( this, arguments ); + } + $.dequeue( this ); } }); - - // $.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 ); }); }; -- 2.39.5