- // Typical success/error system
- Deferred: function( func , cancellable ) {
-
- // Handle varargs
- if ( arguments.length === 1 ) {
-
- if ( typeof func === "boolean" ) {
- cancellable = func;
- func = 0;
- }
- }
-
- var errorDeferred = jQuery._Deferred( cancellable ),
- deferred = jQuery._Deferred( cancellable ),
- // Keep reference of the cancel method since we'll redefine it
- cancelThen = deferred.cancel;
-
- // Add errorDeferred methods and redefine cancel
- jQuery.extend( deferred , {
-
- fail: errorDeferred.then,
- fireReject: errorDeferred.fire,
- reject: errorDeferred.resolve,
- cancel: function() {
- cancelThen();
- errorDeferred.cancel();
- return this;
+ Deferred: function( func ) {
+ var deferred = jQuery._Deferred(),
+ failDeferred = jQuery._Deferred(),
+ promise,
+ invert;
+ // Add errorDeferred methods, then, promise and invert
+ jQuery.extend( deferred, {
+ then: function( doneCallbacks, failCallbacks ) {
+ deferred.done( doneCallbacks ).fail( failCallbacks );
+ return this;
+ },
+ fail: failDeferred.done,
+ rejectWith: failDeferred.resolveWith,
+ 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 ) {
+ if ( obj == null ) {
+ if ( promise ) {
+ return promise;
+ }
+ promise = obj = {};