40 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| var OMIT_PLUSSIGN = /^(?:\+|(-))?0*(\d*)(?:\.0*|(\.\d*?)0*)?$/;
 | |
| var KEEP_PLUSSIGN = /^([\+\-])?0*(\d*)(?:\.0*|(\.\d*?)0*)?$/;
 | |
| var unsafeToRemovePlusSignAfter = {
 | |
|     Dimension: true,
 | |
|     Hash: true,
 | |
|     Identifier: true,
 | |
|     Number: true,
 | |
|     Raw: true,
 | |
|     UnicodeRange: true
 | |
| };
 | |
| 
 | |
| function packNumber(value, item) {
 | |
|     // omit plus sign only if no prev or prev is safe type
 | |
|     var regexp = item && item.prev !== null && unsafeToRemovePlusSignAfter.hasOwnProperty(item.prev.data.type)
 | |
|         ? KEEP_PLUSSIGN
 | |
|         : OMIT_PLUSSIGN;
 | |
| 
 | |
|     // 100 -> '100'
 | |
|     // 00100 -> '100'
 | |
|     // +100 -> '100' (only when safe, e.g. omitting plus sign for 1px+1px leads to single dimension instead of two)
 | |
|     // -100 -> '-100'
 | |
|     // 0.123 -> '.123'
 | |
|     // 0.12300 -> '.123'
 | |
|     // 0.0 -> ''
 | |
|     // 0 -> ''
 | |
|     // -0 -> '-'
 | |
|     value = String(value).replace(regexp, '$1$2$3');
 | |
| 
 | |
|     if (value === '' || value === '-') {
 | |
|         value = '0';
 | |
|     }
 | |
| 
 | |
|     return value;
 | |
| }
 | |
| 
 | |
| module.exports = function(node, item) {
 | |
|     node.value = packNumber(node.value, item);
 | |
| };
 | |
| module.exports.pack = packNumber;
 |