aboutsummaryrefslogtreecommitdiffstats
path: root/src/queue.js
diff options
context:
space:
mode:
authorCorey Frang <gnarf@gnarf.net>2011-09-28 11:55:29 -0400
committertimmywil <timmywillisn@gmail.com>2011-09-28 11:55:29 -0400
commita3b59d7f92c9e15af1888fc4e87639a290763a50 (patch)
treecc533a93c3c0a02fae95018b3447b94927e5ff2e /src/queue.js
parenta74cbb2b911b3afad96599728208d95a60d24cbf (diff)
downloadjquery-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.js22
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 ) {