| @@ 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 | ||