X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fdata.js;h=03116e4b10ed9223b4becec72b407bce03995ddd;hb=991d039b62f5dfcb9e3d99fe28212a6874e8f5c7;hp=9cc76c603ef5402cae63f42a64fbd3c1758e9cf7;hpb=190812c3be99bde536d373b6b6ab65cfe053a532;p=jquery.git diff --git a/src/data.js b/src/data.js index 9cc76c6..03116e4 100644 --- a/src/data.js +++ b/src/data.js @@ -63,30 +63,37 @@ jQuery.extend({ } }, queue: function( elem, type, data ) { - if ( elem ){ + if( !elem ) return; - type = (type || "fx") + "queue"; + type = (type || "fx") + "queue"; + var q = jQuery.data( elem, type ); - var q = jQuery.data( elem, type ); + // Speed up dequeue by getting out quickly if this is just a lookup + if( !data ) return q || []; - if ( !q || jQuery.isArray(data) ) - q = jQuery.data( elem, type, jQuery.makeArray(data) ); - else if( data ) - q.push( data ); + if ( !q || jQuery.isArray(data) ) + q = jQuery.data( elem, type, jQuery.makeArray(data) ); + else + q.push( data ); - } return q; }, dequeue: function( elem, type ){ - var queue = jQuery.queue( elem, type ), - fn = queue.shift(); + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), fn = queue.shift(); - if( !type || type === "fx" ) - fn = queue[0]; + // If the fx queue is dequeued, always remove the progress sentinel + if( fn === "inprogress" ) fn = queue.shift(); - if( fn !== undefined ) - fn.call(elem, function() { jQuery(elem).dequeue(type); }); + if( fn ) { + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if( type == "fx" ) queue.unshift("inprogress"); + + fn.call(elem, function() { jQuery.dequeue(elem, type); }); + } } }); @@ -129,8 +136,8 @@ jQuery.fn.extend({ return this.each(function(i, elem){ var queue = jQuery.queue( this, type, data ); - if( type == "fx" && queue.length == 1 ) - queue[0].call(this, function() { jQuery(elem).dequeue(type); }); + if( type == "fx" && queue[0] !== "inprogress" ) + jQuery.dequeue( this, type ) }); }, dequeue: function(type){