css-mqpacker
Version:
Pack same CSS media query rules into one media query rule.
52 lines (40 loc) • 940 B
JavaScript
;
var postcss = require('postcss');
exports.postcss = function (css) {
var queries = {};
var params = [];
var sourceMap;
css.each(function (rule) {
if (rule.type !== 'atrule' || rule.name !== 'media') {
return;
}
var query = rule.params;
var past = queries[query];
if (typeof past === 'object') {
rule.each(function (r) {
past.append(r.clone());
});
} else {
queries[query] = rule.clone();
params.push(query);
}
rule.removeSelf();
});
if (
css.last &&
css.last.type === 'comment' &&
css.last.text.toLowerCase().indexOf('# sourcemappingurl=') === 0
) {
sourceMap = css.last;
}
params.forEach(function (param) {
css.append(queries[param]);
});
if (sourceMap) {
sourceMap.moveTo(css);
}
return css;
};
exports.pack = function (css, opts) {
return postcss().use(this.postcss).process(css, opts);
};