first commit
This commit is contained in:
106
build/node_modules/postcss-minify-params/dist/index.js
generated
vendored
Normal file
106
build/node_modules/postcss-minify-params/dist/index.js
generated
vendored
Normal file
@@ -0,0 +1,106 @@
|
||||
var postcss = require('postcss');
|
||||
var valueParser = require('postcss-value-parser');
|
||||
var stringify = valueParser.stringify;
|
||||
var sort = require('alphanum-sort');
|
||||
var uniqs = require('uniqs');
|
||||
|
||||
/**
|
||||
* Return the greatest common divisor
|
||||
* of two numbers.
|
||||
*/
|
||||
|
||||
function gcd(a, b) {
|
||||
return b ? gcd(b, a % b) : a;
|
||||
}
|
||||
|
||||
function aspectRatio(a, b) {
|
||||
var divisor = gcd(a, b);
|
||||
|
||||
return [a / divisor, b / divisor];
|
||||
}
|
||||
|
||||
function split(nodes, div) {
|
||||
var result = [];
|
||||
var i, max, node;
|
||||
var last = '';
|
||||
|
||||
for (i = 0, max = nodes.length; i < max; i += 1) {
|
||||
node = nodes[i];
|
||||
if (node.type === 'div' && node.value === div) {
|
||||
result.push(last);
|
||||
last = '';
|
||||
} else {
|
||||
last += stringify(node);
|
||||
}
|
||||
}
|
||||
|
||||
result.push(last);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
function removeNode(node) {
|
||||
node.value = '';
|
||||
node.type = 'word';
|
||||
}
|
||||
|
||||
module.exports = postcss.plugin('postcss-minify-params', function () {
|
||||
return function (css) {
|
||||
css.walkAtRules(function (rule) {
|
||||
if (!rule.params) {
|
||||
return;
|
||||
}
|
||||
|
||||
var params = valueParser(rule.params);
|
||||
|
||||
params.walk(function (node, index) {
|
||||
if (node.type === 'div' || node.type === 'function') {
|
||||
node.before = node.after = '';
|
||||
if (
|
||||
node.type === 'function' &&
|
||||
node.nodes[4] &&
|
||||
node.nodes[0].value.indexOf('-aspect-ratio') === 3
|
||||
) {
|
||||
var ref = aspectRatio(
|
||||
node.nodes[2].value,
|
||||
node.nodes[4].value
|
||||
);
|
||||
var a = ref[0];
|
||||
var b = ref[1];
|
||||
node.nodes[2].value = a;
|
||||
node.nodes[4].value = b;
|
||||
}
|
||||
} else if (node.type === 'space') {
|
||||
node.value = ' ';
|
||||
} else if (node.type === 'word') {
|
||||
var prevWord = params.nodes[index - 2];
|
||||
if (
|
||||
node.value === 'all' &&
|
||||
rule.name === 'media' &&
|
||||
!prevWord
|
||||
) {
|
||||
var nextSpace = params.nodes[index + 1];
|
||||
var nextWord = params.nodes[index + 2];
|
||||
var secondSpace = params.nodes[index + 3];
|
||||
if (nextWord && nextWord.value === 'and') {
|
||||
removeNode(nextWord);
|
||||
removeNode(nextSpace);
|
||||
if (secondSpace) {
|
||||
removeNode(secondSpace);
|
||||
}
|
||||
}
|
||||
removeNode(node);
|
||||
}
|
||||
}
|
||||
}, true);
|
||||
|
||||
rule.params = sort(uniqs(split(params.nodes, ',')), {
|
||||
insensitive: true
|
||||
}).join();
|
||||
|
||||
if (!rule.params.length) {
|
||||
rule.raws.afterName = '';
|
||||
}
|
||||
});
|
||||
};
|
||||
});
|
||||
Reference in New Issue
Block a user