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
 | 
						|
    });
 | 
						|
};
 |