From d39b95495dd5ce83c1b6f9a6d29d5da8708c6b41 Mon Sep 17 00:00:00 2001 From: Jakub Pawlowicz Date: Sun, 8 Feb 2015 11:00:40 +0000 Subject: [PATCH] Fixes an edge case in merging non-adjacent selectors by name. --- lib/selectors/optimizers/advanced.js | 6 ++++-- test/integration-test.js | 10 +++++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/selectors/optimizers/advanced.js b/lib/selectors/optimizers/advanced.js index f405e939..ed74b7e5 100644 --- a/lib/selectors/optimizers/advanced.js +++ b/lib/selectors/optimizers/advanced.js @@ -84,8 +84,10 @@ AdvancedOptimizer.prototype.mergeAdjacent = function (tokens) { for (var i = 0, l = tokens.length; i < l; i++) { var token = tokens[i]; - if (token.kind != 'selector') + if (token.kind != 'selector') { + lastToken = { selector: null, body: null }; continue; + } if (lastToken.kind == 'selector' && token.metadata.selector == lastToken.metadata.selector) { var joinAt = [lastToken.body.length]; @@ -308,7 +310,7 @@ AdvancedOptimizer.prototype.mergeNonAdjacentBySelector = function (tokens) { var movedProperties = extractProperties(movedToken); for (var k = movedPosition - 1; k > targetPosition; k--) { - if (tokens[k].kind == 'selector' && unsafeTraversal(tokens[k], movedProperties)) + if (tokens[k].isFlatBlock === false || tokens[k].kind == 'selector' && unsafeTraversal(tokens[k], movedProperties)) continue selectorIterator; } diff --git a/test/integration-test.js b/test/integration-test.js index d2eacb3b..2b0e4493 100644 --- a/test/integration-test.js +++ b/test/integration-test.js @@ -1734,7 +1734,15 @@ title']{display:block}", 'a{color:red}a{background:red}b{color:red}b{background:red}', 'a,b{color:red;background:red}' ], - 'when overriden with a browser specific selector': 'a{color:red}::-webkit-scrollbar,a{color:#fff}' + 'when overriden with a browser specific selector': 'a{color:red}::-webkit-scrollbar,a{color:#fff}', + 'two same selectors over a block': [ + '.one{color:red}@media print{.two{display:block}}.one{display:none}', + '.one{color:red}@media print{.two{display:block}}.one{display:none}' + ], + 'two same bodies over a block': [ + '.one{color:red}@media print{.two{display:block}}.three{color:red}', + '.one{color:red}@media print{.two{display:block}}.three{color:red}' + ] }), 'same non-adjacent selectors': cssContext({ 'with different properties': 'a{color:red;display:block}.one{margin:5px}a{margin:2px}', -- 2.34.1