UNPKG

motion

Version:

motion - moving development forward

139 lines (111 loc) 3.52 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.sortObject = sortObject; exports.createHash = createHash; exports.stringifyObject = stringifyObject; exports.extendedToString = extendedToString; exports.createClassName = createClassName; exports.isEmpty = isEmpty; exports.isPseudo = isPseudo; exports.isMediaQuery = isMediaQuery; exports.seperateStyles = seperateStyles; function sortObject(obj) { return Object.keys(obj).sort().reduce((acc, key) => { const val = obj[key]; if (val || val === 0) acc[key] = val; return acc; }, {}); } function createHash(str) { let i = str.length; if (i === 0) return 0; let hash = 5381; while (i) hash = hash * 33 ^ str.charCodeAt(--i); return hash >>> 0; } function stringifyObject(obj) { const keys = Object.keys(obj); let str = ''; for (let i = 0, len = keys.length; i < len; i++) { str += keys[i] + obj[keys[i]]; } return str; } const SYMBOL_SET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split(''); function extendedToString(num, base) { let conversion = ''; if (base > SYMBOL_SET.length || base <= 1 || !Number.isInteger(base)) throw new Error(`${ base } should be an integer between 1 and ${ SYMBOL_SET.length }`); while (num >= 1) { conversion = SYMBOL_SET[num - base * Math.floor(num / base)] + conversion; num = Math.floor(num / base); } return base < 11 ? parseInt(conversion) : conversion; } function createClassName(options, tag, obj) { if (options && options.selector) { return options.selector(tag); } const hash = extendedToString(createHash(stringifyObject(obj)), 62); return hash ? '_' + hash : undefined; } function isEmpty(obj) { return !Object.keys(obj).length; } const pseudos = { active: ':active', hover: ':hover', focus: ':focus', link: ':link', visited: ':visited', checked: ':checked', disabled: ':disabled', empty: ':empty', invalid: ':invalid' }; function isPseudo(_ref) { let style = _ref.style; let rule = _ref.rule; return (rule.charAt(0) === ':' || pseudos[rule]) && typeof style === 'object'; } function isMediaQuery(_ref2) { let style = _ref2.style; let rule = _ref2.rule; return rule.charAt(0) === '@' && typeof style === 'object'; } function handle(options, tag, type, acc, _ref3) { let style = _ref3.style; let rule = _ref3.rule; let pseudos = arguments.length <= 5 || arguments[5] === undefined ? [] : arguments[5]; const hash = createClassName(options, tag, sortObject(style)); const rules = pseudos.length ? [[].concat(rule, style, pseudos)] : rule; acc[type] = acc[type].concat(rules); acc.style[rule] = hash; return acc; } function seperateStyles(options, tag, styles) { return Object.keys(styles).reduce((acc, rule) => { const content = { style: styles[rule] === '' ? 'auto' : styles[rule], rule }; if (isPseudo(content)) { if (pseudos[rule]) content.rule = pseudos[rule]; // translate to :active return handle(options, tag, 'pseudos', acc, content); } if (isMediaQuery(content)) { var _seperateStyles = seperateStyles(options, tag, content.style); const style = _seperateStyles.style; const pseudos = _seperateStyles.pseudos; return handle(options, tag, 'mediaQueries', acc, { rule, style }, pseudos); } acc.style[rule] = content.style; return acc; }, { style: {}, pseudos: [], mediaQueries: [] }); } //# sourceMappingURL=utils.js.map