You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.6 KiB
69 lines
1.6 KiB
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); |
|
};
|
|
|