diff options
| author | littleblack111 <littleblack11111@gmail.com> | 2023-10-30 16:45:38 +0800 |
|---|---|---|
| committer | littleblack111 <littleblack11111@gmail.com> | 2023-10-30 16:45:38 +0800 |
| commit | a0579f91bbdf0de62b59df381d97a008bb98df57 (patch) | |
| tree | 69c21333750c7bc7358f9383560438048d9adebf /node_modules/postcss-unnot/index.js | |
| parent | 2d8aeba452672bcda2096e5d76bf37131c34075e (diff) | |
update/upgrade
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; + } + } + }); + }; +}); |
