tuiHoneyPot

front and back end of my TUI honeypot
Log | Files | Refs | README

queue.js (3091B)


      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 } );