X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fcore.js;h=edd2c94d891a76e173f4975521540cf297b57146;hb=cbf591152c9f61381e552c9a15bb7c339f1451a9;hp=3bbdce3c63e12b3015acfa5d9d690b6e6a23404b;hpb=6dbffb8596a9c96c68386ecc2d95da25b9dee369;p=jquery.git diff --git a/src/core.js b/src/core.js index 3bbdce3..edd2c94 100644 --- a/src/core.js +++ b/src/core.js @@ -75,10 +75,7 @@ var jQuery = function( selector, context ) { indexOf = Array.prototype.indexOf, // [[Class]] -> type pairs - class2type = {}, - - // Marker for deferred - promiseMarker = []; + class2type = {}; jQuery.fn = jQuery.prototype = { init: function( selector, context ) { @@ -261,7 +258,7 @@ jQuery.fn = jQuery.prototype = { jQuery.bindReady(); // Change ready & apply - return ( jQuery.fn.ready = readyList.then ).apply( this , arguments ); + return ( jQuery.fn.ready = readyList.complete ).apply( this , arguments ); }, eq: function( i ) { @@ -818,8 +815,8 @@ jQuery.extend({ // the deferred itself deferred = { - // then( f1, f2, ...) - then: function () { + // complete( f1, f2, ...) + complete: function () { if ( ! cancelled ) { @@ -839,7 +836,7 @@ jQuery.extend({ elem = args[ i ]; type = jQuery.type( elem ); if ( type === "array" ) { - deferred.then.apply( deferred , elem ); + deferred.complete.apply( deferred , elem ); } else if ( type === "function" ) { callbacks.push( elem ); } @@ -874,7 +871,7 @@ jQuery.extend({ // resolve with this as context and given arguments resolve: function() { - deferred.fire( this , arguments ); + deferred.fire( jQuery.isFunction( this.promise ) ? this.promise() : this , arguments ); return this; }, @@ -888,11 +885,6 @@ jQuery.extend({ cancelled = 1; callbacks = []; return this; - }, - - // Has this deferred been cancelled? - isCancelled: function() { - return !!cancelled; } }; @@ -903,38 +895,40 @@ jQuery.extend({ // Typical success/error system Deferred: function( func ) { - var errorDeferred = jQuery._Deferred(), - deferred = jQuery._Deferred(), - successCancel = deferred.cancel; + var deferred = jQuery._Deferred(), + failDeferred = jQuery._Deferred(); // Add errorDeferred methods and redefine cancel jQuery.extend( deferred , { - fail: errorDeferred.then, - fireReject: errorDeferred.fire, - reject: errorDeferred.resolve, - isRejected: errorDeferred.isResolved, - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - obj = obj || {}; - for ( var i in { then:1 , fail:1 , isResolved:1 , isRejected:1 , promise:1 } ) { - obj[ i ] = deferred[ i ]; - } + then: function( completeCallbacks , failCallbacks ) { + deferred.complete( completeCallbacks ).fail( failCallbacks ); + return this; + }, + fail: failDeferred.complete, + fireReject: failDeferred.fire, + reject: failDeferred.resolve, + isRejected: failDeferred.isResolved, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + obj = obj || {}; + jQuery.each( "then complete fail isResolved isRejected".split( " " ) , function( _ , method ) { + obj[ method ] = deferred[ method ]; + }); + obj.promise = function() { return obj; - } + }; + return obj; + } } ); - // Remove cancel related - delete deferred.cancel; - delete deferred.isCancelled; - - // Add promise marker - deferred.promise._ = promiseMarker; - // Make sure only one callback list will be used - deferred.then( errorDeferred.cancel ).fail( successCancel ); + deferred.then( failDeferred.cancel , deferred.cancel ); + + // Unexpose cancel + delete deferred.cancel; // Call given func if any if ( func ) { @@ -946,7 +940,7 @@ jQuery.extend({ // Deferred helper when: function( object ) { - object = object && object.promise && object.promise._ === promiseMarker ? + object = object && jQuery.isFunction( object.promise ) ? object : jQuery.Deferred().resolve( object ); return object.promise();