aboutsummaryrefslogtreecommitdiff
path: root/node_modules/csso/lib/compressor/compress/Dimension.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/csso/lib/compressor/compress/Dimension.js')
-rw-r--r--node_modules/csso/lib/compressor/compress/Dimension.js54
1 files changed, 54 insertions, 0 deletions
diff --git a/node_modules/csso/lib/compressor/compress/Dimension.js b/node_modules/csso/lib/compressor/compress/Dimension.js
new file mode 100644
index 00000000..e614ad08
--- /dev/null
+++ b/node_modules/csso/lib/compressor/compress/Dimension.js
@@ -0,0 +1,54 @@
+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
+ };
+ }
+};