57 lines
1.3 KiB
JavaScript
57 lines
1.3 KiB
JavaScript
|
var packNumber = require('./Number').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, item);
|
||
|
|
||
|
node.value = value;
|
||
|
|
||
|
if (value === '0' && this.declaration !== null && this.atrulePrelude === null) {
|
||
|
var unit = node.unit.toLowerCase();
|
||
|
|
||
|
// only length values can be compressed
|
||
|
if (!LENGTH_UNIT.hasOwnProperty(unit)) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// issue #362: shouldn't remove unit in -ms-flex since it breaks flex in IE10/11
|
||
|
// issue #200: shouldn't remove unit in flex since it breaks flex in IE10/11
|
||
|
if (this.declaration.property === '-ms-flex' ||
|
||
|
this.declaration.property === 'flex') {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// issue #222: don't remove units inside calc
|
||
|
if (this['function'] && this['function'].name === 'calc') {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
item.data = {
|
||
|
type: 'Number',
|
||
|
loc: node.loc,
|
||
|
value: value
|
||
|
};
|
||
|
}
|
||
|
};
|