Mercurial > nebulaweb3
comparison default/node_modules/jquery/src/queue.js @ 0:1d038bc9b3d2 default tip
Up:default
author | Liny <dev@neowd.com> |
---|---|
date | Sat, 31 May 2025 09:21:51 +0800 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:1d038bc9b3d2 |
---|---|
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 || Array.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 } ); |