Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
jquery/src/queue.js /
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
141 lines (119 sloc)
3.03 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import jQuery from "./core.js"; | |
| import dataPriv from "./data/var/dataPriv.js"; | |
| import "./deferred.js"; | |
| import "./callbacks.js"; | |
| jQuery.extend( { | |
| queue: function( elem, type, data ) { | |
| var queue; | |
| if ( elem ) { | |
| type = ( type || "fx" ) + "queue"; | |
| queue = dataPriv.get( elem, type ); | |
| // Speed up dequeue by getting out quickly if this is just a lookup | |
| if ( data ) { | |
| if ( !queue || Array.isArray( data ) ) { | |
| queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); | |
| } else { | |
| queue.push( data ); | |
| } | |
| } | |
| return queue || []; | |
| } | |
| }, | |
| dequeue: function( elem, type ) { | |
| type = type || "fx"; | |
| var queue = jQuery.queue( elem, type ), | |
| startLength = queue.length, | |
| fn = queue.shift(), | |
| hooks = jQuery._queueHooks( elem, type ), | |
| next = function() { | |
| jQuery.dequeue( elem, type ); | |
| }; | |
| // If the fx queue is dequeued, always remove the progress sentinel | |
| if ( fn === "inprogress" ) { | |
| fn = queue.shift(); | |
| startLength--; | |
| } | |
| if ( fn ) { | |
| // Add a progress sentinel to prevent the fx queue from being | |
| // automatically dequeued | |
| if ( type === "fx" ) { | |
| queue.unshift( "inprogress" ); | |
| } | |
| // Clear up the last queue stop function | |
| delete hooks.stop; | |
| fn.call( elem, next, hooks ); | |
| } | |
| if ( !startLength && hooks ) { | |
| hooks.empty.fire(); | |
| } | |
| }, | |
| // Not public - generate a queueHooks object, or return the current one | |
| _queueHooks: function( elem, type ) { | |
| var key = type + "queueHooks"; | |
| return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { | |
| empty: jQuery.Callbacks( "once memory" ).add( function() { | |
| dataPriv.remove( elem, [ type + "queue", key ] ); | |
| } ) | |
| } ); | |
| } | |
| } ); | |
| jQuery.fn.extend( { | |
| queue: function( type, data ) { | |
| var setter = 2; | |
| if ( typeof type !== "string" ) { | |
| data = type; | |
| type = "fx"; | |
| setter--; | |
| } | |
| if ( arguments.length < setter ) { | |
| return jQuery.queue( this[ 0 ], type ); | |
| } | |
| return data === undefined ? | |
| this : | |
| this.each( function() { | |
| var queue = jQuery.queue( this, type, data ); | |
| // Ensure a hooks for this queue | |
| jQuery._queueHooks( this, type ); | |
| if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { | |
| jQuery.dequeue( this, type ); | |
| } | |
| } ); | |
| }, | |
| dequeue: function( type ) { | |
| return this.each( function() { | |
| jQuery.dequeue( this, type ); | |
| } ); | |
| }, | |
| clearQueue: function( type ) { | |
| return this.queue( type || "fx", [] ); | |
| }, | |
| // Get a promise resolved when queues of a certain type | |
| // are emptied (fx is the type by default) | |
| promise: function( type, obj ) { | |
| var tmp, | |
| count = 1, | |
| defer = jQuery.Deferred(), | |
| elements = this, | |
| i = this.length, | |
| resolve = function() { | |
| if ( !( --count ) ) { | |
| defer.resolveWith( elements, [ elements ] ); | |
| } | |
| }; | |
| if ( typeof type !== "string" ) { | |
| obj = type; | |
| type = undefined; | |
| } | |
| type = type || "fx"; | |
| while ( i-- ) { | |
| tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); | |
| if ( tmp && tmp.empty ) { | |
| count++; | |
| tmp.empty.add( resolve ); | |
| } | |
| } | |
| resolve(); | |
| return defer.promise( obj ); | |
| } | |
| } ); | |
| export default jQuery; |