43 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 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
 | |
|     });
 | |
| };
 |