X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fcore.js;h=036b2db6b9722650938b7187c24b29175cef1090;hb=5d9db486c774c10293d0813c89dfdbd973120030;hp=2e63472361b150b3e2abcce9111ca1eb65b0eb48;hpb=462bb1f66abf239492ee33c60feee3402fe64f77;p=jquery.git diff --git a/src/core.js b/src/core.js index 2e63472..036b2db 100644 --- a/src/core.js +++ b/src/core.js @@ -56,16 +56,8 @@ var jQuery = function( selector, context ) { // The deferred used on DOM ready readyList, - // Promise methods (with equivalent for invert) - promiseMethods = { - then: 0, // will be overwritten for invert - done: "fail", - fail: "done", - isResolved: "isRejected", - isRejected: "isResolved", - promise: "invert", - invert: "promise" - }, + // Promise methods + promiseMethods = "then done fail isResolved isRejected promise".split( " " ), // The ready event handler DOMContentLoaded, @@ -302,7 +294,7 @@ jQuery.fn = jQuery.prototype = { jQuery.fn.init.prototype = jQuery.fn; jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, + var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {}, i = 1, length = arguments.length, @@ -885,9 +877,8 @@ jQuery.extend({ Deferred: function( func ) { var deferred = jQuery._Deferred(), failDeferred = jQuery._Deferred(), - promise, - invert; - // Add errorDeferred methods, then, promise and invert + promise; + // Add errorDeferred methods, then and promise jQuery.extend( deferred, { then: function( doneCallbacks, failCallbacks ) { deferred.done( doneCallbacks ).fail( failCallbacks ); @@ -906,32 +897,15 @@ jQuery.extend({ } promise = obj = {}; } - for( var methodName in promiseMethods ) { - obj[ methodName ] = deferred[ methodName ]; - } - return obj; - }, - // Get the invert promise for this deferred - // If obj is provided, the invert promise aspect is added to the object - invert: function( obj ) { - if ( obj == null ) { - if ( invert ) { - return invert; - } - invert = obj = {}; - } - for( var methodName in promiseMethods ) { - obj[ methodName ] = promiseMethods[ methodName ] && deferred[ promiseMethods[methodName] ]; + var i = promiseMethods.length; + while( i-- ) { + obj[ promiseMethods[i] ] = deferred[ promiseMethods[i] ]; } - obj.then = invert.then || function( doneCallbacks, failCallbacks ) { - deferred.done( failCallbacks ).fail( doneCallbacks ); - return this; - }; return obj; } } ); // Make sure only one callback list will be used - deferred.then( failDeferred.cancel, deferred.cancel ); + deferred.done( failDeferred.cancel ).fail( deferred.cancel ); // Unexpose cancel delete deferred.cancel; // Call given func if any @@ -943,24 +917,34 @@ jQuery.extend({ // Deferred helper when: function( object ) { - var args = arguments, - length = args.length, - deferred = length <= 1 && object && jQuery.isFunction( object.promise ) ? + var lastIndex = arguments.length, + deferred = lastIndex <= 1 && object && jQuery.isFunction( object.promise ) ? object : jQuery.Deferred(), - promise = deferred.promise(), - resolveArray; - - if ( length > 1 ) { - resolveArray = new Array( length ); - jQuery.each( args, function( index, element ) { - jQuery.when( element ).then( function( value ) { - resolveArray[ index ] = arguments.length > 1 ? slice.call( arguments, 0 ) : value; - if( ! --length ) { - deferred.resolveWith( promise, resolveArray ); - } - }, deferred.reject ); - } ); + promise = deferred.promise(); + + if ( lastIndex > 1 ) { + var array = slice.call( arguments, 0 ), + count = lastIndex, + iCallback = function( index ) { + return function( value ) { + array[ index ] = arguments.length > 1 ? slice.call( arguments, 0 ) : value; + if ( !( --count ) ) { + deferred.resolveWith( promise, array ); + } + }; + }; + while( ( lastIndex-- ) ) { + object = array[ lastIndex ]; + if ( object && jQuery.isFunction( object.promise ) ) { + object.promise().then( iCallback(lastIndex), deferred.reject ); + } else { + --count; + } + } + if ( !count ) { + deferred.resolveWith( promise, array ); + } } else if ( deferred !== object ) { deferred.resolve( object ); } @@ -1076,6 +1060,6 @@ function doScrollCheck() { } // Expose jQuery to the global object -return (window.jQuery = window.$ = jQuery); +return jQuery; })();