@@ 3386-3477 (lines=92) @@ | ||
3383 | ||
3384 | jQuery.extend( { |
|
3385 | ||
3386 | Deferred: function( func ) { |
|
3387 | var tuples = [ |
|
3388 | ||
3389 | // action, add listener, listener list, final state |
|
3390 | [ "resolve", "done", jQuery.Callbacks( "once memory" ), "resolved" ], |
|
3391 | [ "reject", "fail", jQuery.Callbacks( "once memory" ), "rejected" ], |
|
3392 | [ "notify", "progress", jQuery.Callbacks( "memory" ) ] |
|
3393 | ], |
|
3394 | state = "pending", |
|
3395 | promise = { |
|
3396 | state: function() { |
|
3397 | return state; |
|
3398 | }, |
|
3399 | always: function() { |
|
3400 | deferred.done( arguments ).fail( arguments ); |
|
3401 | return this; |
|
3402 | }, |
|
3403 | then: function( /* fnDone, fnFail, fnProgress */ ) { |
|
3404 | var fns = arguments; |
|
3405 | return jQuery.Deferred( function( newDefer ) { |
|
3406 | jQuery.each( tuples, function( i, tuple ) { |
|
3407 | var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; |
|
3408 | ||
3409 | // deferred[ done | fail | progress ] for forwarding actions to newDefer |
|
3410 | deferred[ tuple[ 1 ] ]( function() { |
|
3411 | var returned = fn && fn.apply( this, arguments ); |
|
3412 | if ( returned && jQuery.isFunction( returned.promise ) ) { |
|
3413 | returned.promise() |
|
3414 | .progress( newDefer.notify ) |
|
3415 | .done( newDefer.resolve ) |
|
3416 | .fail( newDefer.reject ); |
|
3417 | } else { |
|
3418 | newDefer[ tuple[ 0 ] + "With" ]( |
|
3419 | this === promise ? newDefer.promise() : this, |
|
3420 | fn ? [ returned ] : arguments |
|
3421 | ); |
|
3422 | } |
|
3423 | } ); |
|
3424 | } ); |
|
3425 | fns = null; |
|
3426 | } ).promise(); |
|
3427 | }, |
|
3428 | ||
3429 | // Get a promise for this deferred |
|
3430 | // If obj is provided, the promise aspect is added to the object |
|
3431 | promise: function( obj ) { |
|
3432 | return obj != null ? jQuery.extend( obj, promise ) : promise; |
|
3433 | } |
|
3434 | }, |
|
3435 | deferred = {}; |
|
3436 | ||
3437 | // Keep pipe for back-compat |
|
3438 | promise.pipe = promise.then; |
|
3439 | ||
3440 | // Add list-specific methods |
|
3441 | jQuery.each( tuples, function( i, tuple ) { |
|
3442 | var list = tuple[ 2 ], |
|
3443 | stateString = tuple[ 3 ]; |
|
3444 | ||
3445 | // promise[ done | fail | progress ] = list.add |
|
3446 | promise[ tuple[ 1 ] ] = list.add; |
|
3447 | ||
3448 | // Handle state |
|
3449 | if ( stateString ) { |
|
3450 | list.add( function() { |
|
3451 | ||
3452 | // state = [ resolved | rejected ] |
|
3453 | state = stateString; |
|
3454 | ||
3455 | // [ reject_list | resolve_list ].disable; progress_list.lock |
|
3456 | }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); |
|
3457 | } |
|
3458 | ||
3459 | // deferred[ resolve | reject | notify ] |
|
3460 | deferred[ tuple[ 0 ] ] = function() { |
|
3461 | deferred[ tuple[ 0 ] + "With" ]( this === deferred ? promise : this, arguments ); |
|
3462 | return this; |
|
3463 | }; |
|
3464 | deferred[ tuple[ 0 ] + "With" ] = list.fireWith; |
|
3465 | } ); |
|
3466 | ||
3467 | // Make the deferred a promise |
|
3468 | promise.promise( deferred ); |
|
3469 | ||
3470 | // Call given func if any |
|
3471 | if ( func ) { |
|
3472 | func.call( deferred, deferred ); |
|
3473 | } |
|
3474 | ||
3475 | // All done! |
|
3476 | return deferred; |
|
3477 | }, |
|
3478 | ||
3479 | // Deferred helper |
|
3480 | when: function( subordinate /* , ..., subordinateN */ ) { |
@@ 3336-3427 (lines=92) @@ | ||
3333 | ||
3334 | jQuery.extend( { |
|
3335 | ||
3336 | Deferred: function( func ) { |
|
3337 | var tuples = [ |
|
3338 | ||
3339 | // action, add listener, listener list, final state |
|
3340 | [ "resolve", "done", jQuery.Callbacks( "once memory" ), "resolved" ], |
|
3341 | [ "reject", "fail", jQuery.Callbacks( "once memory" ), "rejected" ], |
|
3342 | [ "notify", "progress", jQuery.Callbacks( "memory" ) ] |
|
3343 | ], |
|
3344 | state = "pending", |
|
3345 | promise = { |
|
3346 | state: function() { |
|
3347 | return state; |
|
3348 | }, |
|
3349 | always: function() { |
|
3350 | deferred.done( arguments ).fail( arguments ); |
|
3351 | return this; |
|
3352 | }, |
|
3353 | then: function( /* fnDone, fnFail, fnProgress */ ) { |
|
3354 | var fns = arguments; |
|
3355 | return jQuery.Deferred( function( newDefer ) { |
|
3356 | jQuery.each( tuples, function( i, tuple ) { |
|
3357 | var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; |
|
3358 | ||
3359 | // deferred[ done | fail | progress ] for forwarding actions to newDefer |
|
3360 | deferred[ tuple[ 1 ] ]( function() { |
|
3361 | var returned = fn && fn.apply( this, arguments ); |
|
3362 | if ( returned && jQuery.isFunction( returned.promise ) ) { |
|
3363 | returned.promise() |
|
3364 | .progress( newDefer.notify ) |
|
3365 | .done( newDefer.resolve ) |
|
3366 | .fail( newDefer.reject ); |
|
3367 | } else { |
|
3368 | newDefer[ tuple[ 0 ] + "With" ]( |
|
3369 | this === promise ? newDefer.promise() : this, |
|
3370 | fn ? [ returned ] : arguments |
|
3371 | ); |
|
3372 | } |
|
3373 | } ); |
|
3374 | } ); |
|
3375 | fns = null; |
|
3376 | } ).promise(); |
|
3377 | }, |
|
3378 | ||
3379 | // Get a promise for this deferred |
|
3380 | // If obj is provided, the promise aspect is added to the object |
|
3381 | promise: function( obj ) { |
|
3382 | return obj != null ? jQuery.extend( obj, promise ) : promise; |
|
3383 | } |
|
3384 | }, |
|
3385 | deferred = {}; |
|
3386 | ||
3387 | // Keep pipe for back-compat |
|
3388 | promise.pipe = promise.then; |
|
3389 | ||
3390 | // Add list-specific methods |
|
3391 | jQuery.each( tuples, function( i, tuple ) { |
|
3392 | var list = tuple[ 2 ], |
|
3393 | stateString = tuple[ 3 ]; |
|
3394 | ||
3395 | // promise[ done | fail | progress ] = list.add |
|
3396 | promise[ tuple[ 1 ] ] = list.add; |
|
3397 | ||
3398 | // Handle state |
|
3399 | if ( stateString ) { |
|
3400 | list.add( function() { |
|
3401 | ||
3402 | // state = [ resolved | rejected ] |
|
3403 | state = stateString; |
|
3404 | ||
3405 | // [ reject_list | resolve_list ].disable; progress_list.lock |
|
3406 | }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); |
|
3407 | } |
|
3408 | ||
3409 | // deferred[ resolve | reject | notify ] |
|
3410 | deferred[ tuple[ 0 ] ] = function() { |
|
3411 | deferred[ tuple[ 0 ] + "With" ]( this === deferred ? promise : this, arguments ); |
|
3412 | return this; |
|
3413 | }; |
|
3414 | deferred[ tuple[ 0 ] + "With" ] = list.fireWith; |
|
3415 | } ); |
|
3416 | ||
3417 | // Make the deferred a promise |
|
3418 | promise.promise( deferred ); |
|
3419 | ||
3420 | // Call given func if any |
|
3421 | if ( func ) { |
|
3422 | func.call( deferred, deferred ); |
|
3423 | } |
|
3424 | ||
3425 | // All done! |
|
3426 | return deferred; |
|
3427 | }, |
|
3428 | ||
3429 | // Deferred helper |
|
3430 | when: function( subordinate /* , ..., subordinateN */ ) { |
@@ 3207-3291 (lines=85) @@ | ||
3204 | ||
3205 | jQuery.extend({ |
|
3206 | ||
3207 | Deferred: function( func ) { |
|
3208 | var tuples = [ |
|
3209 | // action, add listener, listener list, final state |
|
3210 | [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], |
|
3211 | [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], |
|
3212 | [ "notify", "progress", jQuery.Callbacks("memory") ] |
|
3213 | ], |
|
3214 | state = "pending", |
|
3215 | promise = { |
|
3216 | state: function() { |
|
3217 | return state; |
|
3218 | }, |
|
3219 | always: function() { |
|
3220 | deferred.done( arguments ).fail( arguments ); |
|
3221 | return this; |
|
3222 | }, |
|
3223 | then: function( /* fnDone, fnFail, fnProgress */ ) { |
|
3224 | var fns = arguments; |
|
3225 | return jQuery.Deferred(function( newDefer ) { |
|
3226 | jQuery.each( tuples, function( i, tuple ) { |
|
3227 | var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; |
|
3228 | // deferred[ done | fail | progress ] for forwarding actions to newDefer |
|
3229 | deferred[ tuple[1] ](function() { |
|
3230 | var returned = fn && fn.apply( this, arguments ); |
|
3231 | if ( returned && jQuery.isFunction( returned.promise ) ) { |
|
3232 | returned.promise() |
|
3233 | .done( newDefer.resolve ) |
|
3234 | .fail( newDefer.reject ) |
|
3235 | .progress( newDefer.notify ); |
|
3236 | } else { |
|
3237 | newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); |
|
3238 | } |
|
3239 | }); |
|
3240 | }); |
|
3241 | fns = null; |
|
3242 | }).promise(); |
|
3243 | }, |
|
3244 | // Get a promise for this deferred |
|
3245 | // If obj is provided, the promise aspect is added to the object |
|
3246 | promise: function( obj ) { |
|
3247 | return obj != null ? jQuery.extend( obj, promise ) : promise; |
|
3248 | } |
|
3249 | }, |
|
3250 | deferred = {}; |
|
3251 | ||
3252 | // Keep pipe for back-compat |
|
3253 | promise.pipe = promise.then; |
|
3254 | ||
3255 | // Add list-specific methods |
|
3256 | jQuery.each( tuples, function( i, tuple ) { |
|
3257 | var list = tuple[ 2 ], |
|
3258 | stateString = tuple[ 3 ]; |
|
3259 | ||
3260 | // promise[ done | fail | progress ] = list.add |
|
3261 | promise[ tuple[1] ] = list.add; |
|
3262 | ||
3263 | // Handle state |
|
3264 | if ( stateString ) { |
|
3265 | list.add(function() { |
|
3266 | // state = [ resolved | rejected ] |
|
3267 | state = stateString; |
|
3268 | ||
3269 | // [ reject_list | resolve_list ].disable; progress_list.lock |
|
3270 | }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); |
|
3271 | } |
|
3272 | ||
3273 | // deferred[ resolve | reject | notify ] |
|
3274 | deferred[ tuple[0] ] = function() { |
|
3275 | deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); |
|
3276 | return this; |
|
3277 | }; |
|
3278 | deferred[ tuple[0] + "With" ] = list.fireWith; |
|
3279 | }); |
|
3280 | ||
3281 | // Make the deferred a promise |
|
3282 | promise.promise( deferred ); |
|
3283 | ||
3284 | // Call given func if any |
|
3285 | if ( func ) { |
|
3286 | func.call( deferred, deferred ); |
|
3287 | } |
|
3288 | ||
3289 | // All done! |
|
3290 | return deferred; |
|
3291 | }, |
|
3292 | ||
3293 | // Deferred helper |
|
3294 | when: function( subordinate /* , ..., subordinateN */ ) { |