return lengthBefore < lengthAfter;
}
+function isCompactable(property) {
+ return property.name in compactable;
+}
+
function compactOverrides(properties, compatibility, validator) {
var mayOverride, right, left, component;
var i, j, k;
propertyLoop:
for (i = properties.length - 1; i >= 0; i--) {
right = properties[i];
- mayOverride = (compactable[right.name] && compactable[right.name].canOverride) || canOverride.sameValue;
+
+ if (!isCompactable(right))
+ continue;
+
+ mayOverride = compactable[right.name].canOverride || canOverride.sameValue;
for (j = i - 1; j >= 0; j--) {
left = properties[j];
+ if (!isCompactable(left))
+ continue;
+
if (left.unused || right.unused)
continue;
component = left.components.filter(nameMatchFilter(right))[0];
override(component, right);
right.dirty = true;
+ } else if (!left.shorthand && !right.shorthand && left.name == right.name) {
+ // two non-shorthands should be merged based on understandability
+
+ if (left.important && !right.important) {
+ right.unused = true;
+ continue;
+ }
+
+ mayOverride = compactable[right.name].canOverride || canOverride.sameValue;
+ if (!mayOverride(left, right, validator))
+ continue;
+
+ left.unused = true;
}
}
}
}
}
})
+ .addBatch({
+ 'colors with same understandability': {
+ 'topic': 'a{color:red;color:#fff;color:blue}',
+ 'into': function (topic) {
+ assert.deepEqual(_optimize(topic), [
+ [['color', false , false], ['blue']]
+ ]);
+ }
+ },
+ 'colors with different understandability': {
+ 'topic': 'a{color:red;color:#fff;color:blue;color:rgba(1,2,3,.4)}',
+ 'into': function (topic) {
+ assert.deepEqual(_optimize(topic), [
+ [['color', false , false], ['blue']],
+ [['color', false , false], ['rgba(1,2,3,.4)']]
+ ]);
+ }
+ },
+ 'colors with different understandability overridden by high understandability': {
+ 'topic': 'a{color:red;color:#fff;color:blue;color:rgba(1,2,3,.4);color:red}',
+ 'into': function (topic) {
+ assert.deepEqual(_optimize(topic), [
+ [['color', false , false], ['red']]
+ ]);
+ }
+ },
+ 'colors with different understandability and importance #1': {
+ 'topic': 'a{color:#fff!important;color:rgba(1,2,3,.4)}',
+ 'into': function (topic) {
+ assert.deepEqual(_optimize(topic), [
+ [['color', true , false], ['#fff']]
+ ]);
+ }
+ },
+ 'colors with different understandability and importance #2': {
+ 'topic': 'a{color:#fff;color:rgba(1,2,3,.4)!important}',
+ 'into': function (topic) {
+ assert.deepEqual(_optimize(topic), [
+ [['color', false , false], ['#fff']],
+ [['color', true , false], ['rgba(1,2,3,.4)']]
+ ]);
+ }
+ }
+ })
.addBatch({
'shorthand then longhand multiplex': {
'topic': 'p{background:top left;background-repeat:no-repeat,no-repeat}',