X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fcore.js;h=0bf0cb4b7125c69243460b2d48c4cba4f45f6bf9;hb=158fa822dea3198de5a4bcff3955b869ebb758c8;hp=77f9fcebd17110b06235c4e054f59fbc9674435c;hpb=47e4cc1a0f3f26cf86d485fd53066503c4272e6b;p=jquery.git diff --git a/src/core.js b/src/core.js index 77f9fce..0bf0cb4 100644 --- a/src/core.js +++ b/src/core.js @@ -3,7 +3,7 @@ var jQuery = (function() { // Define a local copy of jQuery var jQuery = function( selector, context ) { // The jQuery object is actually just the init constructor 'enhanced' - return new jQuery.fn.init( selector, context ); + return new jQuery.fn.init( selector, context, rootjQuery ); }, // Map over jQuery in case of overwrite @@ -78,7 +78,8 @@ var jQuery = function( selector, context ) { class2type = {}; jQuery.fn = jQuery.prototype = { - init: function( selector, context ) { + constructor: jQuery, + init: function( selector, context, rootjQuery ) { var match, elem, ret, doc; // Handle $(""), $(null), or $(undefined) @@ -112,6 +113,7 @@ jQuery.fn = jQuery.prototype = { // HANDLE: $(html) -> $(array) if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; doc = (context ? context.ownerDocument || context : document); // If a single string is passed in and it's a single tag @@ -129,7 +131,7 @@ jQuery.fn = jQuery.prototype = { } else { ret = jQuery.buildFragment( [ match[1] ], [ doc ] ); - selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes; + selector = (ret.cacheable ? jQuery(ret.fragment).clone()[0] : ret.fragment).childNodes; } return jQuery.merge( this, selector ); @@ -171,7 +173,7 @@ jQuery.fn = jQuery.prototype = { // HANDLE: $(expr, context) // (which is just equivalent to: $(context).find(expr) } else { - return jQuery( context ).find( selector ); + return this.constructor( context ).find( selector ); } // HANDLE: $(function) @@ -222,7 +224,7 @@ jQuery.fn = jQuery.prototype = { // (returning the new matched element set) pushStack: function( elems, name, selector ) { // Build a new jQuery matched element set - var ret = jQuery(); + var ret = this.constructor(); if ( jQuery.isArray( elems ) ) { push.apply( ret, elems ); @@ -258,7 +260,7 @@ jQuery.fn = jQuery.prototype = { jQuery.bindReady(); // Change ready & apply - return ( jQuery.fn.ready = readyList.complete ).apply( this , arguments ); + return ( jQuery.fn.ready = readyList.done ).apply( this , arguments ); }, eq: function( i ) { @@ -287,7 +289,7 @@ jQuery.fn = jQuery.prototype = { }, end: function() { - return this.prevObject || jQuery(null); + return this.prevObject || this.constructor(null); }, // For internal use only. @@ -815,8 +817,8 @@ jQuery.extend({ // the deferred itself deferred = { - // complete( f1, f2, ...) - complete: function () { + // done( f1, f2, ...) + done: function () { if ( ! cancelled ) { @@ -836,7 +838,7 @@ jQuery.extend({ elem = args[ i ]; type = jQuery.type( elem ); if ( type === "array" ) { - deferred.complete.apply( deferred , elem ); + deferred.done.apply( deferred , elem ); } else if ( type === "function" ) { callbacks.push( elem ); } @@ -901,11 +903,11 @@ jQuery.extend({ // Add errorDeferred methods and redefine cancel jQuery.extend( deferred , { - then: function( completeCallbacks , failCallbacks ) { - deferred.complete( completeCallbacks ).fail( failCallbacks ); + then: function( doneCallbacks , failCallbacks ) { + deferred.done( doneCallbacks ).fail( failCallbacks ); return this; }, - fail: failDeferred.complete, + fail: failDeferred.done, fireReject: failDeferred.fire, reject: failDeferred.resolve, isRejected: failDeferred.isResolved, @@ -913,7 +915,7 @@ jQuery.extend({ // 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 ) { + jQuery.each( "then done fail isResolved isRejected".split( " " ) , function( _ , method ) { obj[ method ] = deferred[ method ]; }); obj.promise = function() { @@ -960,6 +962,25 @@ jQuery.extend({ return { browser: match[1] || "", version: match[2] || "0" }; }, + subclass: function(){ + function jQuerySubclass( selector, context ) { + return new jQuerySubclass.fn.init( selector, context ); + } + 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)){ + context = jQuerySubclass(context); + } + return jQuery.fn.init.call( this, selector, context, rootjQuerySubclass ); + }; + jQuerySubclass.fn.init.prototype = jQuerySubclass.fn; + var rootjQuerySubclass = jQuerySubclass(document); + return jQuerySubclass; + }, + browser: {} });