1
1
(function( jQuery ) {
3
function handleQueueMarkDefer( elem, type, src ) {
4
var deferDataKey = type + "defer",
5
queueDataKey = type + "queue",
6
markDataKey = type + "mark",
7
defer = jQuery.data( elem, deferDataKey, undefined, true );
9
( src === "queue" || !jQuery.data( elem, queueDataKey, undefined, true ) ) &&
10
( src === "mark" || !jQuery.data( elem, markDataKey, undefined, true ) ) ) {
11
// Give room for hard-coded callbacks to fire first
12
// and eventually mark/queue something else on the element
13
setTimeout( function() {
14
if ( !jQuery.data( elem, queueDataKey, undefined, true ) &&
15
!jQuery.data( elem, markDataKey, undefined, true ) ) {
16
jQuery.removeData( elem, deferDataKey, true );
25
_mark: function( elem, type ) {
27
type = (type || "fx") + "mark";
28
jQuery.data( elem, type, (jQuery.data(elem,type,undefined,true) || 0) + 1, true );
32
_unmark: function( force, elem, type ) {
33
if ( force !== true ) {
40
var key = type + "mark",
41
count = force ? 0 : ( (jQuery.data( elem, key, undefined, true) || 1 ) - 1 );
43
jQuery.data( elem, key, count, true );
45
jQuery.removeData( elem, key, true );
46
handleQueueMarkDefer( elem, type, "mark" );
4
51
queue: function( elem, type, data ) {
9
type = (type || "fx") + "queue";
10
var q = jQuery._data( elem, type );
12
// Speed up dequeue by getting out quickly if this is just a lookup
53
type = (type || "fx") + "queue";
54
var q = jQuery.data( elem, type, undefined, true );
55
// Speed up dequeue by getting out quickly if this is just a lookup
57
if ( !q || jQuery.isArray(data) ) {
58
q = jQuery.data( elem, type, jQuery.makeArray(data), true );
17
if ( !q || jQuery.isArray(data) ) {
18
q = jQuery._data( elem, type, jQuery.makeArray(data) );
27
67
dequeue: function( elem, type ) {
28
68
type = type || "fx";
30
70
var queue = jQuery.queue( elem, type ),
33
74
// If the fx queue is dequeued, always remove the progress sentinel
34
75
if ( fn === "inprogress" ) {
94
134
clearQueue: function( type ) {
95
135
return this.queue( type || "fx", [] );
137
// Get a promise resolved when queues of a certain type
138
// are emptied (fx is the type by default)
139
promise: function( type, object ) {
140
if ( typeof type !== "string" ) {
145
var defer = jQuery.Deferred(),
149
deferDataKey = type + "defer",
150
queueDataKey = type + "queue",
151
markDataKey = type + "mark",
154
if ( !( --count ) ) {
155
defer.resolveWith( elements, [ elements ] );
159
if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
160
( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
161
jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
162
jQuery.data( elements[ i ], deferDataKey, jQuery._Deferred(), true ) )) {
168
return defer.promise();