2-mergeAtrule.js 839 B

1234567891011121314151617181920212223242526272829303132333435
  1. var walkRulesRight = require('../../utils/walk.js').rulesRight;
  2. function isMediaRule(node) {
  3. return node.type === 'Atrule' && node.name === 'media';
  4. }
  5. function processAtrule(node, item, list) {
  6. if (!isMediaRule(node)) {
  7. return;
  8. }
  9. var prev = item.prev && item.prev.data;
  10. if (!prev || !isMediaRule(prev)) {
  11. return;
  12. }
  13. // merge @media with same query
  14. if (node.expression.id === prev.expression.id) {
  15. prev.block.rules.appendList(node.block.rules);
  16. prev.info = {
  17. primary: prev.info,
  18. merged: node.info
  19. };
  20. list.remove(item);
  21. }
  22. };
  23. module.exports = function rejoinAtrule(ast) {
  24. walkRulesRight(ast, function(node, item, list) {
  25. if (node.type === 'Atrule') {
  26. processAtrule(node, item, list);
  27. }
  28. });
  29. };