Commit ef7bce7e authored by Daniel Galvez's avatar Daniel Galvez Committed by Dave Methvin

Fix #11280. IE6-8 need name attribute to parse param. Close gh-914.

parent fcaef889
...@@ -132,4 +132,5 @@ Elijah Manor <elijah.manor@gmail.com> ...@@ -132,4 +132,5 @@ Elijah Manor <elijah.manor@gmail.com>
Daniel Chatfield <chatfielddaniel@gmail.com> Daniel Chatfield <chatfielddaniel@gmail.com>
Nikita Govorov <nikita.govorov@gmail.com> Nikita Govorov <nikita.govorov@gmail.com>
Michael Pennisi <mike@mikepennisi.com> Michael Pennisi <mike@mikepennisi.com>
Markus Staab <markus.staab@redaxo.de> Markus Staab <markus.staab@redaxo.de>
\ No newline at end of file Daniel Gálvez <dgalvez@editablething.com>
\ No newline at end of file
...@@ -39,7 +39,8 @@ var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figca ...@@ -39,7 +39,8 @@ var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figca
_default: [ 0, "", "" ] _default: [ 0, "", "" ]
}, },
safeFragment = createSafeFragment( document ), safeFragment = createSafeFragment( document ),
fragmentDiv = safeFragment.appendChild( document.createElement("div") ); fragmentDiv = safeFragment.appendChild( document.createElement("div") ),
addMandatoryAttributes = function( elem ) { return elem; };
wrapMap.optgroup = wrapMap.option; wrapMap.optgroup = wrapMap.option;
wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
...@@ -49,6 +50,23 @@ wrapMap.th = wrapMap.td; ...@@ -49,6 +50,23 @@ wrapMap.th = wrapMap.td;
// unless wrapped in a div with non-breaking characters in front of it. // unless wrapped in a div with non-breaking characters in front of it.
if ( !jQuery.support.htmlSerialize ) { if ( !jQuery.support.htmlSerialize ) {
wrapMap._default = [ 1, "X<div>", "</div>" ]; wrapMap._default = [ 1, "X<div>", "</div>" ];
// Fixes #11280
wrapMap.param = [ 1, "X<object>", "</object>" ];
// Fixes #11280. HTMLParam name attribute added to avoid IE6-8 parsing issue.
addMandatoryAttributes = function( elem ) {
// If it's a param
return elem.replace(/<param([^>]*)>/gi, function( m, s1, offset ) {
var name = s1.match( /name=["']([^"']*)["']/i );
return name ?
( name[1].length ?
// It has a name attr with a value
"<param" + s1 + ">" :
// It has name attr without a value
"<param" + s1.replace( name[0], "name='_" + offset + "'" ) + ">" ) :
// No name attr
"<param name='_" + offset + "' " + s1 + ">";
});
};
} }
jQuery.fn.extend({ jQuery.fn.extend({
...@@ -674,7 +692,7 @@ jQuery.extend({ ...@@ -674,7 +692,7 @@ jQuery.extend({
tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(); tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase();
wrap = wrapMap[ tag ] || wrapMap._default; wrap = wrapMap[ tag ] || wrapMap._default;
depth = wrap[0]; depth = wrap[0];
div.innerHTML = wrap[1] + elem + wrap[2]; div.innerHTML = wrap[1] + addMandatoryAttributes( elem ) + wrap[2];
// Move to the right depth // Move to the right depth
while ( depth-- ) { while ( depth-- ) {
......
...@@ -469,6 +469,38 @@ test("append(Function)", function() { ...@@ -469,6 +469,38 @@ test("append(Function)", function() {
testAppend(manipulationFunctionReturningObj); testAppend(manipulationFunctionReturningObj);
}); });
test("append(param) to object, see #11280", function() {
expect(11);
var objectElement = document.createElement("object"),
$objectElement = jQuery( objectElement ),
paramElement = jQuery("<param type='wmode' value='transparent'/>"),
paramElement2 = jQuery("<param name='' type='wmode2' value='transparent2' />"),
paramElement3 = jQuery("<param type='wmode' name='foo' >"),
newObject = jQuery("<object><param type='foo' ><param name='' value='foo2'/><param type='baz' name='bar'></object>");
equal( objectElement.childNodes.length, 0, "object did not have childNodes previously" );
document.body.appendChild( objectElement );
$objectElement.append( paramElement );
equal( $objectElement.children().length, 1, "param single insertion ok" );
equal( jQuery(objectElement.childNodes[0]).attr("type"), "wmode", "param.eq(0) has type=wmode" );
$objectElement.html( paramElement2 );
equal( $objectElement.children().length, 1, "param single insertion ok" );
equal( jQuery(objectElement.childNodes[0]).attr("type"), "wmode2", "param.eq(0) has type=wmode2" );
$objectElement.html( paramElement3 );
equal( $objectElement.children().length, 1, "param single insertion ok" );
equal( jQuery(objectElement.childNodes[0]).attr("name"), "foo", "param.eq(0) has name=foo" );
equal( newObject.children().length, 3, "param wrapper multiple insertion ok" );
equal( newObject.children().eq(0).attr("type"), "foo", "param.eq(0) has type=foo" );
equal( newObject.children().eq(1).attr("value"), "foo2", "param.eq(1) has value=foo2" );
equal( newObject.children().eq(2).attr("name"), "bar", "param.eq(2) has name=bar" );
});
test("append(Function) with incoming value", function() { test("append(Function) with incoming value", function() {
expect(12); expect(12);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment