44 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
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
 | 
						|
    };
 | 
						|
};
 |