63 lines
1.5 KiB
JavaScript
63 lines
1.5 KiB
JavaScript
var packNumber = require('./Number').pack;
|
|
var MATH_FUNCTIONS = {
|
|
'calc': true,
|
|
'min': true,
|
|
'max': true,
|
|
'clamp': true
|
|
};
|
|
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 && MATH_FUNCTIONS.hasOwnProperty(this.function.name)) {
|
|
return;
|
|
}
|
|
|
|
item.data = {
|
|
type: 'Number',
|
|
loc: node.loc,
|
|
value: value
|
|
};
|
|
}
|
|
};
|