class2type = {},
// Marker for deferred
- deferredMarker = [];
+ promiseMarker = [];
jQuery.fn = jQuery.prototype = {
init: function( selector, context ) {
}
};
- // Add the deferred marker
- deferred.then._ = deferredMarker;
-
return deferred;
},
fail: errorDeferred.then,
fireReject: errorDeferred.fire,
reject: errorDeferred.resolve,
- isRejected: errorDeferred.isResolved
+ 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 ];
+ }
+ return obj;
+ }
} );
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 );
return deferred;
},
- // Check if an object is a deferred
- isDeferred: function( object , method ) {
- method = method || "then";
- return !!( object && object[ method ] && object[ method ]._ === deferredMarker );
- },
-
// Deferred helper
- when: function( object , method ) {
- method = method || "then";
- object = jQuery.isDeferred( object , method ) ?
+ when: function( object ) {
+ object = object && object.promise && object.promise._ === promiseMarker ?
object :
jQuery.Deferred().resolve( object );
- object.fail = object.fail || function() { return this; };
- object[ method ] = object[ method ] || object.then;
- object.then = object.then || object[ method ];
- return object;
+ return object.promise();
},
// Use of jQuery.browser is frowned upon.
});
// Create readyList deferred
-// also force $.fn.ready to be recognized as a defer
readyList = jQuery._Deferred();
-jQuery.fn.ready._ = deferredMarker;
// Populate the class2type map
jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {