| var List = require('css-tree').List; |
| |
| module.exports = function compressBackground(node) { |
| function lastType() { |
| if (buffer.length) { |
| return buffer[buffer.length - 1].type; |
| } |
| } |
| |
| function flush() { |
| if (lastType() === 'WhiteSpace') { |
| buffer.pop(); |
| } |
| |
| if (!buffer.length) { |
| buffer.unshift( |
| { |
| type: 'Number', |
| loc: null, |
| value: '0' |
| }, |
| { |
| type: 'WhiteSpace', |
| value: ' ' |
| }, |
| { |
| type: 'Number', |
| loc: null, |
| value: '0' |
| } |
| ); |
| } |
| |
| newValue.push.apply(newValue, buffer); |
| |
| buffer = []; |
| } |
| |
| var newValue = []; |
| var buffer = []; |
| |
| node.children.each(function(node) { |
| if (node.type === 'Operator' && node.value === ',') { |
| flush(); |
| newValue.push(node); |
| return; |
| } |
| |
| // remove defaults |
| if (node.type === 'Identifier') { |
| if (node.name === 'transparent' || |
| node.name === 'none' || |
| node.name === 'repeat' || |
| node.name === 'scroll') { |
| return; |
| } |
| } |
| |
| // don't add redundant spaces |
| if (node.type === 'WhiteSpace' && (!buffer.length || lastType() === 'WhiteSpace')) { |
| return; |
| } |
| |
| buffer.push(node); |
| }); |
| |
| flush(); |
| node.children = new List().fromArray(newValue); |
| }; |