Skip to content

Commit 4f3f0e1

Browse files
committed
Fixes repeatable callbacks list with memory disabling. Unit tests for Deferreds updated.
1 parent a3a657c commit 4f3f0e1

File tree

2 files changed

+35
-34
lines changed

2 files changed

+35
-34
lines changed

src/callbacks.js

Lines changed: 29 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,33 @@ jQuery.Callbacks = function( flags, filter ) {
100100
}
101101
}
102102
},
103+
fire = function( context, args ) {
104+
args = args || [];
105+
memory = !flags.memory || [ context, args ];
106+
firing = true;
107+
firingIndex = firingStart || 0;
108+
firingStart = 0;
109+
firingLength = list.length;
110+
for ( ; list && firingIndex < firingLength; firingIndex++ ) {
111+
if ( list[ firingIndex ][ 1 ].apply( context, args ) === false && flags.stopOnFalse ) {
112+
memory = true; // Mark as halted
113+
break;
114+
}
115+
}
116+
firing = false;
117+
if ( list ) {
118+
if ( !flags.once ) {
119+
if ( stack && stack.length ) {
120+
memory = stack.shift();
121+
object.fireWith( memory[ 0 ], memory[ 1 ] );
122+
}
123+
} else if ( memory === true ) {
124+
object.disable();
125+
} else {
126+
list = [];
127+
}
128+
}
129+
},
103130
object = {
104131
// Add a callback or a collection of callbacks to the list
105132
add: function() {
@@ -116,10 +143,8 @@ jQuery.Callbacks = function( flags, filter ) {
116143
// we should call right away, unless previous
117144
// firing was halted (stopOnFalse)
118145
} else if ( memory && memory !== true ) {
119-
var tmp = memory;
120-
memory = undefined;
121146
firingStart = length;
122-
object.fireWith( tmp[ 0 ], tmp[ 1 ] );
147+
fire( memory[ 0 ], memory[ 1 ] );
123148
}
124149
}
125150
return this;
@@ -197,31 +222,7 @@ jQuery.Callbacks = function( flags, filter ) {
197222
stack.push( [ context, args ] );
198223
}
199224
} else if ( !( flags.once && memory ) ) {
200-
args = args || [];
201-
memory = !flags.memory || [ context, args ];
202-
firing = true;
203-
firingIndex = firingStart || 0;
204-
firingStart = 0;
205-
firingLength = list.length;
206-
for ( ; list && firingIndex < firingLength; firingIndex++ ) {
207-
if ( list[ firingIndex ][ 1 ].apply( context, args ) === false && flags.stopOnFalse ) {
208-
memory = true; // Mark as halted
209-
break;
210-
}
211-
}
212-
firing = false;
213-
if ( list ) {
214-
if ( !flags.once ) {
215-
if ( stack && stack.length ) {
216-
memory = stack.shift();
217-
object.fireWith( memory[ 0 ], memory[ 1 ] );
218-
}
219-
} else if ( memory === true ) {
220-
object.disable();
221-
} else {
222-
list = [];
223-
}
224-
}
225+
fire( context, args );
225226
}
226227
}
227228
return this;

test/unit/deferred.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ jQuery.each( [ "", " - new operator" ], function( _, withNew ) {
3939
createDeferred( function( defer ) {
4040
var checked = 0;
4141
defer.progress(function( value ) {
42-
strictEqual( value, checked, "Progress: right value (" + value + ") received" )
42+
strictEqual( value, checked, "Progress: right value (" + value + ") received" );
4343
});
4444
for( checked = 0; checked < 3 ; checked++ ) {
4545
defer.ping( checked );
@@ -146,8 +146,8 @@ test( "jQuery.Deferred.pipe - filtering (progress)", function() {
146146

147147
defer.ping( 2, 3 );
148148

149-
strictEqual( value1, 2, "first reject value ok" );
150-
strictEqual( value2, 3, "second reject value ok" );
149+
strictEqual( value1, 2, "first progress value ok" );
150+
strictEqual( value2, 3, "second progress value ok" );
151151
strictEqual( value3, 6, "result of filter ok" );
152152
});
153153

@@ -236,8 +236,8 @@ test( "jQuery.Deferred.pipe - deferred (progress)", function() {
236236

237237
defer.ping( 2, 3 );
238238

239-
strictEqual( value1, 2, "first reject value ok" );
240-
strictEqual( value2, 3, "second reject value ok" );
239+
strictEqual( value1, 2, "first progress value ok" );
240+
strictEqual( value2, 3, "second progress value ok" );
241241
strictEqual( value3, 6, "result of filter ok" );
242242
});
243243

@@ -284,7 +284,7 @@ test( "jQuery.when" , function() {
284284

285285
test("jQuery.when - joined", function() {
286286

287-
expect(50);
287+
expect(53);
288288

289289
var deferreds = {
290290
value: 1,

0 commit comments

Comments
 (0)