@@ 3480-3532 (lines=53) @@ | ||
3477 | }, |
|
3478 | ||
3479 | // Deferred helper |
|
3480 | when: function( subordinate /* , ..., subordinateN */ ) { |
|
3481 | var i = 0, |
|
3482 | resolveValues = slice.call( arguments ), |
|
3483 | length = resolveValues.length, |
|
3484 | ||
3485 | // the count of uncompleted subordinates |
|
3486 | remaining = length !== 1 || |
|
3487 | ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, |
|
3488 | ||
3489 | // the master Deferred. |
|
3490 | // If resolveValues consist of only a single Deferred, just use that. |
|
3491 | deferred = remaining === 1 ? subordinate : jQuery.Deferred(), |
|
3492 | ||
3493 | // Update function for both resolve and progress values |
|
3494 | updateFunc = function( i, contexts, values ) { |
|
3495 | return function( value ) { |
|
3496 | contexts[ i ] = this; |
|
3497 | values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; |
|
3498 | if ( values === progressValues ) { |
|
3499 | deferred.notifyWith( contexts, values ); |
|
3500 | ||
3501 | } else if ( !( --remaining ) ) { |
|
3502 | deferred.resolveWith( contexts, values ); |
|
3503 | } |
|
3504 | }; |
|
3505 | }, |
|
3506 | ||
3507 | progressValues, progressContexts, resolveContexts; |
|
3508 | ||
3509 | // add listeners to Deferred subordinates; treat others as resolved |
|
3510 | if ( length > 1 ) { |
|
3511 | progressValues = new Array( length ); |
|
3512 | progressContexts = new Array( length ); |
|
3513 | resolveContexts = new Array( length ); |
|
3514 | for ( ; i < length; i++ ) { |
|
3515 | if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { |
|
3516 | resolveValues[ i ].promise() |
|
3517 | .progress( updateFunc( i, progressContexts, progressValues ) ) |
|
3518 | .done( updateFunc( i, resolveContexts, resolveValues ) ) |
|
3519 | .fail( deferred.reject ); |
|
3520 | } else { |
|
3521 | --remaining; |
|
3522 | } |
|
3523 | } |
|
3524 | } |
|
3525 | ||
3526 | // if we're not waiting on anything, resolve the master |
|
3527 | if ( !remaining ) { |
|
3528 | deferred.resolveWith( resolveContexts, resolveValues ); |
|
3529 | } |
|
3530 | ||
3531 | return deferred.promise(); |
|
3532 | } |
|
3533 | } ); |
|
3534 | ||
3535 |
@@ 3430-3481 (lines=52) @@ | ||
3427 | }, |
|
3428 | ||
3429 | // Deferred helper |
|
3430 | when: function( subordinate /* , ..., subordinateN */ ) { |
|
3431 | var i = 0, |
|
3432 | resolveValues = slice.call( arguments ), |
|
3433 | length = resolveValues.length, |
|
3434 | ||
3435 | // the count of uncompleted subordinates |
|
3436 | remaining = length !== 1 || |
|
3437 | ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, |
|
3438 | ||
3439 | // the master Deferred. |
|
3440 | // If resolveValues consist of only a single Deferred, just use that. |
|
3441 | deferred = remaining === 1 ? subordinate : jQuery.Deferred(), |
|
3442 | ||
3443 | // Update function for both resolve and progress values |
|
3444 | updateFunc = function( i, contexts, values ) { |
|
3445 | return function( value ) { |
|
3446 | contexts[ i ] = this; |
|
3447 | values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; |
|
3448 | if ( values === progressValues ) { |
|
3449 | deferred.notifyWith( contexts, values ); |
|
3450 | } else if ( !( --remaining ) ) { |
|
3451 | deferred.resolveWith( contexts, values ); |
|
3452 | } |
|
3453 | }; |
|
3454 | }, |
|
3455 | ||
3456 | progressValues, progressContexts, resolveContexts; |
|
3457 | ||
3458 | // Add listeners to Deferred subordinates; treat others as resolved |
|
3459 | if ( length > 1 ) { |
|
3460 | progressValues = new Array( length ); |
|
3461 | progressContexts = new Array( length ); |
|
3462 | resolveContexts = new Array( length ); |
|
3463 | for ( ; i < length; i++ ) { |
|
3464 | if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { |
|
3465 | resolveValues[ i ].promise() |
|
3466 | .progress( updateFunc( i, progressContexts, progressValues ) ) |
|
3467 | .done( updateFunc( i, resolveContexts, resolveValues ) ) |
|
3468 | .fail( deferred.reject ); |
|
3469 | } else { |
|
3470 | --remaining; |
|
3471 | } |
|
3472 | } |
|
3473 | } |
|
3474 | ||
3475 | // If we're not waiting on anything, resolve the master |
|
3476 | if ( !remaining ) { |
|
3477 | deferred.resolveWith( resolveContexts, resolveValues ); |
|
3478 | } |
|
3479 | ||
3480 | return deferred.promise(); |
|
3481 | } |
|
3482 | } ); |
|
3483 | ||
3484 |
@@ 3294-3343 (lines=50) @@ | ||
3291 | }, |
|
3292 | ||
3293 | // Deferred helper |
|
3294 | when: function( subordinate /* , ..., subordinateN */ ) { |
|
3295 | var i = 0, |
|
3296 | resolveValues = slice.call( arguments ), |
|
3297 | length = resolveValues.length, |
|
3298 | ||
3299 | // the count of uncompleted subordinates |
|
3300 | remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, |
|
3301 | ||
3302 | // the master Deferred. If resolveValues consist of only a single Deferred, just use that. |
|
3303 | deferred = remaining === 1 ? subordinate : jQuery.Deferred(), |
|
3304 | ||
3305 | // Update function for both resolve and progress values |
|
3306 | updateFunc = function( i, contexts, values ) { |
|
3307 | return function( value ) { |
|
3308 | contexts[ i ] = this; |
|
3309 | values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; |
|
3310 | if ( values === progressValues ) { |
|
3311 | deferred.notifyWith( contexts, values ); |
|
3312 | } else if ( !( --remaining ) ) { |
|
3313 | deferred.resolveWith( contexts, values ); |
|
3314 | } |
|
3315 | }; |
|
3316 | }, |
|
3317 | ||
3318 | progressValues, progressContexts, resolveContexts; |
|
3319 | ||
3320 | // add listeners to Deferred subordinates; treat others as resolved |
|
3321 | if ( length > 1 ) { |
|
3322 | progressValues = new Array( length ); |
|
3323 | progressContexts = new Array( length ); |
|
3324 | resolveContexts = new Array( length ); |
|
3325 | for ( ; i < length; i++ ) { |
|
3326 | if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { |
|
3327 | resolveValues[ i ].promise() |
|
3328 | .done( updateFunc( i, resolveContexts, resolveValues ) ) |
|
3329 | .fail( deferred.reject ) |
|
3330 | .progress( updateFunc( i, progressContexts, progressValues ) ); |
|
3331 | } else { |
|
3332 | --remaining; |
|
3333 | } |
|
3334 | } |
|
3335 | } |
|
3336 | ||
3337 | // if we're not waiting on anything, resolve the master |
|
3338 | if ( !remaining ) { |
|
3339 | deferred.resolveWith( resolveContexts, resolveValues ); |
|
3340 | } |
|
3341 | ||
3342 | return deferred.promise(); |
|
3343 | } |
|
3344 | }); |
|
3345 | ||
3346 |