UNPKG

motion

Version:

motion - moving development forward

158 lines (117 loc) 5.73 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'); exports['default'] = { enter: function enter(node, parent, scope, file) { var el = node.openingElement; // avoid reprocessing if (node.motionJSXVisits != 2) { var _iterator, _isArray, _i; var _ref; var _ret = (function () { // add index keys for repeat elements if (node.motionJSXVisits == 1) { if (scope.hasBinding('_index')) { el.name.elements.push(_libHelpers.t.identifier('_')); el.name.elements.push(_libHelpers.t.identifier('_index')); } node.motionJSXVisits = 2; return { v: undefined }; } // top level JSX element if (scope.hasOwnBinding('view')) { _state2['default'].viewRootNodes.push(node); } inJSX = true; node.motionJSXVisits = 1; var name = _libHelpers.nodeToNameString(el.name); // ['quotedname', key] var key = undefined; if (_state2['default'].keyBase[name]) key = ++_state2['default'].keyBase[name];else key = _state2['default'].keyBase[name] = 1; var arr = [_libHelpers.t.literal(name), _libHelpers.t.literal(key)]; // track meta if (_state2['default'].meta.views[_state2['default'].currentView]) { _state2['default'].meta.views[_state2['default'].currentView].els[name] = { location: _libHelpers.normalizeLocation(el.loc), key: key }; } /* checks whether user is referencing variable or view check root to see if the variable exists Modal.Footer would have a root of Modal */ // safer, checks for file scope or view scope only var _name$split = name.split('.'); var rootName = _name$split[0]; var children = _name$split.slice(1); var isVariable = (scope.hasOwnBinding(rootName) || file.scope.hasOwnBinding(rootName)) && _libHelpers.isUpperCase(rootName); // either gives <Modal> or <Modal.Header> var getVar = function getVar(rootName, name) { return rootName == name ? _libHelpers.t.identifier(name) : _libHelpers.t.memberExpression(_libHelpers.t.identifier(rootName), _libHelpers.t.identifier(children.join('.'))); }; if (isVariable) arr = [getVar(rootName, name)].concat(arr); el.name = _libHelpers.t.arrayExpression(arr); // process attributes if (!el.attributes) return { v: undefined }; var rpt = _libHelpers.idFn; var iff = _libHelpers.idFn; var route = _libHelpers.idFn; var _loop = function () { if (_isArray) { if (_i >= _iterator.length) return 'break'; _ref = _iterator[_i++]; } else { _i = _iterator.next(); if (_i.done) return 'break'; _ref = _i.value; } var attr = _ref; var attrName = attr.name && attr.name.name; var expr = attr.value && (attr.value.expression || _libHelpers.t.literal(attr.value.value)); if (attrName == 'class' && _libHelpers.isUpperCase(name)) _state2['default'].viewHasChildWithClass = true; if (_libHelpers.options.routing && attrName == 'route') { route = function (_node) { return _libHelpers.t.logicalExpression('&&', _libHelpers.t.callExpression(_libHelpers.t.identifier('Motion.routeMatch'), [expr]), _node); }; // spread routeprops onto route el.attributes.push(_libHelpers.t.JSXSpreadAttribute(_libHelpers.t.callExpression(_libHelpers.t.identifier('Motion.routeParams'), [expr]))); } if (attrName == 'if') { iff = function (_node) { return _libHelpers.t.logicalExpression('&&', _libHelpers.t.callExpression(_libHelpers.t.identifier('Motion.iff'), [expr]), _node); }; } if (attrName == 'repeat') { rpt = function (_node) { // remove repeat from inner node // const opening = _node.openingElement // opening.attributes = opening.attributes.filter(attr => attr.name !== 'repeat') return _libHelpers.t.callExpression(_libHelpers.t.memberExpression(_libHelpers.t.callExpression(_libHelpers.t.identifier('Motion.range'), [expr]), _libHelpers.t.identifier('map')), [_libHelpers.t.functionExpression(null, [_libHelpers.t.identifier('_'), _libHelpers.t.identifier('_index')], _libHelpers.t.blockStatement([_libHelpers.t.returnStatement(_node)]))]); }; } }; for (_iterator = el.attributes, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { var _ret2 = _loop(); if (_ret2 === 'break') break; } // wrap outermost JSX elements (in views) in this.render() var wrap = _libHelpers.idFn; var isDirectChildOfView = scope.hasOwnBinding('view'); if (isDirectChildOfView) wrap = function (node) { return _libHelpers.t.callExpression(_libHelpers.t.identifier('view.render'), [_libHelpers.t.functionExpression(null, [], _libHelpers.t.blockStatement([_libHelpers.t.returnStatement(node)]))]); }; return { v: wrap(iff(route(rpt(node)))) }; })(); if (typeof _ret === 'object') return _ret.v; } } }; module.exports = exports['default'];