Fixes #275 - -ms-transform translate/translate3d overriding.
authorJakub Pawlowicz <jakub@goalsmashers.com>
Sat, 31 May 2014 20:45:53 +0000 (21:45 +0100)
committerJakub Pawlowicz <jakub@goalsmashers.com>
Sat, 31 May 2014 21:59:14 +0000 (22:59 +0100)
* Fixes similar cases for other prefixes and unprefixed transform.

History.md
lib/properties/optimizer.js
lib/properties/processable.js
test/unit-test.js

index 6052256..76da275 100644 (file)
@@ -12,6 +12,7 @@
 * Fixed issue [#190](https://github.com/GoalSmashers/clean-css/issues/190) - uses shorthand to override another shorthand.
 * Fixed issue [#247](https://github.com/GoalSmashers/clean-css/issues/247) - removes deprecated `selectorsMergeMode` switch.
 * Refixed issue [#250](https://github.com/GoalSmashers/clean-css/issues/250) - based on new quotation marks removal.
+* Fixed issue [#275](https://github.com/GoalSmashers/clean-css/issues/275) - handling transform properties.
 
 [2.1.8 / 2014-03-28](https://github.com/GoalSmashers/clean-css/compare/v2.1.7...v2.1.8)
 ==================
index b2e30b5..1de0447 100644 (file)
@@ -171,6 +171,7 @@ module.exports = function Optimizer(compatibility) {
     for (var i = 0, l = tokens.length; i < l; i++) {
       var token = tokens[i];
       var property = token[0];
+      var value = token[1];
       var isImportant = token[2];
       var isIEHack = token[3];
       var _property = (property == '-ms-filter' || property == 'filter') ?
@@ -202,6 +203,10 @@ module.exports = function Optimizer(compatibility) {
           if (compatibility && !wasIEHack && isIEHack)
             break;
 
+          var _info = processableInfo.processable[_property];
+          if (!isIEHack && !wasIEHack && _info && _info.canOverride && !_info.canOverride(tokens[toOverridePosition][1], value))
+            break;
+
           merged.splice(toOverridePosition, 1);
           properties.splice(toOverridePosition, 1);
         }
index 988bf38..2218ce4 100644 (file)
@@ -65,9 +65,9 @@ module.exports = (function () {
         return false;
 
       // (rgba|hsla)
-      if (validator.isValidRgbaColor(val2) || validator.isValidHslColor(val2) || validator.isValidHslaColor(val2))
+      if (validator.isValidRgbaColor(val2) || validator.isValidHslaColor(val2))
         return true;
-      if (validator.isValidRgbaColor(val1) || validator.isValidHslColor(val1) || validator.isValidHslaColor(val1))
+      if (validator.isValidRgbaColor(val1) || validator.isValidHslaColor(val1))
         return false;
 
       // Functions with the same name can override each other; same values can override each other
@@ -589,6 +589,19 @@ module.exports = (function () {
       canOverride: canOverride.unit,
       defaultValue: 'medium',
       shortestValue: '0'
+    },
+    // transform
+    '-moz-transform': {
+      canOverride: canOverride.sameFunctionOrValue
+    },
+    '-ms-transform': {
+      canOverride: canOverride.sameFunctionOrValue
+    },
+    '-webkit-transform': {
+      canOverride: canOverride.sameFunctionOrValue
+    },
+    'transform': {
+      canOverride: canOverride.sameFunctionOrValue
     }
   };
 
index 18ce972..7f0aa6d 100644 (file)
@@ -1390,7 +1390,11 @@ title']{display:block}",
     'filter treated as background': 'p{background:-moz-linear-gradient();background:-webkit-linear-gradient();filter:"progid:DXImageTransform";background:linear-gradient()}',
     'filter treated as background-image': 'p{background-image:-moz-linear-gradient();background-image:-webkit-linear-gradient();filter:"progid:DXImageTransform";background-image:linear-gradient()}',
     '-ms-filter treated as background': 'p{background:-moz-linear-gradient();background:-webkit-linear-gradient();-ms-filter:"progid:DXImageTransform";background:linear-gradient()}',
-    '-ms-filter treated as background-image': 'p{background-image:-moz-linear-gradient();background-image:-webkit-linear-gradient();-ms-filter:"progid:DXImageTransform";background-image:linear-gradient()}'
+    '-ms-filter treated as background-image': 'p{background-image:-moz-linear-gradient();background-image:-webkit-linear-gradient();-ms-filter:"progid:DXImageTransform";background-image:linear-gradient()}',
+    '-ms-transform with different values #1': 'div{-ms-transform:translate(0,0);-ms-transform:translate3d(0,0,0)}',
+    '-ms-transform with different values #2': 'div{-ms-transform:translate(0,0);-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}',
+    'transform with different values #1': 'div{transform:translate(0,0);transform:translate3d(0,0,0)}',
+    'transform with different values #2': 'div{transform:translate(0,0);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}'
   }),
   'same selectors': cssContext({
     'of two non-adjacent selectors': '.one{color:red}.two{color:#00f}.one{font-weight:700}',