scratch – Blame information for rev 58

Subversion Repositories:
Rev:
Rev Author Line No. Line
58 office 1 define( [
2 "./core",
3 "./data/var/dataPriv",
4 "./deferred",
5 "./callbacks"
6 ], function( jQuery, dataPriv ) {
7  
8 "use strict";
9  
10 jQuery.extend( {
11 queue: function( elem, type, data ) {
12 var queue;
13  
14 if ( elem ) {
15 type = ( type || "fx" ) + "queue";
16 queue = dataPriv.get( elem, type );
17  
18 // Speed up dequeue by getting out quickly if this is just a lookup
19 if ( data ) {
20 if ( !queue || jQuery.isArray( data ) ) {
21 queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
22 } else {
23 queue.push( data );
24 }
25 }
26 return queue || [];
27 }
28 },
29  
30 dequeue: function( elem, type ) {
31 type = type || "fx";
32  
33 var queue = jQuery.queue( elem, type ),
34 startLength = queue.length,
35 fn = queue.shift(),
36 hooks = jQuery._queueHooks( elem, type ),
37 next = function() {
38 jQuery.dequeue( elem, type );
39 };
40  
41 // If the fx queue is dequeued, always remove the progress sentinel
42 if ( fn === "inprogress" ) {
43 fn = queue.shift();
44 startLength--;
45 }
46  
47 if ( fn ) {
48  
49 // Add a progress sentinel to prevent the fx queue from being
50 // automatically dequeued
51 if ( type === "fx" ) {
52 queue.unshift( "inprogress" );
53 }
54  
55 // Clear up the last queue stop function
56 delete hooks.stop;
57 fn.call( elem, next, hooks );
58 }
59  
60 if ( !startLength && hooks ) {
61 hooks.empty.fire();
62 }
63 },
64  
65 // Not public - generate a queueHooks object, or return the current one
66 _queueHooks: function( elem, type ) {
67 var key = type + "queueHooks";
68 return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
69 empty: jQuery.Callbacks( "once memory" ).add( function() {
70 dataPriv.remove( elem, [ type + "queue", key ] );
71 } )
72 } );
73 }
74 } );
75  
76 jQuery.fn.extend( {
77 queue: function( type, data ) {
78 var setter = 2;
79  
80 if ( typeof type !== "string" ) {
81 data = type;
82 type = "fx";
83 setter--;
84 }
85  
86 if ( arguments.length < setter ) {
87 return jQuery.queue( this[ 0 ], type );
88 }
89  
90 return data === undefined ?
91 this :
92 this.each( function() {
93 var queue = jQuery.queue( this, type, data );
94  
95 // Ensure a hooks for this queue
96 jQuery._queueHooks( this, type );
97  
98 if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
99 jQuery.dequeue( this, type );
100 }
101 } );
102 },
103 dequeue: function( type ) {
104 return this.each( function() {
105 jQuery.dequeue( this, type );
106 } );
107 },
108 clearQueue: function( type ) {
109 return this.queue( type || "fx", [] );
110 },
111  
112 // Get a promise resolved when queues of a certain type
113 // are emptied (fx is the type by default)
114 promise: function( type, obj ) {
115 var tmp,
116 count = 1,
117 defer = jQuery.Deferred(),
118 elements = this,
119 i = this.length,
120 resolve = function() {
121 if ( !( --count ) ) {
122 defer.resolveWith( elements, [ elements ] );
123 }
124 };
125  
126 if ( typeof type !== "string" ) {
127 obj = type;
128 type = undefined;
129 }
130 type = type || "fx";
131  
132 while ( i-- ) {
133 tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
134 if ( tmp && tmp.empty ) {
135 count++;
136 tmp.empty.add( resolve );
137 }
138 }
139 resolve();
140 return defer.promise( obj );
141 }
142 } );
143  
144 return jQuery;
145 } );