From 51650338838e61d4d785968ddb5317233b76f55a Mon Sep 17 00:00:00 2001 From: timmywil Date: Sat, 23 Apr 2011 17:07:31 -0400 Subject: [PATCH] Add tests data- and aria- attributes and the autofocus boolean attribute and some style updates in jQuery.attr --- src/attributes.js | 9 ++++++--- test/unit/attributes.js | 14 +++++++++++--- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/attributes.js b/src/attributes.js index 5d8a7adb..43d72ae9 100644 --- a/src/attributes.js +++ b/src/attributes.js @@ -6,7 +6,7 @@ var rclass = /[\n\t\r]/g, rtype = /^(?:button|input)$/i, rfocusable = /^(?:button|input|object|select|textarea)$/i, rclickable = /^a(?:rea)?$/i, - special = /^(?:data-|aria-)/, + rspecial = /^(?:data-|aria-)/, formHook; jQuery.fn.extend({ @@ -312,7 +312,7 @@ jQuery.extend({ if ( value !== undefined ) { - if ( value === null || (value === false && !special.test( name )) ) { + if ( value === null || (value === false && !rspecial.test( name )) ) { jQuery.removeAttr( elem, name ); return undefined; @@ -320,9 +320,12 @@ jQuery.extend({ return ret; } else { - if( value === true && !special.test( name ) ){ + + // Set boolean attributes to the same name + if ( value === true && !rspecial.test( name ) ) { value = name; } + elem.setAttribute( name, "" + value ); return value; } diff --git a/test/unit/attributes.js b/test/unit/attributes.js index 0889bf33..cfe676a6 100644 --- a/test/unit/attributes.js +++ b/test/unit/attributes.js @@ -177,7 +177,7 @@ test("attr(Hash)", function() { }); test("attr(String, Object)", function() { - expect(30); + expect(35); var div = jQuery("div").attr("foo", "bar"), fail = false; @@ -189,7 +189,7 @@ test("attr(String, Object)", function() { } } - equals( fail, false, "Set Attribute, the #"+fail+" element didn't get the attribute 'foo'" ); + equals( fail, false, "Set Attribute, the #" + fail + " element didn't get the attribute 'foo'" ); // Fails on IE since recent changes to .attr() // ok( jQuery("#foo").attr({"width": null}), "Try to set an attribute to nothing" ); @@ -213,7 +213,15 @@ test("attr(String, Object)", function() { var $p = jQuery("#firstp").attr("nonexisting", "foo"); equals( $p.attr("nonexisting"), "foo", "attr(name, value) works correctly for non existing attributes (bug #7500)."); $p.removeAttr("nonexisting"); - + + var $text = jQuery("#text1").attr("autofocus", true); + equals( $text.attr("autofocus"), "autofocus", "Set boolean attributes to the same name"); + equals( $text.attr("autofocus", false).attr("autofocus"), undefined, "Setting autofocus attribute to false removes it"); + equals( $text.attr("data-something", true).data("something"), true, "Setting data attributes are not affected by boolean settings"); + equals( $text.attr("data-another", false).data("another"), false, "Setting data attributes are not affected by boolean settings" ); + equals( $text.attr("aria-disabled", false).attr("aria-disabled"), "false", "Setting aria attributes are not affected by boolean settings"); + $text.removeData("something").removeData("another").removeAttr("aria-disabled"); + var attributeNode = document.createAttribute("irrelevant"), commentNode = document.createComment("some comment"), textNode = document.createTextNode("some text");