UNPKG

jss-default-unit

Version:

JSS plugin that adds default custom unit to numeric values where needed

103 lines (83 loc) 2.79 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; exports['default'] = defaultUnit; var _defaultUnits = require('./defaultUnits'); var _defaultUnits2 = _interopRequireDefault(_defaultUnits); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } /** * Clones the object and adds a camel cased property version. */ function addCamelCasedVersion(obj) { var regExp = /(-[a-z])/g; var replace = function replace(str) { return str[1].toUpperCase(); }; var newObj = {}; for (var key in obj) { newObj[key] = obj[key]; newObj[key.replace(regExp, replace)] = obj[key]; } return newObj; } var units = addCamelCasedVersion(_defaultUnits2['default']); /** * Recursive deep style passing function * * @param {String} current property * @param {(Object|Array|Number|String)} property value * @param {Object} options * @return {(Object|Array|Number|String)} resulting value */ function iterate(prop, value, options) { if (!value) return value; var convertedValue = value; var type = typeof value === 'undefined' ? 'undefined' : _typeof(value); if (type === 'object' && Array.isArray(value)) type = 'array'; switch (type) { case 'object': if (prop === 'fallbacks') { for (var innerProp in value) { value[innerProp] = iterate(innerProp, value[innerProp], options); } break; } for (var _innerProp in value) { value[_innerProp] = iterate(prop + '-' + _innerProp, value[_innerProp], options); } break; case 'array': for (var i = 0; i < value.length; i++) { value[i] = iterate(prop, value[i], options); } break; case 'number': if (value !== 0) { convertedValue = value + (options[prop] || units[prop] || ''); } break; default: break; } return convertedValue; } /** * Add unit to numeric values. */ function defaultUnit() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var camelCasedOptions = addCamelCasedVersion(options); function onProcessStyle(style, rule) { if (rule.type !== 'style') return style; for (var prop in style) { style[prop] = iterate(prop, style[prop], camelCasedOptions); } return style; } function onChangeValue(value, prop) { return iterate(prop, value, camelCasedOptions); } return { onProcessStyle: onProcessStyle, onChangeValue: onChangeValue }; }