X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fcore.js;h=2e63472361b150b3e2abcce9111ca1eb65b0eb48;hb=4a828c93d40eb67b2041b08bbed0f1973442bd03;hp=2e0ece1b3884ae0b88a732fed91394319cfc2fae;hpb=e00f74c43bf58132be01c6417c6126a5bc085899;p=jquery.git diff --git a/src/core.js b/src/core.js index 2e0ece1..2e63472 100644 --- a/src/core.js +++ b/src/core.js @@ -56,8 +56,16 @@ var jQuery = function( selector, context ) { // 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, @@ -566,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 ) ); @@ -879,8 +885,9 @@ jQuery.extend({ 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 ); @@ -892,18 +899,35 @@ jQuery.extend({ 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 @@ -957,7 +981,7 @@ jQuery.extend({ return { browser: match[1] || "", version: match[2] || "0" }; }, - subclass: function(){ + sub: function() { function jQuerySubclass( selector, context ) { return new jQuerySubclass.fn.init( selector, context ); }