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); };