* Fixed issue [#490](https://github.com/jakubpawlowicz/clean-css/issues/490) - vendor prefixed multivalue `background`.
* Fixed issue [#500](https://github.com/jakubpawlowicz/clean-css/issues/500) - merging duplicate adjacent properties.
* Fixed issue [#507](https://github.com/jakubpawlowicz/clean-css/issues/507) - merging longhands into many shorthands.
+* Fixed issue [#508](https://github.com/jakubpawlowicz/clean-css/issues/508) - removing duplicate media queries.
[3.1.9 / 2015-04-04](https://github.com/jakubpawlowicz/clean-css/compare/v3.1.8...v3.1.9)
==================
var extractProperties = require('../extractor');
var canReorder = require('../reorderable').canReorder;
var canReorderSingle = require('../reorderable').canReorderSingle;
+var stringifyAll = require('../../stringifier/one-time').all;
var stringifyBody = require('../../stringifier/one-time').body;
var stringifySelectors = require('../../stringifier/one-time').selectors;
}
};
+AdvancedOptimizer.prototype.removeDuplicateMediaQueries = function (tokens) {
+ var candidates = {};
+
+ for (var i = 0, l = tokens.length; i < l; i++) {
+ var token = tokens[i];
+ if (token[0] != 'block')
+ continue;
+
+ var key = token[1][0] + '%' + stringifyAll(token[2]);
+ var candidate = candidates[key];
+
+ if (candidate)
+ candidate[2] = [];
+
+ candidates[key] = token;
+ }
+};
+
AdvancedOptimizer.prototype.mergeMediaQueries = function (tokens) {
var candidates = {};
var reduced = [];
}
if (self.options.mediaMerging) {
+ self.removeDuplicateMediaQueries(tokens);
var reduced = self.mergeMediaQueries(tokens);
for (var i = reduced.length - 1; i >= 0; i--) {
_optimize(reduced[i][2]);
};
}
+function all(tokens) {
+ var fakeContext = context();
+ helpers.all(tokens, fakeContext);
+ return fakeContext.output.join('');
+}
+
function body(tokens) {
var fakeContext = context();
helpers.body(tokens, fakeContext);
}
module.exports = {
+ all: all,
body: body,
property: property,
selectors: selectors,
'get merged': function(minified) {
assert.equal(minified.styles, '@media (min-width:1024px){.one{color:red}}@media screen{a{color:red}div{display:block}}');
}
+ },
+ 'duplicated but non-mergeable': {
+ 'topic': function () {
+ return new CleanCSS().minify('@media screen{a{color:red}}.one{color:#000}@media screen{a{color:red}}');
+ },
+ 'get merged': function(minified) {
+ assert.equal(minified.styles, '.one{color:#000}@media screen{a{color:red}}');
+ }
+ },
+ 'many duplicated but non-mergeable': {
+ 'topic': function () {
+ return new CleanCSS().minify('@media print{a{color:#fff}}@media screen{a{color:red}}.one{color:#000}@media screen{a{color:red}}@media print{a{display:block}}@media print{a{color:#fff}}');
+ },
+ 'get merged': function(minified) {
+ assert.equal(minified.styles, '.one{color:#000}@media screen{a{color:red}}@media print{a{display:block;color:#fff}}');
+ }
}
})
.addBatch({