Merge branch 'fix8033' of https://github.com/SlexAxton/jquery into SlexAxton-fix8033
authorjeresig <jeresig@gmail.com>
Mon, 14 Feb 2011 17:35:27 +0000 (12:35 -0500)
committerjeresig <jeresig@gmail.com>
Mon, 14 Feb 2011 17:35:27 +0000 (12:35 -0500)
1  2 
src/core.js

diff --combined src/core.js
@@@ -26,6 -26,9 +26,6 @@@ var jQuery = function( selector, contex
        trimLeft = /^\s+/,
        trimRight = /\s+$/,
  
 -      // Check for non-word characters
 -      rnonword = /\W/,
 -
        // Check for digits
        rdigit = /\d/,
  
        // The deferred used on DOM ready
        readyList,
  
 -      // Promise methods
 -      promiseMethods = "then done fail isResolved isRejected promise".split( " " ),
 +      // Promise methods (with equivalent for invert)
 +      promiseMethods = {
 +              then: 0, // will be overwritten for invert
 +              done: "fail",
 +              fail: "done",
 +              isResolved: "isRejected",
 +              isRejected: "isResolved",
 +              promise: "invert",
 +              invert: "promise"
 +      },
  
        // The ready event handler
        DOMContentLoaded,
@@@ -574,8 -569,10 +574,8 @@@ jQuery.extend(
                if ( data && rnotwhite.test(data) ) {
                        // Inspired by code by Andrea Giammarchi
                        // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
 -                      var head = document.getElementsByTagName("head")[0] || document.documentElement,
 -                              script = document.createElement("script");
 -
 -                      script.type = "text/javascript";
 +                      var head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement,
 +                              script = document.createElement( "script" );
  
                        if ( jQuery.support.scriptEval() ) {
                                script.appendChild( document.createTextNode( data ) );
        Deferred: function( func ) {
                var deferred = jQuery._Deferred(),
                        failDeferred = jQuery._Deferred(),
 -                      promise;
 -              // Add errorDeferred methods, then and promise
 +                      promise,
 +                      invert;
 +              // Add errorDeferred methods, then, promise and invert
                jQuery.extend( deferred, {
                        then: function( doneCallbacks, failCallbacks ) {
                                deferred.done( doneCallbacks ).fail( failCallbacks );
                        isRejected: failDeferred.isResolved,
                        // Get a promise for this deferred
                        // If obj is provided, the promise aspect is added to the object
 -                      promise: function( obj , i /* internal */ ) {
 +                      promise: function( obj ) {
                                if ( obj == null ) {
                                        if ( promise ) {
                                                return promise;
                                        }
                                        promise = obj = {};
                                }
 -                              i = promiseMethods.length;
 -                              while( i-- ) {
 -                                      obj[ promiseMethods[ i ] ] = deferred[ promiseMethods[ i ] ];
 +                              for( var methodName in promiseMethods ) {
 +                                      obj[ methodName ] = deferred[ methodName ];
                                }
                                return obj;
 +                      },
 +                      // Get the invert promise for this deferred
 +                      // If obj is provided, the invert promise aspect is added to the object
 +                      invert: function( obj ) {
 +                              if ( obj == null ) {
 +                                      if ( invert ) {
 +                                              return invert;
 +                                      }
 +                                      invert = obj = {};
 +                              }
 +                              for( var methodName in promiseMethods ) {
 +                                      obj[ methodName ] = promiseMethods[ methodName ] && deferred[ promiseMethods[methodName] ];
 +                              }
 +                              obj.then = invert.then || function( doneCallbacks, failCallbacks ) {
 +                                      deferred.done( failCallbacks ).fail( doneCallbacks );
 +                                      return this;
 +                              };
 +                              return obj;
                        }
                } );
                // Make sure only one callback list will be used
  
                if ( length > 1 ) {
                        resolveArray = new Array( length );
 -                      jQuery.each( args, function( index, element, args ) {
 +                      jQuery.each( args, function( index, element ) {
                                jQuery.when( element ).then( function( value ) {
 -                                      args = arguments;
 -                                      resolveArray[ index ] = args.length > 1 ? slice.call( args, 0 ) : value;
 +                                      resolveArray[ index ] = arguments.length > 1 ? slice.call( arguments, 0 ) : value;
                                        if( ! --length ) {
                                                deferred.resolveWith( promise, resolveArray );
                                        }
                return { browser: match[1] || "", version: match[2] || "0" };
        },
  
 -      subclass: function(){
 +      sub: function() {
                function jQuerySubclass( selector, context ) {
                        return new jQuerySubclass.fn.init( selector, context );
                }
 +              jQuery.extend( true, jQuerySubclass, this );
                jQuerySubclass.superclass = this;
                jQuerySubclass.fn = jQuerySubclass.prototype = this();
                jQuerySubclass.fn.constructor = jQuerySubclass;
                jQuerySubclass.subclass = this.subclass;
                jQuerySubclass.fn.init = function init( selector, context ) {
 -                      if (context && context instanceof jQuery && !(context instanceof jQuerySubclass)){
 +                      if ( context && context instanceof jQuery && !(context instanceof jQuerySubclass) ) {
                                context = jQuerySubclass(context);
                        }
 +
                        return jQuery.fn.init.call( this, selector, context, rootjQuerySubclass );
                };
                jQuerySubclass.fn.init.prototype = jQuerySubclass.fn;
@@@ -1076,6 -1054,6 +1076,6 @@@ function doScrollCheck() 
  }
  
  // Expose jQuery to the global object
- return (window.jQuery = window.$ = jQuery);
+ return jQuery;
  
  })();