index.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. var resolveKeyword = require('../../../utils/names.js').keyword;
  2. var walkRules = require('../../../utils/walk.js').rules;
  3. var translate = require('../../../utils/translate.js');
  4. var createDeclarationIndexer = require('./createDeclarationIndexer.js');
  5. var processSelector = require('./processSelector.js');
  6. function walk(node, markDeclaration, usageData) {
  7. switch (node.type) {
  8. case 'Ruleset':
  9. node.block.declarations.each(markDeclaration);
  10. processSelector(node, usageData);
  11. break;
  12. case 'Atrule':
  13. if (node.expression) {
  14. node.expression.id = translate(node.expression);
  15. }
  16. // compare keyframe selectors by its values
  17. // NOTE: still no clarification about problems with keyframes selector grouping (issue #197)
  18. if (resolveKeyword(node.name).name === 'keyframes') {
  19. node.block.avoidRulesMerge = true; /* probably we don't need to prevent those merges for @keyframes
  20. TODO: need to be checked */
  21. node.block.rules.each(function(ruleset) {
  22. ruleset.selector.selectors.each(function(simpleselector) {
  23. simpleselector.compareMarker = simpleselector.id;
  24. });
  25. });
  26. }
  27. break;
  28. }
  29. };
  30. module.exports = function prepare(ast, usageData) {
  31. var markDeclaration = createDeclarationIndexer();
  32. walkRules(ast, function(node) {
  33. walk(node, markDeclaration, usageData);
  34. });
  35. return {
  36. declaration: markDeclaration
  37. };
  38. };