blob: dd9c63fad1979d7b1ad1e45bbfb47f55b8934735 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
var postcss = require('postcss');
var parser = require('postcss-selector-parser');
module.exports = postcss.plugin('postcss-unroot', function (opts) {
var method = opts && /^(copy|warn)$/.test(opts.method) ? opts.method : 'replace';
return function (css, result) {
css.walkRules(function (rule) {
if (rule.selector.indexOf(':root') !== -1) {
var parsedSelector = parser(function (selectors) {
selectors.each(function (selector) {
selector.eachPseudo(function (pseudo) {
if (pseudo.value === ':root') {
if (method === 'warn') result.warn(':root detected', { node: rule });
else {
var nodes = pseudo.parent.nodes;
var index = -1;
var node;
var hasTag;
while (node = nodes[++index]) {
if (node.type === 'tag') hasTag = true;
if (hasTag || node === pseudo || node.type === 'combinator') break;
}
if (!hasTag) pseudo.replaceWith(parser.tag({ value: 'html' }));
else pseudo.removeSelf();
}
}
});
});
}).process(rule.selector).result;
if (parsedSelector !== rule.selector) {
if (method === 'copy') rule.parent.insertBefore(rule, rule.clone({
selector: parsedSelector
}));
else if (method === 'replace') rule.selector = parsedSelector;
}
}
});
};
});
|