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