81 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| 
 | |
| Object.defineProperty(exports, "__esModule", {
 | |
|   value: true
 | |
| });
 | |
| exports.default = _default;
 | |
| var order = {
 | |
|   "*": 0,
 | |
|   "/": 0,
 | |
|   "+": 1,
 | |
|   "-": 1
 | |
| };
 | |
| 
 | |
| function round(value, prec) {
 | |
|   if (prec !== false) {
 | |
|     var precision = Math.pow(10, prec);
 | |
|     return Math.round(value * precision) / precision;
 | |
|   }
 | |
| 
 | |
|   return value;
 | |
| }
 | |
| 
 | |
| function stringify(node, prec) {
 | |
|   switch (node.type) {
 | |
|     case "MathExpression":
 | |
|       {
 | |
|         var left = node.left,
 | |
|             right = node.right,
 | |
|             op = node.operator;
 | |
|         var str = "";
 | |
| 
 | |
|         if (left.type === 'MathExpression' && order[op] < order[left.operator]) {
 | |
|           str += `(${stringify(left, prec)})`;
 | |
|         } else {
 | |
|           str += stringify(left, prec);
 | |
|         }
 | |
| 
 | |
|         str += order[op] ? ` ${node.operator} ` : node.operator;
 | |
| 
 | |
|         if (right.type === 'MathExpression' && order[op] < order[right.operator]) {
 | |
|           str += `(${stringify(right, prec)})`;
 | |
|         } else {
 | |
|           str += stringify(right, prec);
 | |
|         }
 | |
| 
 | |
|         return str;
 | |
|       }
 | |
| 
 | |
|     case 'Number':
 | |
|       return round(node.value, prec);
 | |
| 
 | |
|     case 'Function':
 | |
|       return node.value;
 | |
| 
 | |
|     default:
 | |
|       return round(node.value, prec) + node.unit;
 | |
|   }
 | |
| }
 | |
| 
 | |
| function _default(calc, node, originalValue, options, result, item) {
 | |
|   var str = stringify(node, options.precision);
 | |
|   var shouldPrintCalc = node.type === "MathExpression" || node.type === "Function";
 | |
| 
 | |
|   if (shouldPrintCalc) {
 | |
|     // if calc expression couldn't be resolved to a single value, re-wrap it as
 | |
|     // a calc()
 | |
|     str = `${calc}(${str})`; // if the warnWhenCannotResolve option is on, inform the user that the calc
 | |
|     // expression could not be resolved to a single value
 | |
| 
 | |
|     if (options.warnWhenCannotResolve) {
 | |
|       result.warn("Could not reduce expression: " + originalValue, {
 | |
|         plugin: 'postcss-calc',
 | |
|         node: item
 | |
|       });
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   return str;
 | |
| }
 | |
| 
 | |
| module.exports = exports.default; | 
