Showing with 20 additions and 18 deletions.
  1. +8 −9 src/callbacks.js
  2. +12 −9 src/deferred.js
@@ -60,15 +60,15 @@ jQuery.Callbacks = function( options ) {
firingIndex,
// Fire callbacks
fire = function( data ) {
memory = !options.memory || data;
memory = options.memory && data;
fired = true;
firingIndex = firingStart || 0;
firingStart = 0;
firingLength = list.length;
firing = true;
for ( ; list && firingIndex < firingLength; firingIndex++ ) {
if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
memory = true; // Mark as halted
memory = false; // To prevent further calls using add
break;
}
}
@@ -78,10 +78,10 @@ jQuery.Callbacks = function( options ) {
if ( stack.length ) {
fire( stack.shift() );
}
} else if ( memory === true ) {
self.disable();
} else {
} else if ( memory ) {
list = [];
} else {
self.disable();
}
}
},
@@ -107,9 +107,8 @@ jQuery.Callbacks = function( options ) {
if ( firing ) {
firingLength = list.length;
// With memory, if we're not firing then
// we should call right away, unless previous
// firing was halted (stopOnFalse)
} else if ( memory && memory !== true ) {
// we should call right away
} else if ( memory ) {
firingStart = start;
fire( memory );
}
@@ -158,7 +157,7 @@ jQuery.Callbacks = function( options ) {
// Lock the list in its current state
lock: function() {
stack = undefined;
if ( !memory || memory === true ) {
if ( !memory ) {
self.disable();
}
return this;
@@ -7,9 +7,9 @@ jQuery.extend({

Deferred: function( func ) {
var tuples = [
// action, add listener, listener list
[ "resolve", "done", jQuery.Callbacks("once memory") ],
[ "reject", "fail", jQuery.Callbacks("once memory") ],
// action, add listener, listener list, final state
[ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
[ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
[ "notify", "progress", jQuery.Callbacks("memory") ]
],
state = "pending",
@@ -59,19 +59,22 @@ jQuery.extend({

// Add list-specific methods
jQuery.each( tuples, function( i, tuple ) {
var list = tuple[ 2 ], stateString;
var list = tuple[ 2 ],
stateString = tuple[ 3 ];

// promise[ done | fail | progress ] = list.add
promise[ tuple[1] ] = list.add;

// Handle state
if ( i < 2 ) {
stateString = tuple[ 0 ].replace( /e?$/, "ed" );
if ( stateString ) {
list.add(function() {
// state = [ resolved | rejected ]
state = stateString;
tuples[ i ^ 1 ][ 2 ].disable();
tuples[ 2 ][ 2 ].lock();
});

// [ reject_list | resolve_list ].disable; progress_list.lock
}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );

// <DEPRECATED> [ isResolved | isRejected ] = [ resolve_list | reject_list ].fired
promise[ "isR" + stateString.substr( 1 ) ] = list.fired;
}