summaryrefslogtreecommitdiff
path: root/node_modules/postcss-unnot/index.js
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2023-10-30 16:45:38 +0800
committerlittleblack111 <littleblack11111@gmail.com>2023-10-30 16:45:38 +0800
commita0579f91bbdf0de62b59df381d97a008bb98df57 (patch)
tree69c21333750c7bc7358f9383560438048d9adebf /node_modules/postcss-unnot/index.js
parent2d8aeba452672bcda2096e5d76bf37131c34075e (diff)
update/upgrade
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;
+ }
+ }
+ });
+ };
+});