Adds smarter reordering rules.
authorJakub Pawlowicz <contact@jakubpawlowicz.com>
Sun, 22 Feb 2015 14:33:29 +0000 (14:33 +0000)
committerJakub Pawlowicz <contact@jakubpawlowicz.com>
Wed, 25 Feb 2015 22:04:54 +0000 (22:04 +0000)
We can reorder two properties if one them is shorthand and the other
is granular but they have the same value.

Note: it may be improved even further with #429 in place. At that time
we may compare exact values, e.g. `margin:0 1px` is currently not
swappable with `margin-top:0` but it should.

lib/selectors/optimizers/advanced.js
test/fixtures/big-min.css
test/selectors/optimizer-test.js

index f62fbca..19465de 100644 (file)
@@ -80,6 +80,8 @@ function canReorderSingle(right, left) {
     return true;
   if (rightName != leftName && rightNameRoot == leftNameRoot && rightName != rightNameRoot && leftName != leftNameRoot)
     return true;
+  if (rightName != leftName && rightNameRoot == leftNameRoot && rightValue == leftValue)
+    return true;
 
   return false;
 }
@@ -508,7 +510,7 @@ AdvancedOptimizer.prototype.restructure = function (tokens) {
       for (var k = 0; k < movedCount; k++) {
         var movedProperty = movedProperties[k];
 
-        if (movedToBeDropped.indexOf(k) == -1 && !canReorderSingle(property, movedProperty)) {
+        if (movedToBeDropped.indexOf(k) == -1 && !canReorderSingle(movedProperty, property)) {
           dropPropertiesAt(i + 1, movedProperty);
           movedToBeDropped.push(k);
           delete movableTokens[movedProperty[0]];
index be474f4..93cf9af 100644 (file)
@@ -1796,8 +1796,8 @@ form select{padding:1px;height:20px}
 body.auth-unlogged #core-liberation .form-monlibe-unlogged form{opacity:.3;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";filter:alpha(opacity=30)}
 #core-liberation .form-monlibe .note-unlogged{position:absolute;border:1px solid;top:130px;left:10px;width:420px;padding:10px 10px 12px}
 #core-liberation .form-monlibe .note-unlogged p{font-family:Georgia,"Times New Roman",Times,serif;font-size:21px;font-weight:400;line-height:25px}
-#core-liberation .form-monlibe .note-unlogged p.small,#core-liberation ul.list-items li h4,#core-liberation ul.list-items-mosts li{font-family:Verdana,Arial,sans-serif}
-#core-liberation .form-monlibe .note-unlogged p.small{font-size:12px}
+#core-liberation .form-monlibe .note-unlogged p.small{font-family:Verdana,Arial,sans-serif;font-size:12px}
+#core-liberation ul.list-items li h4,#core-liberation ul.list-items-mosts li{font-family:Georgia,"Times New Roman",Times,serif}
 #core-liberation .form-monlibe .monlibe-edit-profile label{float:left;width:70%}
 #core-liberation .form-monlibe .monlibe-edit-profile p{clear:both}
 #core-liberation .form-monlibe .monlibe-edit-profile .btn-monlibe{margin-top:30px}
index b5eb62a..679498c 100644 (file)
@@ -105,19 +105,23 @@ vows.describe(SelectorsOptimizer)
       ],
       'over shorthands': [
         'div{margin-top:0}.one{margin:0}.two{display:block;margin-top:0}',
-        'div{margin-top:0}.one{margin:0}.two{display:block;margin-top:0}'
+        '.two,div{margin-top:0}.one{margin:0}.two{display:block}'
       ],
       'over shorthands with flush': [
-        'div{margin-top:0}.one{margin:0}.two{display:block;margin-top:0}.three{color:red}.four{margin-top:0}',
-        'div{margin-top:0}.one{margin:0}.four,.two{margin-top:0}.two{display:block}.three{color:red}'
+        'div{margin-top:0}.one{margin:5px}.two{display:block;margin-top:0}.three{color:red}.four{margin-top:0}',
+        'div{margin-top:0}.one{margin:5px}.four,.two{margin-top:0}.two{display:block}.three{color:red}'
       ],
-      'over granular': [
-        'div{margin-top:0}.one{margin-bottom:0}.two{display:block;margin-top:0}',
-        '.two,div{margin-top:0}.one{margin-bottom:0}.two{display:block}'
+      'granuar over granular': [
+        'div{margin-top:0}.one{margin-bottom:2px}.two{display:block;margin-top:0}',
+        '.two,div{margin-top:0}.one{margin-bottom:2px}.two{display:block}'
       ],
-      'over granular with shorthand': [
+      'shorthand over granular with different value': [
+        'div{margin:0}.one{margin-bottom:1px}.two{display:block;margin:0}',
+        'div{margin:0}.one{margin-bottom:1px}.two{display:block;margin:0}'
+      ],
+      'shorthand over granular with same value': [
         'div{margin:0}.one{margin-bottom:0}.two{display:block;margin:0}',
-        'div{margin:0}.one{margin-bottom:0}.two{display:block;margin:0}'
+        '.two,div{margin:0}.one{margin-bottom:0}.two{display:block}'
       ],
       'over media without overriding': [
         'div{margin:0}@media{.one{color:red}}.two{display:block;margin:0}',
@@ -133,7 +137,7 @@ vows.describe(SelectorsOptimizer)
       ],
       'over media with overriding by a granular': [
         'div{margin:0}@media{.one{margin-bottom:0}}.two{display:block;margin:0}',
-        'div{margin:0}@media{.one{margin-bottom:0}}.two{display:block;margin:0}'
+        '.two,div{margin:0}@media{.one{margin-bottom:0}}.two{display:block}'
       ],
       'over media with overriding by a different granular': [
         'div{margin-top:0}@media{.one{margin-bottom:0}}.two{display:block;margin-top:0}',