X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fjquery%2Fjquery.js;h=69628b37f64c9001e158cdb967e13724ac04294e;hb=529203f6b576aa15201485dd8d704109aa543f0d;hp=9b9cfa4e06c8273bb672d91def87760918ce1a88;hpb=da74bde0b7ab66cee11c7e6542ee29579da53948;p=jquery.git diff --git a/src/jquery/jquery.js b/src/jquery/jquery.js index 9b9cfa4..69628b3 100644 --- a/src/jquery/jquery.js +++ b/src/jquery/jquery.js @@ -28,7 +28,7 @@ window.undefined = window.undefined; * @name jQuery * @cat Core */ -function jQuery(a,c) { +jQuery = function(a,c) { // Shortcut for document ready (because $(document).each() is silly) if ( a && a.constructor == Function && jQuery.fn.ready ) @@ -67,7 +67,7 @@ function jQuery(a,c) { // If so, execute it in context if ( fn && fn.constructor == Function ) this.each(fn); -} +}; // Map over the $ in case of overwrite if ( typeof $ != "undefined" ) @@ -203,7 +203,7 @@ jQuery.fn = jQuery.prototype = { * @before * @result 2 * - * @test cmpOK( $("div").length, "==", 2, "Get Number of Elements Found" ); + * @test ok( $("div").length == 2, "Get Number of Elements Found" ); * * @property * @name length @@ -218,7 +218,7 @@ jQuery.fn = jQuery.prototype = { * @before * @result 2 * - * @test cmpOK( $("div").size(), "==", 2, "Get Number of Elements Found" ); + * @test ok( $("div").size() == 2, "Get Number of Elements Found" ); * * @name size * @type Number @@ -252,7 +252,7 @@ jQuery.fn = jQuery.prototype = { * @before * @result [ ] * - * @test cmpOK( $("div").get(0), "==", document.getElementById("main"), "Get A Single Element" ); + * @test ok( $("div").get(0) == document.getElementById("main"), "Get A Single Element" ); * * @name get * @type Element @@ -390,6 +390,8 @@ jQuery.fn = jQuery.prototype = { * @test ok( $('#en').attr('lang') == "en", 'Check for lang attribute' ); * @test ok( $('#simon').attr('class') == "blog link", 'Check for class attribute' ); * @test ok( $('#name').attr('name') == "name", 'Check for name attribute' ); + * @test ok( $('#text1').attr('name') == "action", 'Check for name attribute' ); + * @test ok( $('#form').attr('action') == "formaction", 'Check for action attribute' ); * * @name attr * @type Object @@ -1033,7 +1035,7 @@ jQuery.fn = jQuery.prototype = { * @example $("p").not("#selected") * @before

Hello

Hello Again

* @result [

Hello

] - * @test cmpOK($("#main > p#ap > a").not("#google").length, "==", 2, ".not") + * @test ok($("#main > p#ap > a").not("#google").length == 2, ".not") * * @name not * @type jQuery @@ -1520,9 +1522,9 @@ jQuery.extend({ "@": { "=": "z==m[4]", "!=": "z!=m[4]", - "^=": "!z.indexOf(m[4])", - "$=": "z.substr(z.length - m[4].length,m[4].length)==m[4]", - "*=": "z.indexOf(m[4])>=0", + "^=": "z && !z.indexOf(m[4])", + "$=": "z && z.substr(z.length - m[4].length,m[4].length)==m[4]", + "*=": "z && z.indexOf(m[4])>=0", "": "z" }, "[": "jQuery.find(m[2],a).length" @@ -1547,7 +1549,7 @@ jQuery.extend({ * @test t( "Element Selector", "div", ["main","foo"] ); * @test t( "Element Selector", "body", ["body"] ); * @test t( "Element Selector", "html", ["html"] ); - * @test cmpOK( $("*").size(), ">=", 30, "Element Selector" ); + * @test ok( $("*").size() >= 30, "Element Selector" ); * @test t( "Parent Element", "div div", ["foo"] ); * * @test t( "ID Selector", "#body", ["body"] ); @@ -1581,6 +1583,11 @@ jQuery.extend({ * @test t( "Attribute Exists", "a[@title]", ["google"] ); * @test t( "Attribute Exists", "*[@title]", ["google"] ); * @test t( "Attribute Exists", "[@title]", ["google"] ); + * + * @test t( "Non-existing part of attribute [@name*=bla]", "[@name*=bla]", [] ); + * @test t( "Non-existing start of attribute [@name^=bla]", "[@name^=bla]", [] ); + * @test t( "Non-existing end of attribute [@name$=bla]", "[@name$=bla]", [] ); + * * @test t( "Attribute Equals", "a[@rel='bookmark']", ["simon1"] ); * @test t( "Attribute Equals", 'a[@rel="bookmark"]', ["simon1"] ); * @test t( "Attribute Equals", "a[@rel=bookmark]", ["simon1"] ); @@ -1604,7 +1611,7 @@ jQuery.extend({ * @test t( "Element Preceded By", "p ~ div", ["foo"] ); * @test t( "Not", "a.blog:not(.link)", ["mark"] ); * - * @test cmpOK( jQuery.find("//*").length, ">=", 30, "All Elements (//*)" ); + * @test ok( jQuery.find("//*").length >= 30, "All Elements (//*)" ); * @test t( "All Div Elements", "//div", ["main","foo"] ); * @test t( "Absolute Path", "/html/body", ["body"] ); * @test t( "Absolute Path w/ *", "/* /body", ["body"] ); @@ -1631,6 +1638,11 @@ jQuery.extend({ * @test t( "Is Visible", "input:visible", ["text1","text2","radio1","radio2","check1","check2","name"] ); * @test t( "Is Hidden", "input:hidden", ["hidden1","hidden2"] ); * + * @test t( "Grouped Form Elements", "input[@name='foo[bar]']", ["hidden2"] ); + * + * @test t( "All Children of ID", "#foo/*", ["sndp", "en", "sap"] ); + * @test t( "All Children of ID with no children", "#firstUL/*", [] ); + * * @name $.find * @type Array * @private @@ -1763,16 +1775,16 @@ jQuery.extend({ // The regular expressions that power the parsing engine parse: [ // Match: [@value='test'], [@foo] - [ "\\[ *(@)S *([!*$^=]*) *Q\\]", 1 ], + "\\[ *(@)S *([!*$^=]*)Q\\]", // Match: [div], [div p] - [ "(\\[)Q\\]", 0 ], + "(\\[)Q\\]", // Match: :contains('foo') - [ "(:)S\\(Q\\)", 0 ], + "(:)S\\(Q\\)", // Match: :even, :last-chlid - [ "([:.#]*)S", 0 ] + "([:.#]*)S" ], filter: function(t,r,not) { @@ -1785,21 +1797,28 @@ jQuery.extend({ var p = jQuery.parse; for ( var i = 0; i < p.length; i++ ) { - var re = new RegExp( "^" + p[i][0] - + // get number for backreference + var br = 0; + if(p[i].indexOf('Q') != -1){ + br = p[i].replace(/\\\(/g,'').match(/\(|S/g).length+1; + } + var re = new RegExp( "^" + p[i] + // Look for a string-like sequence .replace( 'S', "([a-z*_-][a-z0-9_-]*)" ) // Look for something (optionally) enclosed with quotes - .replace( 'Q', " *'?\"?([^'\"]*?)'?\"? *" ), "i" ); + .replace( 'Q', " *('|\"|)([^'\"]*?)\\"+br+" *" ), "i" ); var m = re.exec( t ); if ( m ) { // Re-organize the match - if ( p[i][1] ) - m = ["", m[1], m[3], m[2], m[4]]; - + if(br == 4){ + m = ["",m[1], m[3], m[2], m[5]]; + } else if(br != 0) { + m.splice(br,1); + } // Remove what we just matched t = t.replace( re, "" ); @@ -2124,8 +2143,11 @@ jQuery.extend({ var c = this.events[event.type]; + var args = [].slice.call( arguments, 1 ); + args.unshift( event ); + for ( var j in c ) { - if ( c[j].apply( this, [event] ) === false ) { + if ( c[j].apply( this, args ) === false ) { event.preventDefault(); event.stopPropagation(); returnValue = false; @@ -2916,6 +2938,8 @@ jQuery.macros = { * @before

Hello

Hello Again

And Again

* @result [

Hello

,

And Again

] * + * @test isSet( $("#en").siblings().get(), q("sndp", "sap"), "Check for siblings" ); + * * @name siblings * @type jQuery * @cat DOM/Traversing @@ -2929,6 +2953,9 @@ jQuery.macros = { * @before
Hello

Hello Again

And Again

* @result [

Hello Again

] * + * @test isSet( $("#sndp").siblings("[code]").get(), q("sap"), "Check for filtered siblings (has code child element)" ); + * @test isSet( $("#sndp").siblings("[a]").get(), q("en", "sap"), "Check for filtered siblings (has anchor child element)" ); + * * @name siblings * @type jQuery * @param String expr An expression to filter the sibling Elements with