From 1c49db04ebd0624a372e97967f57b65d8aef46b0 Mon Sep 17 00:00:00 2001 From: Mustaqeem Khowaja Date: Wed, 8 Jan 2020 11:30:12 -0500 Subject: [PATCH 1/3] test(disabled): Testing scenario where filtered elements in disabled include shadow root elements --- test/unit/maintain.disabled.test.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/test/unit/maintain.disabled.test.js b/test/unit/maintain.disabled.test.js index e806fe23..4f5afa9e 100644 --- a/test/unit/maintain.disabled.test.js +++ b/test/unit/maintain.disabled.test.js @@ -188,6 +188,13 @@ define(function(require) { expect(fixture.input.after.disabled).to.equal(false, 'not disabled within filter'); expect(fixture.input.first.disabled).to.equal(false, 'not disabled within Shadow Root'); }); + + bdd.it('should not disable filtered shadowed elements', function() { + handle = maintainDisabled({ + filter: '#first-shadow-host', + }); + expect(fixture.input.first.disabled).to.equal(false, 'not disabled within Shadow Root'); + }); }); bdd.describe('for DOM Mutation', function() { From 3d97a2b223cca341dc5aa88acc745d0f8d24c8e8 Mon Sep 17 00:00:00 2001 From: Mustaqeem Khowaja Date: Wed, 8 Jan 2020 11:30:51 -0500 Subject: [PATCH 2/3] fix(disabled): Account for shadow root elements in disable call to filter --- src/util/compare-position.js | 14 ++++++++++++-- src/util/get-shadow-parent.js | 13 +++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 src/util/get-shadow-parent.js diff --git a/src/util/compare-position.js b/src/util/compare-position.js index 48e19613..3eae6731 100644 --- a/src/util/compare-position.js +++ b/src/util/compare-position.js @@ -9,19 +9,29 @@ listOfElements.some(isChildOf) */ +import {getShadowParent} from './get-shadow-parent'; + export function getParentComparator({parent, element, includeSelf} = {}) { if (parent) { return function isChildOf(node) { + const shadowParent = getShadowParent(node); return Boolean( - includeSelf && node === parent + (includeSelf && node === parent + || shadowParent === parent) || parent.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_CONTAINED_BY + || (shadowParent + && parent.compareDocumentPosition(shadowParent) & Node.DOCUMENT_POSITION_CONTAINED_BY) ); }; } else if (element) { return function isParentOf(node) { + const shadowParent = getShadowParent(element); return Boolean( - includeSelf && element === node + (includeSelf && element === node + || shadowParent === node) || node.compareDocumentPosition(element) & Node.DOCUMENT_POSITION_CONTAINED_BY + || (shadowParent + && node.compareDocumentPosition(shadowParent) & Node.DOCUMENT_POSITION_CONTAINED_BY) ); }; } diff --git a/src/util/get-shadow-parent.js b/src/util/get-shadow-parent.js new file mode 100644 index 00000000..af4e5fbb --- /dev/null +++ b/src/util/get-shadow-parent.js @@ -0,0 +1,13 @@ +/* + Get the shadow root host element if the node passed in is in the shadow root + USAGE: + var shadowParent = getShadowParent(someNode) +*/ +export function getShadowParent(node) { + for (; node; node = node.parentNode) { + if (node.toString() === '[object ShadowRoot]') { + return node.host; + } + } + return null; +} From 9bb30efc6dff5ee9e5c181755af6c1e36c184d7f Mon Sep 17 00:00:00 2001 From: Mustaqeem Khowaja Date: Wed, 8 Jan 2020 13:57:34 -0500 Subject: [PATCH 3/3] build(umd): fix issue with minification in uglify script --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cdeedc68..b083fd61 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "build:umd": "npm-run-all --sequential build:umd:bundle build:umd:min build:umd:clean", "build:umd:bundle": "browserify dist/src/ally.js --debug --standalone ally --transform rollupify --transform [ babelify --presets [ es2015 ] ] | exorcist dist/ally.js.map > dist/ally.js", "build:umd:clean": "rm dist/ally.js dist/ally.js.map", - "build:umd:min": "uglifyjs dist/ally.js --in-source-map dist/ally.js.map --source-map dist/ally.min.js.map --source-map-url ally.min.js.map --preamble \"/*! ${npm_package_name} - v${npm_package_version} - ${npm_package_homepage} - ${npm_package_license} License */\" --mangle --compress --output dist/ally.min.js", + "build:umd:min": "uglifyjs dist/ally.js --in-source-map dist/ally.js.map --source-map --source-map-url --preamble \"/*! ${npm_package_name} - v${npm_package_version} - ${npm_package_homepage} - ${npm_package_license} License */\" --mangle --compress --output dist/ally.min.js", "build:common": "babel --no-babelrc --presets es2015 --plugins add-module-exports --source-maps --out-dir dist/common dist/src", "build:amd": "babel --no-babelrc --presets es2015 --plugins add-module-exports,transform-es2015-modules-umd --source-maps --out-dir dist/amd dist/src", "build:esm": "babel --source-maps --out-dir dist/esm dist/src",