55 lines
1.2 KiB
JavaScript
55 lines
1.2 KiB
JavaScript
|
var packNumber = require('./Number.js').pack;
|
||
|
var LENGTH_UNIT = {
|
||
|
// absolute length units
|
||
|
'px': true,
|
||
|
'mm': true,
|
||
|
'cm': true,
|
||
|
'in': true,
|
||
|
'pt': true,
|
||
|
'pc': true,
|
||
|
|
||
|
// relative length units
|
||
|
'em': true,
|
||
|
'ex': true,
|
||
|
'ch': true,
|
||
|
'rem': true,
|
||
|
|
||
|
// viewport-percentage lengths
|
||
|
'vh': true,
|
||
|
'vw': true,
|
||
|
'vmin': true,
|
||
|
'vmax': true,
|
||
|
'vm': true
|
||
|
};
|
||
|
|
||
|
module.exports = function compressDimension(node, item) {
|
||
|
var value = packNumber(node.value);
|
||
|
|
||
|
node.value = value;
|
||
|
|
||
|
if (value === '0' && this.declaration) {
|
||
|
var unit = node.unit.toLowerCase();
|
||
|
|
||
|
// only length values can be compressed
|
||
|
if (!LENGTH_UNIT.hasOwnProperty(unit)) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// issue #200: don't remove units in flex property as it could change value meaning
|
||
|
if (this.declaration.property.name === 'flex') {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// issue #222: don't remove units inside calc
|
||
|
if (this['function'] && this['function'].name === 'calc') {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
item.data = {
|
||
|
type: 'Number',
|
||
|
info: node.info,
|
||
|
value: value
|
||
|
};
|
||
|
}
|
||
|
};
|