Revert "Register as a CommonJS async module if in that kind of environment. Fixes...
[jquery.git] / src / core.js
index efb1683..59a89d2 100644 (file)
@@ -75,10 +75,7 @@ var jQuery = function( selector, context ) {
        indexOf = Array.prototype.indexOf,
 
        // [[Class]] -> type pairs
-       class2type = {},
-       
-       // Marker for deferred
-       deferredMarker = [];
+       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,17 +885,9 @@ jQuery.extend({
                                        cancelled = 1;
                                        callbacks = [];
                                        return this;
-                               },
-                               
-                               // Has this deferred been cancelled?
-                               isCancelled: function() {
-                                       return !!cancelled;
                                }
                        };
                
-               // Add the deferred marker
-               deferred.then._ = deferredMarker;
-               
                return deferred;
        },
        
@@ -906,26 +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
+                   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;
-               
                // 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 ) {
@@ -935,22 +938,12 @@ jQuery.extend({
                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 && jQuery.isFunction( object.promise ) ?
                        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.
@@ -971,9 +964,7 @@ jQuery.extend({
 });
 
 // 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) {
@@ -1043,11 +1034,6 @@ function doScrollCheck() {
        jQuery.ready();
 }
 
-// Expose jQuery as an Asynchronous Module
-if ( typeof define === "function" ) {
-       define( "jquery", [], function () { return jQuery; } );
-}
-
 // Expose jQuery to the global object
 return (window.jQuery = window.$ = jQuery);