From: Jakub Pawlowicz Date: Sun, 12 Apr 2015 10:23:15 +0000 (+0100) Subject: Fixes an edge case in shorthand merging. X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=0e4aafadd3a907f742810545660b2ced238ae8cb;p=clean-css.git Fixes an edge case in shorthand merging. There was an issue with understandability when merging two shorthand properties if one is a component of another. --- diff --git a/lib/properties/compactable.js b/lib/properties/compactable.js index 09b14775..dce02380 100644 --- a/lib/properties/compactable.js +++ b/lib/properties/compactable.js @@ -196,6 +196,7 @@ var compactable = { var addFourValueShorthand = function (prop, components, options) { options = options || {}; compactable[prop] = { + canOverride: options.canOverride, components: components, breakUp: options.breakUp || breakUp.fourValues, defaultValue: options.defaultValue || '0', diff --git a/lib/properties/override-compactor.js b/lib/properties/override-compactor.js index ff7fb30f..311a3b8f 100644 --- a/lib/properties/override-compactor.js +++ b/lib/properties/override-compactor.js @@ -230,6 +230,11 @@ function compactOverrides(properties, compatibility, validator) { if (!left.important && right.important) continue; + component = left.components.filter(nameMatchFilter(right))[0]; + mayOverride = compactable[right.name].canOverride || canOverride.sameValue; + if (!mayOverride(component, right, validator)) + continue; + if (left.important && !right.important) { right.unused = true; continue; diff --git a/test/properties/override-compacting-test.js b/test/properties/override-compacting-test.js index d935225f..6c9f8bbd 100644 --- a/test/properties/override-compacting-test.js +++ b/test/properties/override-compacting-test.js @@ -218,6 +218,15 @@ vows.describe(optimize) [['border', true , false], ['1px'], ['dotted'], ['red']] ]); } + }, + 'border - hex and rgb colors': { + 'topic': 'a{border:1px solid #000;border-color:rgba(255,0,0,.5)}', + 'into': function (topic) { + assert.deepEqual(_optimize(topic), [ + [['border', false, false], ['1px'], ['solid'], ['#000']], + [['border-color', false, false], ['rgba(255,0,0,.5)']] + ]); + } } }) .addBatch({