diff options
Diffstat (limited to 'node_modules/postcss-unnot/index.js')
| -rw-r--r-- | node_modules/postcss-unnot/index.js | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/node_modules/postcss-unnot/index.js b/node_modules/postcss-unnot/index.js new file mode 100644 index 00000000..e7a160fd --- /dev/null +++ b/node_modules/postcss-unnot/index.js @@ -0,0 +1,34 @@ +var postcss = require('postcss'); +var parser = require('postcss-selector-parser'); + +module.exports = postcss.plugin('postcss-unnot', function (opts) { + var method = opts && /^(move|pseudo|warn)$/.test(opts.method) ? opts.method : 'remove'; + + return function (css, result) { + css.walkRules(function (rule) { + var cloneSelectors = []; + + if (rule.selector.indexOf(':not') !== -1) { + var parsedSelector = parser(function (selectors) { + selectors.each(function (selector) { + selector.eachPseudo(function (pseudo) { + if (pseudo.value === ':not') { + if (method === 'move') cloneSelectors.push(String(selector)); + + if (method === 'remove' || method === 'move') return selector.removeSelf() && false; + else if (method === 'pseudo') pseudo.removeSelf(); + else if (method === 'warn') result.warn(':not detected', { node: rule }); + } + }); + }); + }).process(rule.selector).result; + + if (parsedSelector !== rule.selector) { + if (cloneSelectors.length) rule.parent.insertBefore(rule, rule.clone({ selector: String(cloneSelectors).trim() })); + + rule.selector = parsedSelector; + } + } + }); + }; +}); |
