From 2d66f949bc0a1ffdd8d6b3aa7d28ce6265331110 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Wed, 9 Feb 2022 13:37:40 -0500 Subject: [PATCH 1/2] cope with backslash: selectors --- src/utils.js | 7 ++++--- tests/utils.test.js | 5 +++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/utils.js b/src/utils.js index dd0eaa8f..5b4b03a7 100644 --- a/src/utils.js +++ b/src/utils.js @@ -27,9 +27,10 @@ function memoize(fn) { * @return {string} */ const reduceCSSSelector = memoize((selector) => { - return selector.split( - /:(?=([^"'\\]*(\\.|["']([^"'\\]*\\.)*[^"'\\]*['"]))*[^"']*$)/g - )[0]; + selector = selector.replace('\\:', '_ESCAPED_COLON_'); + return selector + .split(/:(?=([^"'\\]*(\\.|["']([^"'\\]*\\.)*[^"'\\]*['"]))*[^"']*$)/g)[0] + .replace('_ESCAPED_COLON_', '\\:'); }); /** diff --git a/tests/utils.test.js b/tests/utils.test.js index 34a31dc1..0d898d5c 100644 --- a/tests/utils.test.js +++ b/tests/utils.test.js @@ -20,6 +20,11 @@ test('Test reduceCSSSelector', async () => { expect(f("a[href^='javascript:']:after")).toEqual("a[href^='javascript:']"); }); +test('Test backslash selectors', async () => { + const f = utils.reduceCSSSelector; + expect(f('foo\\:hover')).toEqual('foo\\:hover'); +}); + test('Test parentSelectors', async () => { const f = utils.getParentSelectors; // Simplest possible From 2433f810ddb8ba9138c2546914636bb0a9b9df66 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Wed, 9 Feb 2022 13:38:12 -0500 Subject: [PATCH 2/2] function name --- tests/utils.test.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/utils.test.js b/tests/utils.test.js index 0d898d5c..13b1b207 100644 --- a/tests/utils.test.js +++ b/tests/utils.test.js @@ -21,8 +21,7 @@ test('Test reduceCSSSelector', async () => { }); test('Test backslash selectors', async () => { - const f = utils.reduceCSSSelector; - expect(f('foo\\:hover')).toEqual('foo\\:hover'); + expect(utils.reduceCSSSelector('foo\\:hover')).toEqual('foo\\:hover'); }); test('Test parentSelectors', async () => {