From 68c4e24f7580a6f8ceeb88d49e6eb2f6510c999d Mon Sep 17 00:00:00 2001 From: Jakub Pawlowicz Date: Tue, 14 Feb 2017 08:29:34 +0100 Subject: [PATCH] Fixes #891 - merging vendor-prefixed pseudo classes. Why: * When a pseudo-class or pseudo-element was positioned after quoted string it was not extracted for mergeability comparison. --- History.md | 5 +++++ lib/optimizer/level-2/is-mergeable.js | 4 ++-- test/optimizer/level-2/is-mergeable-test.js | 12 ++++++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/History.md b/History.md index 1dde8f36..9e6f8dcb 100644 --- a/History.md +++ b/History.md @@ -1,3 +1,8 @@ +[4.0.7 / 2017-xx-xx](https://github.com/jakubpawlowicz/clean-css/compare/v4.0.6...4.0) +================== + +* Fixed issue [#891](https://github.com/jakubpawlowicz/clean-css/issues/891) - merging vendor-prefixed pseudo-classes. + [4.0.6 / 2017-02-10](https://github.com/jakubpawlowicz/clean-css/compare/v4.0.5...v4.0.6) ================== diff --git a/lib/optimizer/level-2/is-mergeable.js b/lib/optimizer/level-2/is-mergeable.js index bbd4c43c..4a91a833 100644 --- a/lib/optimizer/level-2/is-mergeable.js +++ b/lib/optimizer/level-2/is-mergeable.js @@ -65,8 +65,6 @@ function extractPseudoFrom(selector) { if (isEscaped) { buffer.push(character); - } else if (isQuoted) { - buffer.push(character); } else if (character == Marker.DOUBLE_QUOTE && level == Level.ROOT) { buffer.push(character); level = Level.DOUBLE_QUOTE; @@ -79,6 +77,8 @@ function extractPseudoFrom(selector) { } else if (character == Marker.SINGLE_QUOTE && level == Level.SINGLE_QUOTE) { buffer.push(character); level = Level.ROOT; + } else if (isQuoted) { + buffer.push(character); } else if (character == Marker.OPEN_ROUND_BRACKET) { buffer.push(character); roundBracketLevel++; diff --git a/test/optimizer/level-2/is-mergeable-test.js b/test/optimizer/level-2/is-mergeable-test.js index dfe9b52a..cc04aa15 100644 --- a/test/optimizer/level-2/is-mergeable-test.js +++ b/test/optimizer/level-2/is-mergeable-test.js @@ -45,6 +45,18 @@ vows.describe(isMergeable) assert.isFalse(isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements)); } }, + 'vendor-prefixed pseudo-class as descendant of attribute rule 123': { + 'topic': '[data-x="y"] :-moz-placeholder', + 'is not mergeable': function (selector) { + assert.isFalse(isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements)); + } + }, + 'vendor-prefixed pseudo-element as descendant of attribute rule': { + 'topic': '[data-x="y"] ::-moz-placeholder', + 'is not mergeable': function (selector) { + assert.isFalse(isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements)); + } + }, 'unsupported pseudo-class': { 'topic': ':first-child', 'is not mergeable': function (selector) { -- 2.34.1