Show More
Commit Description:
update application.rb
Commit Description:
update application.rb
References:
File last commit:
Show/Diff file:
Action:
node_modules/jquery/src/callbacks.js
| 236 lines
| 5.4 KiB
| application/javascript
| JavascriptLexer
|
r789 | define( [ | |||
"./core", | ||||
"./core/toType", | ||||
"./var/isFunction", | ||||
"./var/rnothtmlwhite" | ||||
], function( jQuery, toType, isFunction, rnothtmlwhite ) { | ||||
"use strict"; | ||||
// Convert String-formatted options into Object-formatted ones | ||||
function createOptions( options ) { | ||||
var object = {}; | ||||
jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { | ||||
object[ flag ] = true; | ||||
} ); | ||||
return object; | ||||
} | ||||
/* | ||||
* Create a callback list using the following parameters: | ||||
* | ||||
* options: an optional list of space-separated options that will change how | ||||
* the callback list behaves or a more traditional option object | ||||
* | ||||
* By default a callback list will act like an event callback list and can be | ||||
* "fired" multiple times. | ||||
* | ||||
* Possible options: | ||||
* | ||||
* once: will ensure the callback list can only be fired once (like a Deferred) | ||||
* | ||||
* memory: will keep track of previous values and will call any callback added | ||||
* after the list has been fired right away with the latest "memorized" | ||||
* values (like a Deferred) | ||||
* | ||||
* unique: will ensure a callback can only be added once (no duplicate in the list) | ||||
* | ||||
* stopOnFalse: interrupt callings when a callback returns false | ||||
* | ||||
*/ | ||||
jQuery.Callbacks = function( options ) { | ||||
// Convert options from String-formatted to Object-formatted if needed | ||||
// (we check in cache first) | ||||
options = typeof options === "string" ? | ||||
createOptions( options ) : | ||||
jQuery.extend( {}, options ); | ||||
var // Flag to know if list is currently firing | ||||
firing, | ||||
// Last fire value for non-forgettable lists | ||||
memory, | ||||
// Flag to know if list was already fired | ||||
fired, | ||||
// Flag to prevent firing | ||||
locked, | ||||
// Actual callback list | ||||
list = [], | ||||
// Queue of execution data for repeatable lists | ||||
queue = [], | ||||
// Index of currently firing callback (modified by add/remove as needed) | ||||
firingIndex = -1, | ||||
// Fire callbacks | ||||
fire = function() { | ||||
// Enforce single-firing | ||||
locked = locked || options.once; | ||||
// Execute callbacks for all pending executions, | ||||
// respecting firingIndex overrides and runtime changes | ||||
fired = firing = true; | ||||
for ( ; queue.length; firingIndex = -1 ) { | ||||
memory = queue.shift(); | ||||
while ( ++firingIndex < list.length ) { | ||||
// Run callback and check for early termination | ||||
if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && | ||||
options.stopOnFalse ) { | ||||
// Jump to end and forget the data so .add doesn't re-fire | ||||
firingIndex = list.length; | ||||
memory = false; | ||||
} | ||||
} | ||||
} | ||||
// Forget the data if we're done with it | ||||
if ( !options.memory ) { | ||||
memory = false; | ||||
} | ||||
firing = false; | ||||
// Clean up if we're done firing for good | ||||
if ( locked ) { | ||||
// Keep an empty list if we have data for future add calls | ||||
if ( memory ) { | ||||
list = []; | ||||
// Otherwise, this object is spent | ||||
} else { | ||||
list = ""; | ||||
} | ||||
} | ||||
}, | ||||
// Actual Callbacks object | ||||
self = { | ||||
// Add a callback or a collection of callbacks to the list | ||||
add: function() { | ||||
if ( list ) { | ||||
// If we have memory from a past run, we should fire after adding | ||||
if ( memory && !firing ) { | ||||
firingIndex = list.length - 1; | ||||
queue.push( memory ); | ||||
} | ||||
( function add( args ) { | ||||
jQuery.each( args, function( _, arg ) { | ||||
if ( isFunction( arg ) ) { | ||||
if ( !options.unique || !self.has( arg ) ) { | ||||
list.push( arg ); | ||||
} | ||||
} else if ( arg && arg.length && toType( arg ) !== "string" ) { | ||||
// Inspect recursively | ||||
add( arg ); | ||||
} | ||||
} ); | ||||
} )( arguments ); | ||||
if ( memory && !firing ) { | ||||
fire(); | ||||
} | ||||
} | ||||
return this; | ||||
}, | ||||
// Remove a callback from the list | ||||
remove: function() { | ||||
jQuery.each( arguments, function( _, arg ) { | ||||
var index; | ||||
while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { | ||||
list.splice( index, 1 ); | ||||
// Handle firing indexes | ||||
if ( index <= firingIndex ) { | ||||
firingIndex--; | ||||
} | ||||
} | ||||
} ); | ||||
return this; | ||||
}, | ||||
// Check if a given callback is in the list. | ||||
// If no argument is given, return whether or not list has callbacks attached. | ||||
has: function( fn ) { | ||||
return fn ? | ||||
jQuery.inArray( fn, list ) > -1 : | ||||
list.length > 0; | ||||
}, | ||||
// Remove all callbacks from the list | ||||
empty: function() { | ||||
if ( list ) { | ||||
list = []; | ||||
} | ||||
return this; | ||||
}, | ||||
// Disable .fire and .add | ||||
// Abort any current/pending executions | ||||
// Clear all callbacks and values | ||||
disable: function() { | ||||
locked = queue = []; | ||||
list = memory = ""; | ||||
return this; | ||||
}, | ||||
disabled: function() { | ||||
return !list; | ||||
}, | ||||
// Disable .fire | ||||
// Also disable .add unless we have memory (since it would have no effect) | ||||
// Abort any pending executions | ||||
lock: function() { | ||||
locked = queue = []; | ||||
if ( !memory && !firing ) { | ||||
list = memory = ""; | ||||
} | ||||
return this; | ||||
}, | ||||
locked: function() { | ||||
return !!locked; | ||||
}, | ||||
// Call all callbacks with the given context and arguments | ||||
fireWith: function( context, args ) { | ||||
if ( !locked ) { | ||||
args = args || []; | ||||
args = [ context, args.slice ? args.slice() : args ]; | ||||
queue.push( args ); | ||||
if ( !firing ) { | ||||
fire(); | ||||
} | ||||
} | ||||
return this; | ||||
}, | ||||
// Call all the callbacks with the given arguments | ||||
fire: function() { | ||||
self.fireWith( this, arguments ); | ||||
return this; | ||||
}, | ||||
// To know if the callbacks have already been called at least once | ||||
fired: function() { | ||||
return !!fired; | ||||
} | ||||
}; | ||||
return self; | ||||
}; | ||||
return jQuery; | ||||
} ); | ||||