remove-duplicates.js 947 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. var stringifyBody = require('../stringifier/one-time').body;
  2. var stringifySelectors = require('../stringifier/one-time').selectors;
  3. function removeDuplicates(tokens) {
  4. var matched = {};
  5. var moreThanOnce = [];
  6. var id, token;
  7. var body, bodies;
  8. for (var i = 0, l = tokens.length; i < l; i++) {
  9. token = tokens[i];
  10. if (token[0] != 'selector')
  11. continue;
  12. id = stringifySelectors(token[1]);
  13. if (matched[id] && matched[id].length == 1)
  14. moreThanOnce.push(id);
  15. else
  16. matched[id] = matched[id] || [];
  17. matched[id].push(i);
  18. }
  19. for (i = 0, l = moreThanOnce.length; i < l; i++) {
  20. id = moreThanOnce[i];
  21. bodies = [];
  22. for (var j = matched[id].length - 1; j >= 0; j--) {
  23. token = tokens[matched[id][j]];
  24. body = stringifyBody(token[2]);
  25. if (bodies.indexOf(body) > -1)
  26. token[2] = [];
  27. else
  28. bodies.push(body);
  29. }
  30. }
  31. }
  32. module.exports = removeDuplicates;