Spaces:
Sleeping
Sleeping
| 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 (Number.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 | |
| }; | |