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.6 KiB
						
					
					
				
			
		
		
	
	
							43 lines
						
					
					
						
							1.6 KiB
						
					
					
				var resolveKeyword = require('css-tree').keyword; | 
						|
var walk = require('css-tree').walk; | 
						|
var generate = require('css-tree').generate; | 
						|
var createDeclarationIndexer = require('./createDeclarationIndexer'); | 
						|
var processSelector = require('./processSelector'); | 
						|
 | 
						|
module.exports = function prepare(ast, options) { | 
						|
    var markDeclaration = createDeclarationIndexer(); | 
						|
 | 
						|
    walk(ast, { | 
						|
        visit: 'Rule', | 
						|
        enter: function processRule(node) { | 
						|
            node.block.children.each(markDeclaration); | 
						|
            processSelector(node, options.usage); | 
						|
        } | 
						|
    }); | 
						|
 | 
						|
    walk(ast, { | 
						|
        visit: 'Atrule', | 
						|
        enter: function(node) { | 
						|
            if (node.prelude) { | 
						|
                node.prelude.id = null; // pre-init property to avoid multiple hidden class for generate | 
						|
                node.prelude.id = generate(node.prelude); | 
						|
            } | 
						|
 | 
						|
            // compare keyframe selectors by its values | 
						|
            // NOTE: still no clarification about problems with keyframes selector grouping (issue #197) | 
						|
            if (resolveKeyword(node.name).basename === 'keyframes') { | 
						|
                node.block.avoidRulesMerge = true;  /* probably we don't need to prevent those merges for @keyframes | 
						|
                                                       TODO: need to be checked */ | 
						|
                node.block.children.each(function(rule) { | 
						|
                    rule.prelude.children.each(function(simpleselector) { | 
						|
                        simpleselector.compareMarker = simpleselector.id; | 
						|
                    }); | 
						|
                }); | 
						|
            } | 
						|
        } | 
						|
    }); | 
						|
 | 
						|
    return { | 
						|
        declaration: markDeclaration | 
						|
    }; | 
						|
};
 | 
						|
 |