X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fcore.js;h=95de5b978f9b2c00807e3eaf41cd0b475096e6c6;hb=7b1e873cd9656ab9184242cba708faecd5f46c3d;hp=3763cd0fe300ec3826fc140d1834de75110298c5;hpb=5237b09602d5e360da361823748b0f34861b5a9a;p=jquery.git diff --git a/src/core.js b/src/core.js index 3763cd0..95de5b9 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 - deferredMarker = []; + class2type = {}; jQuery.fn = jQuery.prototype = { init: function( selector, context ) { @@ -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,36 @@ 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 + fail: failDeferred.then, + 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 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 ).fail( deferred.cancel ); + + // Unexpose cancel + delete deferred.cancel; // Call given func if any if ( func ) { @@ -935,17 +934,12 @@ jQuery.extend({ return deferred; }, - // Check if an object is a deferred - isDeferred: function( object ) { - return !!( object && object.then && object.then._ === deferredMarker ); - }, - // Deferred helper when: function( object ) { - object = jQuery.isDeferred( object ) ? + object = object && jQuery.isFunction( object.promise ) ? object : jQuery.Deferred().resolve( object ); - return object; + return object.promise(); }, // Use of jQuery.browser is frowned upon. @@ -966,9 +960,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) { @@ -1038,6 +1030,11 @@ function doScrollCheck() { jQuery.ready(); } +// Expose jQuery as an Asynchronous Module +if ( typeof define !== "undefined" ) { + define( "jquery", [], function () { return jQuery; } ); +} + // Expose jQuery to the global object return (window.jQuery = window.$ = jQuery);