From 8effe3a7dee91c833cc1774646da9d743600c64c Mon Sep 17 00:00:00 2001 From: jeresig Date: Tue, 23 Mar 2010 12:12:16 -0400 Subject: [PATCH] Made it so that you no longer need to build jQuery in order to run the test suite (but you'll still need a checkout of QUnit and Sizzle, at least). --- src/ajax.js | 4 +- src/attributes.js | 2 +- src/core.js | 87 ++++++++++++++++++----------------------- src/css.js | 2 +- src/data.js | 2 +- src/effects.js | 4 +- src/event.js | 2 +- src/manipulation.js | 16 ++++++++ src/outro.js | 3 -- src/sizzle-jquery.js | 6 +-- src/support.js | 2 +- src/traversing.js | 64 +++++++++++++++--------------- test/index.html | 50 +++++++++++++++-------- test/unit/attributes.js | 12 ++++-- 14 files changed, 141 insertions(+), 115 deletions(-) diff --git a/src/ajax.js b/src/ajax.js index f797e1a7..7cf280ab 100644 --- a/src/ajax.js +++ b/src/ajax.js @@ -1,4 +1,4 @@ -var jsc = now(), +var jsc = jQuery.now(), rscript = //gi, rselectTextarea = /select|textarea/i, rinput = /color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i, @@ -259,7 +259,7 @@ jQuery.extend({ } if ( s.cache === false && type === "GET" ) { - var ts = now(); + var ts = jQuery.now(); // try replacing _= if it is there var ret = s.url.replace(rts, "$1_=" + ts + "$2"); diff --git a/src/attributes.js b/src/attributes.js index 4f7055a6..aca9e055 100644 --- a/src/attributes.js +++ b/src/attributes.js @@ -9,7 +9,7 @@ var rclass = /[\n\t]/g, jQuery.fn.extend({ attr: function( name, value ) { - return access( this, name, value, true, jQuery.attr ); + return jQuery.access( this, name, value, true, jQuery.attr ); }, removeAttr: function( name, fn ) { diff --git a/src/core.js b/src/core.js index 699b87ac..e1a3a6df 100644 --- a/src/core.js +++ b/src/core.js @@ -1,3 +1,5 @@ +(function() { + // Define a local copy of jQuery var jQuery = function( selector, context ) { // The jQuery object is actually just the init constructor 'enhanced' @@ -11,7 +13,7 @@ var jQuery = function( selector, context ) { _$ = window.$, // Use the correct document accordingly with window argument (sandbox) - document = window.document, + //document = window.document, // A central reference to the root jQuery(document) rootjQuery, @@ -699,6 +701,39 @@ jQuery.extend({ return proxy; }, + // Mutifunctional method to get and set values to a collection + // The value/s can be optionally by executed if its a function + access: function( elems, key, value, exec, fn, pass ) { + var length = elems.length; + + // Setting many attributes + if ( typeof key === "object" ) { + for ( var k in key ) { + jQuery.access( elems, k, key[k], exec, fn, value ); + } + return elems; + } + + // Setting one attribute + if ( value !== undefined ) { + // Optionally, function values get executed if exec is true + exec = !pass && exec && jQuery.isFunction(value); + + for ( var i = 0; i < length; i++ ) { + fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); + } + + return elems; + } + + // Getting an attribute + return length ? fn( elems[0], key ) : undefined; + }, + + now: function() { + return (new Date()).getTime(); + }, + // Use of jQuery.browser is frowned upon. // More details: http://docs.jquery.com/Utilities/jQuery.browser uaMatch: function( ua ) { @@ -779,51 +814,7 @@ function doScrollCheck() { jQuery.ready(); } -function evalScript( i, elem ) { - if ( elem.src ) { - jQuery.ajax({ - url: elem.src, - async: false, - dataType: "script" - }); - } else { - jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); - } +// Expose jQuery to the global object +window.jQuery = window.$ = jQuery; - if ( elem.parentNode ) { - elem.parentNode.removeChild( elem ); - } -} - -// Mutifunctional method to get and set values to a collection -// The value/s can be optionally by executed if its a function -function access( elems, key, value, exec, fn, pass ) { - var length = elems.length; - - // Setting many attributes - if ( typeof key === "object" ) { - for ( var k in key ) { - access( elems, k, key[k], exec, fn, value ); - } - return elems; - } - - // Setting one attribute - if ( value !== undefined ) { - // Optionally, function values get executed if exec is true - exec = !pass && exec && jQuery.isFunction(value); - - for ( var i = 0; i < length; i++ ) { - fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); - } - - return elems; - } - - // Getting an attribute - return length ? fn( elems[0], key ) : undefined; -} - -function now() { - return (new Date()).getTime(); -} +})(); diff --git a/src/css.js b/src/css.js index f675e13f..ad0da646 100644 --- a/src/css.js +++ b/src/css.js @@ -21,7 +21,7 @@ var rexclude = /z-?index|font-?weight|opacity|zoom|line-?height/i, }; jQuery.fn.css = function( name, value ) { - return access( this, name, value, true, function( elem, name, value ) { + return jQuery.access( this, name, value, true, function( elem, name, value ) { if ( value === undefined ) { return jQuery.curCSS( elem, name ); } diff --git a/src/data.js b/src/data.js index 109d5568..cddd8bde 100644 --- a/src/data.js +++ b/src/data.js @@ -1,4 +1,4 @@ -var expando = "jQuery" + now(), uuid = 0, windowData = {}; +var expando = "jQuery" + jQuery.now(), uuid = 0, windowData = {}; jQuery.extend({ cache: {}, diff --git a/src/effects.js b/src/effects.js index 97456ccc..40326e23 100644 --- a/src/effects.js +++ b/src/effects.js @@ -320,7 +320,7 @@ jQuery.fx.prototype = { // Start an animation from one number to another custom: function( from, to, unit ) { - this.startTime = now(); + this.startTime = jQuery.now(); this.start = from; this.end = to; this.unit = unit || this.unit || "px"; @@ -366,7 +366,7 @@ jQuery.fx.prototype = { // Each step of an animation step: function( gotoEnd ) { - var t = now(), done = true; + var t = jQuery.now(), done = true; if ( gotoEnd || t >= this.options.duration + this.startTime ) { this.now = this.end; diff --git a/src/event.js b/src/event.js index 173bab10..588a7979 100644 --- a/src/event.js +++ b/src/event.js @@ -554,7 +554,7 @@ jQuery.Event = function( src ) { // timeStamp is buggy for some events on Firefox(#3843) // So we won't rely on the native value - this.timeStamp = now(); + this.timeStamp = jQuery.now(); // Mark it as fixed this[ expando ] = true; diff --git a/src/manipulation.js b/src/manipulation.js index be12aa12..cb898cc3 100644 --- a/src/manipulation.js +++ b/src/manipulation.js @@ -584,3 +584,19 @@ jQuery.extend({ } } }); + +function evalScript( i, elem ) { + if ( elem.src ) { + jQuery.ajax({ + url: elem.src, + async: false, + dataType: "script" + }); + } else { + jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); + } + + if ( elem.parentNode ) { + elem.parentNode.removeChild( elem ); + } +} \ No newline at end of file diff --git a/src/outro.js b/src/outro.js index 5d87b7e7..7773a74f 100644 --- a/src/outro.js +++ b/src/outro.js @@ -1,4 +1 @@ -// Expose jQuery to the global object -window.jQuery = window.$ = jQuery; - })(window); diff --git a/src/sizzle-jquery.js b/src/sizzle-jquery.js index 99f4d291..f15b0825 100644 --- a/src/sizzle-jquery.js +++ b/src/sizzle-jquery.js @@ -2,6 +2,6 @@ jQuery.find = Sizzle; jQuery.expr = Sizzle.selectors; jQuery.expr[":"] = jQuery.expr.filters; jQuery.unique = Sizzle.uniqueSort; -jQuery.text = getText; -jQuery.isXMLDoc = isXML; -jQuery.contains = contains; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; diff --git a/src/support.js b/src/support.js index befc5327..cddd3dc3 100644 --- a/src/support.js +++ b/src/support.js @@ -5,7 +5,7 @@ var root = document.documentElement, script = document.createElement("script"), div = document.createElement("div"), - id = "script" + now(); + id = "script" + jQuery.now(); div.style.display = "none"; div.innerHTML = "
a"; diff --git a/src/traversing.js b/src/traversing.js index 67760450..d485d691 100644 --- a/src/traversing.js +++ b/src/traversing.js @@ -1,37 +1,9 @@ var runtil = /Until$/, rparentsprev = /^(?:parents|prevUntil|prevAll)/, // Note: This RegExp should be improved, or likely pulled from Sizzle - rmultiselector = /,/; - -// Implement the identical functionality for filter and not -var winnow = function( elements, qualifier, keep ) { - if ( jQuery.isFunction( qualifier ) ) { - return jQuery.grep(elements, function( elem, i ) { - var retVal = !!qualifier.call( elem, i, elem ); - return retVal === keep; - }); - - } else if ( qualifier.nodeType ) { - return jQuery.grep(elements, function( elem, i ) { - return (elem === qualifier) === keep; - }); - - } else if ( typeof qualifier === "string" ) { - var filtered = jQuery.grep(elements, function( elem ) { - return elem.nodeType === 1; - }); - - if ( isSimple.test( qualifier ) ) { - return jQuery.filter(qualifier, filtered, !keep); - } else { - qualifier = jQuery.filter( qualifier, filtered ); - } - } - - return jQuery.grep(elements, function( elem, i ) { - return (jQuery.inArray( elem, qualifier ) >= 0) === keep; - }); -}; + rmultiselector = /,/, + isSimple = /^.[^:#\[\.,]*$/, + slice = Array.prototype.slice; jQuery.fn.extend({ find: function( selector ) { @@ -269,3 +241,33 @@ jQuery.extend({ return r; } }); + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, keep ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + var retVal = !!qualifier.call( elem, i, elem ); + return retVal === keep; + }); + + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem, i ) { + return (elem === qualifier) === keep; + }); + + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); + + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } + + return jQuery.grep(elements, function( elem, i ) { + return (jQuery.inArray( elem, qualifier ) >= 0) === keep; + }); +}; \ No newline at end of file diff --git a/test/index.html b/test/index.html index d6d02f47..13abd97f 100644 --- a/test/index.html +++ b/test/index.html @@ -6,23 +6,39 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/unit/attributes.js b/test/unit/attributes.js index d7abbad3..21d3d94b 100644 --- a/test/unit/attributes.js +++ b/test/unit/attributes.js @@ -482,8 +482,10 @@ test("addClass(Function) with incoming value", function() { }); div.addClass(function(i, val) { - equals( val, old[i], "Make sure the incoming value is correct." ); - return "test"; + if ( this.id !== "_firebugConsole" ) { + equals( val, old[i], "Make sure the incoming value is correct." ); + return "test"; + } }); var pass = true; @@ -553,8 +555,10 @@ test("removeClass(Function) with incoming value", function() { }); $divs.removeClass(function(i, val) { - equals( val, old[i], "Make sure the incoming value is correct." ); - return "test"; + if ( this.id !== "_firebugConsole" ) { + equals( val, old[i], "Make sure the incoming value is correct." ); + return "test"; + } }); ok( !$divs.is('.test'), "Remove Class" );