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.
		
		
		
		
			
				
					43 lines
				
				1.1 KiB
			
		
		
			
		
	
	
					43 lines
				
				1.1 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								var List = require('css-tree').List;
							 | 
						||
| 
								 | 
							
								var walk = require('css-tree').walk;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function processRule(node, item, list) {
							 | 
						||
| 
								 | 
							
								    var selectors = node.prelude.children;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // generate new rule sets:
							 | 
						||
| 
								 | 
							
								    // .a, .b { color: red; }
							 | 
						||
| 
								 | 
							
								    // ->
							 | 
						||
| 
								 | 
							
								    // .a { color: red; }
							 | 
						||
| 
								 | 
							
								    // .b { color: red; }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // while there are more than 1 simple selector split for rulesets
							 | 
						||
| 
								 | 
							
								    while (selectors.head !== selectors.tail) {
							 | 
						||
| 
								 | 
							
								        var newSelectors = new List();
							 | 
						||
| 
								 | 
							
								        newSelectors.insert(selectors.remove(selectors.head));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        list.insert(list.createItem({
							 | 
						||
| 
								 | 
							
								            type: 'Rule',
							 | 
						||
| 
								 | 
							
								            loc: node.loc,
							 | 
						||
| 
								 | 
							
								            prelude: {
							 | 
						||
| 
								 | 
							
								                type: 'SelectorList',
							 | 
						||
| 
								 | 
							
								                loc: node.prelude.loc,
							 | 
						||
| 
								 | 
							
								                children: newSelectors
							 | 
						||
| 
								 | 
							
								            },
							 | 
						||
| 
								 | 
							
								            block: {
							 | 
						||
| 
								 | 
							
								                type: 'Block',
							 | 
						||
| 
								 | 
							
								                loc: node.block.loc,
							 | 
						||
| 
								 | 
							
								                children: node.block.children.copy()
							 | 
						||
| 
								 | 
							
								            },
							 | 
						||
| 
								 | 
							
								            pseudoSignature: node.pseudoSignature
							 | 
						||
| 
								 | 
							
								        }), item);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								module.exports = function disjoinRule(ast) {
							 | 
						||
| 
								 | 
							
								    walk(ast, {
							 | 
						||
| 
								 | 
							
								        visit: 'Rule',
							 | 
						||
| 
								 | 
							
								        reverse: true,
							 | 
						||
| 
								 | 
							
								        enter: processRule
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								};
							 |