background.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. var List = require('../../../utils/list.js');
  2. module.exports = function compressBackground(node) {
  3. function lastType() {
  4. if (buffer.length) {
  5. return buffer[buffer.length - 1].type;
  6. }
  7. }
  8. function flush() {
  9. if (lastType() === 'Space') {
  10. buffer.pop();
  11. }
  12. if (!buffer.length) {
  13. buffer.unshift(
  14. {
  15. type: 'Number',
  16. value: '0'
  17. },
  18. {
  19. type: 'Space'
  20. },
  21. {
  22. type: 'Number',
  23. value: '0'
  24. }
  25. );
  26. }
  27. newValue.push.apply(newValue, buffer);
  28. buffer = [];
  29. }
  30. var newValue = [];
  31. var buffer = [];
  32. node.sequence.each(function(node) {
  33. if (node.type === 'Operator' && node.value === ',') {
  34. flush();
  35. newValue.push(node);
  36. return;
  37. }
  38. // remove defaults
  39. if (node.type === 'Identifier') {
  40. if (node.name === 'transparent' ||
  41. node.name === 'none' ||
  42. node.name === 'repeat' ||
  43. node.name === 'scroll') {
  44. return;
  45. }
  46. }
  47. // don't add redundant spaces
  48. if (node.type === 'Space' && (!buffer.length || lastType() === 'Space')) {
  49. return;
  50. }
  51. buffer.push(node);
  52. });
  53. flush();
  54. node.sequence = new List(newValue);
  55. };