You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							70 lines
						
					
					
						
							2.2 KiB
						
					
					
				
			
		
		
	
	
							70 lines
						
					
					
						
							2.2 KiB
						
					
					
				| "use strict";
 | |
| 
 | |
| Object.defineProperty(exports, "__esModule", {
 | |
|   value: true
 | |
| });
 | |
| 
 | |
| var _postcss = require("postcss");
 | |
| 
 | |
| var _postcss2 = _interopRequireDefault(_postcss);
 | |
| 
 | |
| var _list = require("postcss/lib/list");
 | |
| 
 | |
| var _list2 = _interopRequireDefault(_list);
 | |
| 
 | |
| var _balancedMatch = require("balanced-match");
 | |
| 
 | |
| var _balancedMatch2 = _interopRequireDefault(_balancedMatch);
 | |
| 
 | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 | |
| 
 | |
| function explodeSelector(pseudoClass, selector) {
 | |
|   var position = locatePseudoClass(selector, pseudoClass);
 | |
|   if (selector && position > -1) {
 | |
|     var pre = selector.slice(0, position);
 | |
|     var matches = (0, _balancedMatch2.default)("(", ")", selector.slice(position));
 | |
|     var bodySelectors = matches.body ? _list2.default.comma(matches.body).map(function (s) {
 | |
|       return explodeSelector(pseudoClass, s);
 | |
|     }).join(`)${pseudoClass}(`) : "";
 | |
|     var postSelectors = matches.post ? explodeSelector(pseudoClass, matches.post) : "";
 | |
| 
 | |
|     return `${pre}${pseudoClass}(${bodySelectors})${postSelectors}`;
 | |
|   }
 | |
|   return selector;
 | |
| }
 | |
| 
 | |
| var patternCache = {};
 | |
| 
 | |
| function locatePseudoClass(selector, pseudoClass) {
 | |
|   patternCache[pseudoClass] = patternCache[pseudoClass] || new RegExp(`([^\\\\]|^)${pseudoClass}`);
 | |
| 
 | |
|   // The regex is used to ensure that selectors with
 | |
|   // escaped colons in them are treated properly
 | |
|   // Ex: .foo\:not-bar is a valid CSS selector
 | |
|   // But it is not a reference to a pseudo selector
 | |
|   var pattern = patternCache[pseudoClass];
 | |
|   var position = selector.search(pattern);
 | |
| 
 | |
|   if (position === -1) {
 | |
|     return -1;
 | |
|   }
 | |
| 
 | |
|   // The offset returned by the regex may be off by one because
 | |
|   // of it including the negated character match in the position
 | |
|   return position + selector.slice(position).indexOf(pseudoClass);
 | |
| }
 | |
| 
 | |
| function explodeSelectors(pseudoClass) {
 | |
|   return function () {
 | |
|     return function (css) {
 | |
|       css.walkRules(function (rule) {
 | |
|         if (rule.selector && rule.selector.indexOf(pseudoClass) > -1) {
 | |
|           rule.selector = explodeSelector(pseudoClass, rule.selector);
 | |
|         }
 | |
|       });
 | |
|     };
 | |
|   };
 | |
| }
 | |
| 
 | |
| exports.default = _postcss2.default.plugin("postcss-selector-not", explodeSelectors(":not"));
 | |
| module.exports = exports.default; |