From e4c48a34b4fe687d4a3b935b6c405f502dd0223e Mon Sep 17 00:00:00 2001 From: Corey Frang Date: Mon, 19 Sep 2011 16:08:00 -0400 Subject: [PATCH] Landing pull request 496. 1.7 animate: allow named queues to be used by animate. Fixes #9280. More Details: - https://github.com/jquery/jquery/pull/496 - http://bugs.jquery.com/ticket/9280 --- src/effects.js | 10 +++++++--- test/unit/effects.js | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/effects.js b/src/effects.js index 7e46a5c3f..3edb96fae 100644 --- a/src/effects.js +++ b/src/effects.js @@ -126,7 +126,7 @@ jQuery.fn.extend({ // Do not change referenced properties as per-property easing will be lost prop = jQuery.extend( {}, prop ); - return this[ optall.queue === false ? "each" : "queue" ](function() { + function doAnimation() { // XXX 'this' does not always have a nodeName when running the // test suite @@ -240,7 +240,11 @@ jQuery.fn.extend({ // For JS strict compliance return true; - }); + } + + return optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue || "fx", doAnimation ); }, stop: function( clearQueue, gotoEnd ) { @@ -335,7 +339,7 @@ jQuery.extend({ } if ( opt.queue !== false ) { - jQuery.dequeue( this ); + jQuery.dequeue( this, opt.queue || "fx" ); } else if ( noUnmark !== false ) { jQuery._unmark( this ); } diff --git a/test/unit/effects.js b/test/unit/effects.js index 74d4c7642..d13bd587c 100644 --- a/test/unit/effects.js +++ b/test/unit/effects.js @@ -357,6 +357,41 @@ test("animate option (queue === false)", function () { }); */ +asyncTest( "animate option { queue: 'name' }", function() { + expect( 5 ); + + var foo = jQuery( "#foo" ), + origWidth = foo.width(), + order = []; + + foo.animate( { width: origWidth + 100 }, { + queue: 'name', + duration: 1, + complete: function() { + + // second callback function + order.push( 2 ); + equals( foo.width(), origWidth + 100, "Animation ended" ); + equals( foo.queue("name").length, 1, "Queue length of 'name' queue" ); + } + }).queue( "name", function( next ) { + + // last callback function + deepEqual( order, [ 1, 2 ], "Callbacks in expected order" ); + start(); + }); + + setTimeout( function() { + + // this is the first callback function that should be called + order.push( 1 ); + equals( foo.width(), origWidth, "Animation does not start on its own." ); + equals( foo.queue("name").length, 2, "Queue length of 'name' queue" ); + foo.dequeue( "name" ); + }, 100 ); + +}); + test("animate with no properties", function() { expect(2); -- 2.39.5