UNPKG

motion

Version:

motion - moving development forward

113 lines (84 loc) 4.54 kB
exports.__esModule = true; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var _state = require('../state'); var _state2 = _interopRequireDefault(_state); var _libHelpers = require('../lib/helpers'); var _motionNiceStyles = require('motion-nice-styles'); var _motionNiceStyles2 = _interopRequireDefault(_motionNiceStyles); var _stilr = require('../stilr'); var _stilr2 = _interopRequireDefault(_stilr); exports['default'] = { exit: function exit(node) { if (node._motionViewParsed) return; // avoid parsing twice if (_state2['default'].inView && node.expression && node.expression.callee && node.expression.callee.name == 'Motion.view') { var _ret = (function () { var getSelector = function getSelector(viewName, tag) { var cleanViewName = viewName.replace('.', '-'); tag = tag.replace(/^\$/, ''); // styling root tag if (shouldStyleTagnameAsRoot && tag == _state2['default'].inView.toLowerCase() || tag == '') return _libHelpers.viewMainSelector(cleanViewName, _libHelpers.options); // styling child view if (tag[0] == tag[0].toUpperCase()) return _libHelpers.viewMainSelector(cleanViewName + ' .View' + tag, _libHelpers.options); // styling tag in view return _libHelpers.viewSelector(cleanViewName, tag, _libHelpers.options); }; node._motionViewParsed = true; // check if child tag is direct root var shouldStyleTagnameAsRoot = _libHelpers.shouldStyleAsRoot(); var viewName = _state2['default'].inView; var styles = _state2['default'].viewStyles[viewName]; if (!styles) return { v: undefined }; var rawStyles = {}; // turns styles babel tree into js again Object.keys(styles).forEach(function (tag) { var styleProps = styles[tag]; var viewstyle = styleProps.reduce(function (acc, cur) { // TODO this is way specific to what we extract // there should be a way to turn AST back into code here without rewriting babel itself acc[cur.key.name] = _libHelpers.t.isArrayExpression(cur.value) ? cur.value.elements.map(function (e) { return e.value; }) : _libHelpers.t.isUnaryExpression(cur.value) ? (cur.value.operator === '-' ? -1 : 1) * cur.value.argument.value : cur.value.value; return acc; }, {}); _motionNiceStyles2['default'](viewstyle); rawStyles[tag] = viewstyle; }); var stylesheet = _stilr2['default'].create(rawStyles, { selector: function selector(tag) { return getSelector(viewName, tag); } }); var classNamesObject = _libHelpers.t.objectExpression(Object.keys(stylesheet).reduce(function (acc, key) { acc.push(_libHelpers.t.property(null, _libHelpers.t.literal(key), _libHelpers.t.literal(stylesheet[key]))); return acc; }, [])); if (_libHelpers.options.writeStyle) _libHelpers.options.writeStyle(viewName, _stilr2['default'].render()); _stilr2['default'].clear(); // inline the static styles as js object for use when needing to override dynamics var stylesObject = _libHelpers.t.objectExpression(Object.keys(styles).reduce(function (acc, key) { acc.push(_libHelpers.t.property(null, _libHelpers.t.literal(key), _libHelpers.t.objectExpression(styles[key]))); return acc; }, [])); // Motion.staticStyles('ViewName', {}, ``) var staticStyleExpr = _libHelpers.t.expressionStatement(_libHelpers.t.callExpression(_libHelpers.t.identifier('Motion.staticStyles'), [_libHelpers.t.literal(viewName), classNamesObject, stylesObject])); // Motion.viewRoots["Name"] = "RootElementName" if (_libHelpers.shouldStyleAsRoot()) { var viewRootNodeExpr = _libHelpers.t.expressionStatement(_libHelpers.t.assignmentExpression('=', _libHelpers.t.identifier('Motion.viewRoots["' + viewName + '"]'), _libHelpers.t.literal(_libHelpers.getRootTagName()))); return { v: [staticStyleExpr, viewRootNodeExpr, node] }; } // reset _state2['default'].inView = false; _state2['default'].viewStyles[viewName] = {}; return { v: [staticStyleExpr, node] }; })(); if (typeof _ret === 'object') return _ret.v; } } }; module.exports = exports['default'];