Permalink
Browse files

Landing pull request 490. 1.7 HTML5 Support for innerHTML, clone & st…

…yle. Fixes #6485.

More Details:
 - #490
 - http://bugs.jquery.com/ticket/6485
  • Loading branch information...
1 parent bba3d61 commit 9ecdb2472be7661477564e46bce51432d4a5a84e @rwaldron rwaldron committed with timmywil Sep 19, 2011
Showing with 65 additions and 2 deletions.
  1. +20 −1 src/manipulation.js
  2. +4 −1 src/support.js
  3. +9 −0 test/index.html
  4. +32 −0 test/unit/manipulation.js
View
@@ -20,7 +20,23 @@ var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
area: [ 1, "<map>", "</map>" ],
_default: [ 0, "", "" ]
- };
+ },
+ safeFragment = (function() {
+ var nodeNames = (
+ "abbr article aside audio canvas datalist details figcaption figure footer " +
+ "header hgroup mark meter nav output progress section summary time video"
+ ).split( " " ),
+ safeFrag = document.createDocumentFragment();
+
+ if ( safeFrag.createElement ) {
+ while ( nodeNames.length ) {
+ safeFrag.createElement(
+ nodeNames.pop()
+ );
+ }
+ }
+ return safeFrag;
+ })();
wrapMap.optgroup = wrapMap.option;
wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
@@ -625,6 +641,9 @@ jQuery.extend({
depth = wrap[0],
div = context.createElement("div");
+ // Append wrapper element to unknown element safe doc fragment
+ safeFragment.appendChild( div );
+
// Go to html and back, then peel off extra wrappers
div.innerHTML = wrap[1] + elem + wrap[2];
View
@@ -24,7 +24,7 @@ jQuery.support = (function() {
// Preliminary tests
div.setAttribute("className", "t");
- div.innerHTML = " <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
+ div.innerHTML = " <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/><nav></nav>";
all = div.getElementsByTagName( "*" );
@@ -69,6 +69,9 @@ jQuery.support = (function() {
// (IE uses styleFloat instead of cssFloat)
cssFloat: !!a.style.cssFloat,
+ // Make sure unknown elements (like HTML5 elems) are handled appropriately
+ unknownElems: !!div.getElementsByTagName( "nav" ).length,
+
// Make sure that if no value is specified for a checkbox
// that it defaults to "on".
// (WebKit defaults to "" instead)
View
@@ -51,6 +51,15 @@
<script src="unit/effects.js"></script>
<script src="unit/offset.js"></script>
<script src="unit/dimensions.js"></script>
+
+ <script>
+ // html5shiv, enabling HTML5 elements to be used with jQuery
+ ( "abbr article aside audio canvas details figcaption figure footer header hgroup " +
+ "mark meter nav output progress section subline summary time video"
@staabm
staabm Sep 28, 2011 Contributor

Sjbline was dropped in manip.js but not here,...?

@rwaldron
rwaldron Sep 28, 2011 Member

It was an after though

+ ).replace(/\w+/g, function(n) {
+ document.createElement(n);
+ });
+ </script>
</head>
<body id="body">
@@ -465,6 +465,38 @@ test("append the same fragment with events (Bug #6997, 5566)", function () {
jQuery("#listWithTabIndex li.test6997").eq(1).click();
});
+test("append HTML5 sectioning elements (Bug #6485)", function () {
+ expect(2);
+
+ jQuery("#qunit-fixture").append("<article style='font-size:10px'><section><aside>HTML5 elements</aside></section></article>");
+
+ var article = jQuery("article"),
+ aside = jQuery("aside");
+
+ equal( article.css("fontSize"), "10px", 'HTML5 elements are styleable');
+ equal( aside.length, 1, 'HTML5 elements do not collapse their children')
+});
+
+test("clone() (#6485)", function () {
+ expect(1);
+
+ jQuery("<article><section><aside>HTML5 elements</aside></section></article>").appendTo("#qunit-fixture");
+
+ var clone = jQuery("article").clone();
+
+ jQuery("#qunit-fixture").append( clone );
+
+ equal( jQuery("aside").length, 2, "clone()ing HTML5 elems does not collapse them" );
+});
+
+test("html(String) with HTML5 (Bug #6485)", function() {
+ expect(2);
+
+ jQuery("#qunit-fixture").html("<article><section><aside>HTML5 elements</aside></section></article>");
+ equal( jQuery("#qunit-fixture").children().children().length, 1, "Make sure HTML5 article elements can hold children. innerHTML shortcut path" );
+ equal( jQuery("#qunit-fixture").children().children().children().length, 1, "Make sure nested HTML5 elements can hold children." );
+});
+
test("append(xml)", function() {
expect( 1 );

0 comments on commit 9ecdb24

Please sign in to comment.