From 215806a2a7d78a807d1f135d9e217bdb1935bbdd Mon Sep 17 00:00:00 2001 From: Nazar Mokrynskyi Date: Sat, 24 Jan 2015 08:49:04 +0100 Subject: [PATCH] Support for `:host`, `::content` and similar selectors in `element.matches()` --- src/ShadowDOM/wrappers/Element.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/ShadowDOM/wrappers/Element.js b/src/ShadowDOM/wrappers/Element.js index e03dafe..c277040 100644 --- a/src/ShadowDOM/wrappers/Element.js +++ b/src/ShadowDOM/wrappers/Element.js @@ -60,6 +60,30 @@ oldValue: oldValue }); } + function shimMatchesSelector (selector) { + selector = selector + // Transform `:host(selector)` to `selector` + .replace( + /:host\(([^\s]+)\)/g, + '$1' + ) + // Transform `selector:host` to `selector` + .replace( + /([^\s]):host/g, + '$1' + ) + // Transform `:host` to `*` + .replace( + ':host', + '*' + ); + // From ShadowCSS, will be replaced by space + selector = selector.replace( + /\^|\/shadow\/|\/shadow-deep\/|::shadow|\/deep\/|::content/g, + ' ' + ); + return selector; + } var classListTable = new WeakMap(); @@ -99,6 +123,7 @@ }, matches: function(selector) { + selector = shimMatchesSelector(selector); return originalMatches.call(unsafeUnwrap(this), selector); },