You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							88 lines
						
					
					
						
							1.9 KiB
						
					
					
				
			
		
		
	
	
							88 lines
						
					
					
						
							1.9 KiB
						
					
					
				var override = require('../utils/override'); | 
						|
 | 
						|
var INTEGER_PATTERN = /^\d+$/; | 
						|
 | 
						|
var ALL_UNITS = ['*', 'all']; | 
						|
var DEFAULT_PRECISION = 'off'; // all precision changes are disabled | 
						|
var DIRECTIVES_SEPARATOR = ','; // e.g. *=5,px=3 | 
						|
var DIRECTIVE_VALUE_SEPARATOR = '='; // e.g. *=5 | 
						|
 | 
						|
function roundingPrecisionFrom(source) { | 
						|
  return override(defaults(DEFAULT_PRECISION), buildPrecisionFrom(source)); | 
						|
} | 
						|
 | 
						|
function defaults(value) { | 
						|
  return { | 
						|
    'ch': value, | 
						|
    'cm': value, | 
						|
    'em': value, | 
						|
    'ex': value, | 
						|
    'in': value, | 
						|
    'mm': value, | 
						|
    'pc': value, | 
						|
    'pt': value, | 
						|
    'px': value, | 
						|
    'q': value, | 
						|
    'rem': value, | 
						|
    'vh': value, | 
						|
    'vmax': value, | 
						|
    'vmin': value, | 
						|
    'vw': value, | 
						|
    '%': value | 
						|
  }; | 
						|
} | 
						|
 | 
						|
function buildPrecisionFrom(source) { | 
						|
  if (source === null || source === undefined) { | 
						|
    return {}; | 
						|
  } | 
						|
 | 
						|
  if (typeof source == 'boolean') { | 
						|
    return {}; | 
						|
  } | 
						|
 | 
						|
  if (typeof source == 'number' && source == -1) { | 
						|
    return defaults(DEFAULT_PRECISION); | 
						|
  } | 
						|
 | 
						|
  if (typeof source == 'number') { | 
						|
    return defaults(source); | 
						|
  } | 
						|
 | 
						|
  if (typeof source == 'string' && INTEGER_PATTERN.test(source)) { | 
						|
    return defaults(parseInt(source)); | 
						|
  } | 
						|
 | 
						|
  if (typeof source == 'string' && source == DEFAULT_PRECISION) { | 
						|
    return defaults(DEFAULT_PRECISION); | 
						|
  } | 
						|
 | 
						|
  if (typeof source == 'object') { | 
						|
    return source; | 
						|
  } | 
						|
 | 
						|
  return source | 
						|
    .split(DIRECTIVES_SEPARATOR) | 
						|
    .reduce(function (accumulator, directive) { | 
						|
      var directiveParts = directive.split(DIRECTIVE_VALUE_SEPARATOR); | 
						|
      var name = directiveParts[0]; | 
						|
      var value = parseInt(directiveParts[1]); | 
						|
 | 
						|
      if (isNaN(value) || value == -1) { | 
						|
        value = DEFAULT_PRECISION; | 
						|
      } | 
						|
 | 
						|
      if (ALL_UNITS.indexOf(name) > -1) { | 
						|
        accumulator = override(accumulator, defaults(value)); | 
						|
      } else { | 
						|
        accumulator[name] = value; | 
						|
      } | 
						|
 | 
						|
      return accumulator; | 
						|
    }, {}); | 
						|
} | 
						|
 | 
						|
module.exports = { | 
						|
  DEFAULT: DEFAULT_PRECISION, | 
						|
  roundingPrecisionFrom: roundingPrecisionFrom | 
						|
};
 | 
						|
 |