12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- import postcss from 'postcss';
- import parser from 'postcss-selector-parser';
- const anyAnyLinkMatch = /:any-link/;
- var index = postcss.plugin('postcss-pseudo-class-any-link', opts => {
- const preserve = 'preserve' in Object(opts) ? Boolean(opts.preserve) : true;
- return root => {
-
- root.walkRules(anyAnyLinkMatch, rule => {
- const rawSelector = rule.raws.selector && rule.raws.selector.raw || rule.selector;
- if (rawSelector[rawSelector.length - 1] !== ':') {
-
- const updatedSelector = parser(selectors => {
-
- let node;
- let nodeIndex;
- let selector;
- let selectorLink;
- let selectorVisited;
- let selectorIndex = -1;
- while (selector = selectors.nodes[++selectorIndex]) {
-
- nodeIndex = -1;
- while (node = selector.nodes[++nodeIndex]) {
-
- if (node.value === ':any-link') {
-
- selectorLink = selector.clone();
- selectorVisited = selector.clone();
- selectorLink.nodes[nodeIndex].value = ':link';
- selectorVisited.nodes[nodeIndex].value = ':visited';
- selectors.nodes.splice(selectorIndex--, 1, selectorLink, selectorVisited);
- break;
- }
- }
- }
- }).processSync(rawSelector);
- if (updatedSelector !== rawSelector) {
- if (preserve) {
- rule.cloneBefore({
- selector: updatedSelector
- });
- } else {
- rule.selector = updatedSelector;
- }
- }
- }
- });
- };
- });
- export default index;
|