70 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
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);
 | 
						|
};
 |