Skip to content

Commit

Permalink
Core: Make isAttached work with iOS 10.0-10.2
Browse files Browse the repository at this point in the history
The test for Shadow DOM v1 support has been changed to rely on the presence of
`documentElement.getRootNode` as iOS 10.0-10.2 supports `attachShadow` but
doesn't support `getRootNode`.

No new test is necessary - iOS 10.0 fails lots of our test suite because of
this bug.

Fixes gh-4356
Closes gh-4360
  • Loading branch information
mgol committed Apr 29, 2019
1 parent 6c1e7db commit 7dddb19
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 5 deletions.
6 changes: 5 additions & 1 deletion src/core/isAttached.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,12 @@ define( [
},
composed = { composed: true };

// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only
// Check attachment across shadow DOM boundaries when possible (gh-3504)
if ( documentElement.attachShadow ) {
// Support: iOS 10.0-10.2 only
// Early iOS 10 versions support `attachShadow` but not `getRootNode`,
// leading to errors. We need to check for `getRootNode`.
if ( documentElement.getRootNode ) {
isAttached = function( elem ) {
return jQuery.contains( elem.ownerDocument, elem ) ||
elem.getRootNode( composed ) === elem.ownerDocument;
Expand Down
12 changes: 10 additions & 2 deletions test/unit/css.js
Original file line number Diff line number Diff line change
Expand Up @@ -641,7 +641,11 @@ QUnit.test( "show/hide detached nodes", function( assert ) {
span.remove();
} );

QUnit[ document.body.attachShadow ? "test" : "skip" ]( "show/hide shadow child nodes", function( assert ) {
QUnit[
document.body.attachShadow && document.body.getRootNode ?
"test" :
"skip"
]( "show/hide shadow child nodes", function( assert ) {
assert.expect( 28 );
jQuery( "<div id='shadowHost'></div>" ).appendTo( "#qunit-fixture" );
var shadowHost = document.querySelector( "#shadowHost" );
Expand Down Expand Up @@ -1023,7 +1027,11 @@ QUnit[ jQuery.find.compile && jQuery.fn.toggle ? "test" : "skip" ]( "detached to
"cascade-hidden element in detached tree" );
} );

QUnit[ jQuery.find.compile && jQuery.fn.toggle && document.body.attachShadow ? "test" : "skip" ]( "shadow toggle()", function( assert ) {
QUnit[ jQuery.find.compile && jQuery.fn.toggle &&
document.body.attachShadow && document.body.getRootNode ?
"test" :
"skip"
]( "shadow toggle()", function( assert ) {
assert.expect( 4 );
jQuery( "<div id='shadowHost'></div>" ).appendTo( "#qunit-fixture" );
var shadowHost = document.querySelector( "#shadowHost" );
Expand Down
7 changes: 5 additions & 2 deletions test/unit/effects.js
Original file line number Diff line number Diff line change
Expand Up @@ -221,8 +221,11 @@ supportjQuery.each( hideOptions, function( type, setup ) {
assert.expectJqData( this, $span, "olddisplay" );
} );

QUnit[ document.body.attachShadow ? "test" : "skip" ](
"Persist correct display value - " + type + " hidden, shadow child", function( assert ) {
QUnit[
document.body.attachShadow && document.body.getRootNode ?
"test" :
"skip"
]( "Persist correct display value - " + type + " hidden, shadow child", function( assert ) {
assert.expect( 3 );

jQuery( "<div id='shadowHost'></div>" ).appendTo( "#qunit-fixture" );
Expand Down

0 comments on commit 7dddb19

Please sign in to comment.