summaryrefslogtreecommitdiff
path: root/node_modules/postcss-unnot/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/postcss-unnot/index.js')
-rw-r--r--node_modules/postcss-unnot/index.js34
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;
+ }
+ }
+ });
+ };
+});