Files
Monkey-Test/WebDriverAgent/Inspector/node_modules/postcss-discard-comments/index.js
T
2019-01-25 17:01:52 +08:00

77 lines
2.6 KiB
JavaScript

'use strict';
var balanced = require('node-balanced');
var CommentRemover = require('./lib/commentRemover');
var postcss = require('postcss');
var space = postcss.list.space;
module.exports = postcss.plugin('postcss-discard-comments', function (options) {
return function (css) {
var remover = new CommentRemover(options || {});
function replaceComments (source) {
if (!source) {
return;
}
var b = balanced.replacements({
source: source,
open: '/*',
close: '*/',
replace: function (comment, head, tail) {
if (remover.canRemove(comment)) {
return ' ';
}
return head + comment + tail;
}
});
return space(b).join(' ');
}
css.eachInside(function (node) {
if (node.type === 'comment' && remover.canRemove(node.text)) {
return node.removeSelf();
}
if (node.between) {
node.between = replaceComments(node.between);
}
if (node.type === 'decl') {
if (node._value && node._value.raw) {
var replaced = replaceComments(node._value.raw);
node._value.raw = node._value.value = node.value = replaced;
}
if (node._important) {
node._important = replaceComments(node._important);
var b = balanced.matches({
source: node._important,
open: '/*',
close: '*/'
});
node._important = b.length ? node._important : '!important';
}
return;
}
if (node.type === 'rule' && node._selector && node._selector.raw) {
node._selector.raw = replaceComments(node._selector.raw);
return;
}
if (node.type === 'atrule') {
if (node.afterName) {
var commentsReplaced = replaceComments(node.afterName);
if (!commentsReplaced.length) {
node.afterName = commentsReplaced + ' ';
} else {
node.afterName = ' ' + commentsReplaced + ' ';
}
}
if (node._params && node._params.raw) {
node._params.raw = replaceComments(node._params.raw);
}
}
});
};
});