Skip to content

Commit

Permalink
Made it so that you no longer need to build jQuery in order to run th…
Browse files Browse the repository at this point in the history
…e test suite (but you'll still need a checkout of QUnit and Sizzle, at least).
  • Loading branch information
jeresig committed Mar 23, 2010
1 parent ba8938d commit 8effe3a
Show file tree
Hide file tree
Showing 14 changed files with 141 additions and 115 deletions.
4 changes: 2 additions & 2 deletions src/ajax.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
var jsc = now(),
var jsc = jQuery.now(),
rscript = /<script(.|\s)*?\/script>/gi,
rselectTextarea = /select|textarea/i,
rinput = /color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,
Expand Down Expand Up @@ -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");
Expand Down
2 changes: 1 addition & 1 deletion src/attributes.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 ) {
Expand Down
87 changes: 39 additions & 48 deletions src/core.js
Original file line number Diff line number Diff line change
@@ -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'
Expand All @@ -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,
Expand Down Expand Up @@ -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 ) {
Expand Down Expand Up @@ -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 || "" );
}

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;
}
// Expose jQuery to the global object
window.jQuery = window.$ = jQuery;

function now() {
return (new Date()).getTime();
}
})();
2 changes: 1 addition & 1 deletion src/css.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 );
}
Expand Down
2 changes: 1 addition & 1 deletion src/data.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
var expando = "jQuery" + now(), uuid = 0, windowData = {};
var expando = "jQuery" + jQuery.now(), uuid = 0, windowData = {};

jQuery.extend({
cache: {},
Expand Down
4 changes: 2 additions & 2 deletions src/effects.js
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down Expand Up @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion src/event.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
16 changes: 16 additions & 0 deletions src/manipulation.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 );
}
}
3 changes: 0 additions & 3 deletions src/outro.js
Original file line number Diff line number Diff line change
@@ -1,4 +1 @@
// Expose jQuery to the global object
window.jQuery = window.$ = jQuery;

})(window);
6 changes: 3 additions & 3 deletions src/sizzle-jquery.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
2 changes: 1 addition & 1 deletion src/support.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 = " <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
Expand Down
64 changes: 33 additions & 31 deletions src/traversing.js
Original file line number Diff line number Diff line change
@@ -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 ) {
Expand Down Expand Up @@ -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;
});
};
50 changes: 33 additions & 17 deletions test/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,39 @@
<link rel="Stylesheet" media="screen" href="qunit/qunit/qunit.css" />
<link rel="Stylesheet" media="screen" href="data/testsuite.css" />
<!-- Includes -->
<script type="text/javascript" src="data/testinit.js"></script>
<script type="text/javascript" src="../dist/jquery.js"></script>
<script type="text/javascript" src="qunit/qunit/qunit.js"></script>
<script type="text/javascript" src="data/testrunner.js"></script>
<script type="text/javascript" src="unit/core.js"></script>
<script type="text/javascript" src="unit/data.js"></script>
<script type="text/javascript" src="unit/queue.js"></script>
<script type="text/javascript" src="unit/attributes.js"></script>
<script type="text/javascript" src="unit/css.js"></script>
<script type="text/javascript" src="unit/traversing.js"></script>
<script type="text/javascript" src="unit/manipulation.js"></script>
<script type="text/javascript" src="unit/dimensions.js"></script>
<script type="text/javascript" src="unit/selector.js"></script>
<script type="text/javascript" src="unit/event.js"></script>
<script type="text/javascript" src="unit/ajax.js"></script>
<script type="text/javascript" src="unit/effects.js"></script>
<script type="text/javascript" src="unit/offset.js"></script>
<script src="data/testinit.js"></script>

<script src="../src/core.js"></script>
<script src="../src/support.js"></script>
<script src="../src/sizzle/sizzle.js"></script>
<script src="../src/sizzle-jquery.js"></script>
<script src="../src/data.js"></script>
<script src="../src/queue.js"></script>
<script src="../src/attributes.js"></script>
<script src="../src/css.js"></script>
<script src="../src/traversing.js"></script>
<script src="../src/manipulation.js"></script>
<script src="../src/dimensions.js"></script>
<script src="../src/event.js"></script>
<script src="../src/ajax.js"></script>
<script src="../src/effects.js"></script>
<script src="../src/offset.js"></script>

<script src="qunit/qunit/qunit.js"></script>
<script src="data/testrunner.js"></script>
<script src="unit/core.js"></script>
<script src="unit/data.js"></script>
<script src="unit/queue.js"></script>
<script src="unit/attributes.js"></script>
<script src="unit/css.js"></script>
<script src="unit/traversing.js"></script>
<script src="unit/manipulation.js"></script>
<script src="unit/dimensions.js"></script>
<script src="unit/selector.js"></script>
<script src="unit/event.js"></script>
<script src="unit/ajax.js"></script>
<script src="unit/effects.js"></script>
<script src="unit/offset.js"></script>
</head>

<body id="body">
Expand Down
12 changes: 8 additions & 4 deletions test/unit/attributes.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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" );
Expand Down

0 comments on commit 8effe3a

Please sign in to comment.