understyle
Version:
Functional style utilities for authoring JavaScript style objects
102 lines (77 loc) • 2.97 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.isColor = exports.parseNumberValue = undefined;
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
var _util = require('./util');
var convert = function convert(config) {
return function (rawProps) {
var props = (0, _util.objToArr)(rawProps).map(parseProp(config)).reduce(_util.toObj, {});
return props;
};
};
var MP_REG = /^[mp][trblxy]?-?\d$/;
var FS_REG = /^[h]\d$/;
var ALIGN_REG = /^(left|center|right|justify)$/;
var DISPLAY_REG = /^(block|inlineBlock|inline|table|tableRow|tableCell|flex|inlineFlex)$/;
var parseProp = function parseProp(config) {
return function (_ref) {
var key = _ref.key,
value = _ref.value;
var colors = config.colors;
if (value !== true) {
return { key: key, value: value };
}
if (MP_REG.test(key)) {
return parseNumberValue(key);
}
if (FS_REG.test(key)) {
var _value = parseInt(key.replace(/^h/, ''));
return {
key: 'fontSize', value: _value
};
}
if (ALIGN_REG.test(key)) {
return {
key: 'align',
value: key
};
}
if (DISPLAY_REG.test(key)) {
return { display: (0, _util.hyphenate)(key) };
}
if (isColor(colors)(key)) {
var colorValue = key.replace(/^(bg|border)/, '').toLowerCase();
if (/^bg/.test(key)) {
return { key: 'backgroundColor', value: colorValue };
}
if (/^border/.test(key)) {
return { key: 'borderColor', value: colorValue };
}
return { key: 'color', value: colorValue };
}
return { key: key, value: value };
};
};
var parseNumberValue = exports.parseNumberValue = function parseNumberValue(key) {
var _key$match = key.match(/\d/),
_key$match2 = _slicedToArray(_key$match, 1),
num = _key$match2[0];
var isNegative = /-/.test(key);
var _key$match3 = key.match(/^[a-z]+/),
_key$match4 = _slicedToArray(_key$match3, 1),
prop = _key$match4[0];
var value = isNegative ? -parseInt(num) : parseInt(num);
return {
key: prop,
value: value
};
};
var isColor = exports.isColor = function isColor(colors) {
return function (key) {
var name = key.replace(/^(bg|border)/, '').toLowerCase();
return !!colors[name];
};
};
exports.default = convert;
;