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.
|
|
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 };
|