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