From d290be9031c4e4e9c99c932862092018f0985f89 Mon Sep 17 00:00:00 2001 From: Daniel Freedman Date: Wed, 31 Oct 2018 16:37:22 -0700 Subject: [PATCH 1/4] Check for ShadyDOM and `:dir` selectors before trying css transform Should save a considerable amount of style processing when not needed. --- lib/mixins/dir-mixin.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/mixins/dir-mixin.js b/lib/mixins/dir-mixin.js index 89522aa935..ea2db1caae 100644 --- a/lib/mixins/dir-mixin.js +++ b/lib/mixins/dir-mixin.js @@ -17,6 +17,10 @@ const HOST_DIR_REPLACMENT = ':host([dir="$1"])'; const EL_DIR = /([\s\w-#\.\[\]\*]*):dir\((ltr|rtl)\)/g; const EL_DIR_REPLACMENT = ':host([dir="$2"]) $1'; +const DIR_CHECK = /:dir\((?:ltr|rtl)\)/; + +const SHIM_SHADOW = Boolean(window['ShadyDOM'] && window['ShadyDOM']['inUse']); + /** * @type {!Array} */ @@ -107,7 +111,9 @@ export const DirMixin = dedupingMixin((base) => { */ static _processStyleText(cssText, baseURI) { cssText = super._processStyleText(cssText, baseURI); - cssText = this._replaceDirInCssText(cssText); + if (!SHIM_SHADOW && DIR_CHECK.test(cssText)) { + cssText = this._replaceDirInCssText(cssText); + } return cssText; } From 08bc1ff5edcd240fd805f7a50df991ed8cc7e69a Mon Sep 17 00:00:00 2001 From: Daniel Freedman Date: Wed, 7 Nov 2018 14:01:41 -0800 Subject: [PATCH 2/4] Don't set up observer in ShadyDOM It won't be used --- lib/mixins/dir-mixin.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/mixins/dir-mixin.js b/lib/mixins/dir-mixin.js index ea2db1caae..630773ee9b 100644 --- a/lib/mixins/dir-mixin.js +++ b/lib/mixins/dir-mixin.js @@ -84,10 +84,12 @@ function takeRecords() { */ export const DirMixin = dedupingMixin((base) => { - if (!observer) { - getRTL(); - observer = new MutationObserver(updateDirection); - observer.observe(document.documentElement, {attributes: true, attributeFilter: ['dir']}); + if (!SHIM_SHADOW) { + if (!observer) { + getRTL(); + observer = new MutationObserver(updateDirection); + observer.observe(document.documentElement, {attributes: true, attributeFilter: ['dir']}); + } } /** From ec00d26b5897feda67d2936281c75129ff2f188c Mon Sep 17 00:00:00 2001 From: Daniel Freedman Date: Wed, 7 Nov 2018 15:12:45 -0800 Subject: [PATCH 3/4] Move __activateDir into check instead of replace Remove unused imports in testing --- lib/mixins/dir-mixin.js | 4 +--- test/unit/dir.html | 2 -- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/lib/mixins/dir-mixin.js b/lib/mixins/dir-mixin.js index 630773ee9b..bbacb2cdb8 100644 --- a/lib/mixins/dir-mixin.js +++ b/lib/mixins/dir-mixin.js @@ -115,6 +115,7 @@ export const DirMixin = dedupingMixin((base) => { cssText = super._processStyleText(cssText, baseURI); if (!SHIM_SHADOW && DIR_CHECK.test(cssText)) { cssText = this._replaceDirInCssText(cssText); + this.__activateDir = true; } return cssText; } @@ -129,9 +130,6 @@ export const DirMixin = dedupingMixin((base) => { let replacedText = text; replacedText = replacedText.replace(HOST_DIR, HOST_DIR_REPLACMENT); replacedText = replacedText.replace(EL_DIR, EL_DIR_REPLACMENT); - if (text !== replacedText) { - this.__activateDir = true; - } return replacedText; } diff --git a/test/unit/dir.html b/test/unit/dir.html index 4d65101e15..14d3b8481c 100644 --- a/test/unit/dir.html +++ b/test/unit/dir.html @@ -13,8 +13,6 @@ - -