diff options
author | Corey Frang <gnarf@gnarf.net> | 2011-09-28 11:55:29 -0400 |
---|---|---|
committer | timmywil <timmywillisn@gmail.com> | 2011-09-28 11:55:29 -0400 |
commit | a3b59d7f92c9e15af1888fc4e87639a290763a50 (patch) | |
tree | cc533a93c3c0a02fae95018b3447b94927e5ff2e /src/queue.js | |
parent | a74cbb2b911b3afad96599728208d95a60d24cbf (diff) | |
download | jquery-a3b59d7f92c9e15af1888fc4e87639a290763a50.tar.gz jquery-a3b59d7f92c9e15af1888fc4e87639a290763a50.zip |
Landing pull request 514. 1.7 - queue refactoring to handle delay stop - Fixes #6150.
More Details:
- https://github.com/jquery/jquery/pull/514
- http://bugs.jquery.com/ticket/6150
Diffstat (limited to 'src/queue.js')
-rw-r--r-- | src/queue.js | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/src/queue.js b/src/queue.js index 0c678064e..b2ee8de08 100644 --- a/src/queue.js +++ b/src/queue.js @@ -70,7 +70,8 @@ jQuery.extend({ type = type || "fx"; var queue = jQuery.queue( elem, type ), - fn = queue.shift(); + fn = queue.shift(), + runner = {}; // If the fx queue is dequeued, always remove the progress sentinel if ( fn === "inprogress" ) { @@ -81,16 +82,17 @@ jQuery.extend({ // Add a progress sentinel to prevent the fx queue from being // automatically dequeued if ( type === "fx" ) { - queue.unshift("inprogress"); + queue.unshift( "inprogress" ); } - fn.call(elem, function() { + jQuery._data( elem, type + ".run", runner ); + fn.call( elem, function() { jQuery.dequeue( elem, type ); - }); + }, runner ); } if ( !queue.length ) { - jQuery.removeData( elem, type + "queue", true ); + jQuery.removeData( elem, type + "queue " + type + ".run", true ); handleQueueMarkDefer( elem, type, "queue" ); } } @@ -125,11 +127,11 @@ jQuery.fn.extend({ time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; type = type || "fx"; - return this.queue( type, function() { - var elem = this; - setTimeout(function() { - jQuery.dequeue( elem, type ); - }, time ); + return this.queue( type, function( next, runner ) { + var timeout = setTimeout( next, time ); + runner.stop = function() { + clearTimeout( timeout ); + }; }); }, clearQueue: function( type ) { |