motion
Version:
motion - moving development forward
157 lines (112 loc) • 4.67 kB
JavaScript
exports.__esModule = true;
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var _objectToCss = require('object-to-css');
var _objectToCss2 = _interopRequireDefault(_objectToCss);
var _utils = require('./utils');
var globalStylesheet = new Map();
exports['default'] = {
create: function create(styles) {
var stylesheet = arguments.length <= 1 || arguments[1] === undefined ? globalStylesheet : arguments[1];
var options = undefined;
if (!(stylesheet instanceof Map)) {
// options passed instead
options = stylesheet;
stylesheet = globalStylesheet;
if (options.selector) stylesheet.customTags = true;
}
if (!(stylesheet instanceof Map)) throw new Error(stylesheet + ' should be a Map');
return Object.keys(styles).reduce(function (acc, key) {
var _seperateStyles = _utils.seperateStyles(options, key, styles[key]);
var style = _seperateStyles.style;
var pseudos = _seperateStyles.pseudos;
var mediaQueries = _seperateStyles.mediaQueries;
var className = _utils.createClassName(options, key, _utils.sortObject(style));
if (className === undefined) {
acc[key] = '';
return acc;
}
if (!stylesheet.has(className)) stylesheet.set(className, style);
if (pseudos.length) {
pseudos.map(function (selector) {
delete style[selector];
var pseudoClassName = '.' + className + selector;
if (stylesheet.has(pseudoClassName)) return false;
stylesheet.set(pseudoClassName, styles[key][selector]);
});
}
if (mediaQueries.length) {
mediaQueries.map(function (selector) {
var mqSelector = selector;
var mqStyles = styles[key][selector];
var mqPseudos = [];
var mqStylesheet = undefined;
if (Array.isArray(selector)) {
var main = selector[0];
var _styles = selector[1];
var rest = selector.slice(2);
mqSelector = main;
mqPseudos = rest;
mqStyles = _styles;
}
delete style[mqSelector];
if (stylesheet.has(mqSelector)) {
mqStylesheet = stylesheet.get(mqSelector);
if (mqStylesheet.has(className)) return false;
}
mqStylesheet = mqStylesheet || stylesheet.set(mqSelector, new Map()).get(mqSelector);
mqStylesheet.set(className, mqStyles);
if (mqPseudos.length) {
mqPseudos.map(function (pseudo) {
delete mqStyles[pseudo];
var pseudoClassName = '' + className + pseudo;
if (mqStylesheet.has(pseudoClassName)) return false;
mqStylesheet.set(pseudoClassName, styles[key][mqSelector][pseudo]);
});
}
});
}
acc[key] = className;
return acc;
}, {});
},
render: function render() {
var options = arguments.length <= 0 || arguments[0] === undefined ? { pretty: false } : arguments[0];
var stylesheet = arguments.length <= 1 || arguments[1] === undefined ? globalStylesheet : arguments[1];
var stylesheetEntries = stylesheet.entries();
var css = '';
var mediaQueries = '';
for (var _iterator = stylesheetEntries, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
var _ref;
if (_isArray) {
if (_i >= _iterator.length) break;
_ref = _iterator[_i++];
} else {
_i = _iterator.next();
if (_i.done) break;
_ref = _i.value;
}
var entry = _ref;
var className = entry[0];
var styles = entry[1];
var isMap = styles instanceof Map;
if (!isMap && _utils.isEmpty(styles)) continue;
if (isMap) {
var mediaQueryCSS = this.render(options, stylesheet.get(className));
mediaQueries += options.pretty ? className + ' {\n' + mediaQueryCSS + '}\n' : className + '{' + mediaQueryCSS + '}';
continue;
}
var markup = _objectToCss2['default'](styles);
var prefix = stylesheet.customTags ? '' : '.';
css += options.pretty ? '' + prefix + className + ' {\n' + markup.split(';').join(';\n') + '}\n' : '' + prefix + className + '{' + markup + '}';
}
return css + mediaQueries;
},
clear: function clear() {
var stylesheet = arguments.length <= 0 || arguments[0] === undefined ? globalStylesheet : arguments[0];
stylesheet.clear();
return !stylesheet.size;
},
Map: Map,
__stylesheet: globalStylesheet
};
module.exports = exports['default'];