| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- 'use strict';
- function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
- var syntaxJsx = _interopDefault(require('babel-plugin-syntax-jsx'));
- var groupEventAttributes = (function (t) {
- return function (obj, attribute) {
- if (t.isJSXSpreadAttribute(attribute)) {
- return obj;
- }
- var isNamespaced = t.isJSXNamespacedName(attribute.get('name'));
- var event = (isNamespaced ? attribute.get('name').get('namespace') : attribute.get('name')).get('name').node;
- var modifiers = isNamespaced ? new Set(attribute.get('name').get('name').get('name').node.split('-')) : new Set();
- if (event.indexOf('on') !== 0) {
- return obj;
- }
- var value = attribute.get('value');
- attribute.remove();
- if (!t.isJSXExpressionContainer(value)) {
- return obj;
- }
- var expression = value.get('expression').node;
- var eventName = event.substr(2);
- if (eventName[0] === '-') {
- eventName = eventName.substr(1);
- }
- eventName = eventName[0].toLowerCase() + eventName.substr(1);
- if (modifiers.has('capture')) {
- eventName = '!' + eventName;
- }
- if (modifiers.has('once')) {
- eventName = '~' + eventName;
- }
- if (!obj[eventName]) {
- obj[eventName] = [];
- }
- obj[eventName].push({ modifiers, expression, attribute });
- return obj;
- };
- });
- var aliases = {
- esc: 27,
- tab: 9,
- enter: 13,
- space: 32,
- up: 38,
- left: 37,
- right: 39,
- down: 40,
- delete: [8, 46]
- };
- var keyModifiers = ['ctrl', 'shift', 'alt', 'meta'];
- var keyCodeRE = /^k(\d{1,})$/;
- var generateBindingBody = (function (t, _ref) {
- var modifiers = _ref.modifiers,
- expression = _ref.expression;
- var callStatement = t.expressionStatement(t.callExpression(expression, [t.identifier('$event'), t.spreadElement(t.identifier('attrs'))]));
- var result = [];
- var conditions = [];
- var keyConditions = [t.unaryExpression('!', t.binaryExpression('in', t.stringLiteral('button'), t.identifier('$event')))];
- modifiers.forEach(function (modifier) {
- if (modifier === 'stop') {
- result.push(t.expressionStatement(t.callExpression(t.memberExpression(t.identifier('$event'), t.identifier('stopPropagation')), [])));
- } else if (modifier === 'prevent') {
- result.push(t.expressionStatement(t.callExpression(t.memberExpression(t.identifier('$event'), t.identifier('preventDefault')), [])));
- } else if (modifier === 'self') {
- conditions.push(t.binaryExpression('!==', t.memberExpression(t.identifier('$event'), t.identifier('target')), t.memberExpression(t.identifier('$event'), t.identifier('currentTarget'))));
- } else if (keyModifiers.includes(modifier)) {
- conditions.push(t.unaryExpression('!', t.memberExpression(t.identifier('$event'), t.identifier(`${modifier}Key`))));
- } else if (modifier === 'bare') {
- conditions.push(keyModifiers.filter(function (keyModifier) {
- return !modifiers.has(keyModifier);
- }).map(function (keyModifier) {
- return t.memberExpression(t.identifier('$event'), t.identifier(`${keyModifier}Key`));
- }).reduce(function (leftCondition, rightCondition) {
- return t.logicalExpression('||', leftCondition, rightCondition);
- }));
- } else if (aliases[modifier]) {
- keyConditions.push(t.callExpression(t.memberExpression(t.thisExpression(), t.identifier('_k')), [t.memberExpression(t.identifier('$event'), t.identifier('keyCode')), t.stringLiteral(modifier), Array.isArray(aliases[modifier]) ? t.arrayExpression(aliases[modifier].map(function (el) {
- return t.numericLiteral(el);
- })) : t.numericLiteral(aliases[modifier])]));
- } else if (modifier.match(keyCodeRE)) {
- var keyCode = +modifier.match(keyCodeRE)[1];
- keyConditions.push(t.binaryExpression('!==', t.memberExpression(t.identifier('$event'), t.identifier('keyCode')), t.numericLiteral(keyCode)));
- }
- });
- if (keyConditions.length > 1) {
- conditions.push(keyConditions.reduce(function (leftCondition, rightCondition) {
- return t.logicalExpression('&&', leftCondition, rightCondition);
- }));
- }
- if (conditions.length > 0) {
- result.push(t.ifStatement(conditions.reduce(function (leftCondition, rightCondition) {
- return t.logicalExpression('||', leftCondition, rightCondition);
- }), t.returnStatement(t.nullLiteral())));
- }
- result.push(callStatement);
- return result;
- });
- var generateBindingsList = (function (t, bindings) {
- return bindings.map(function (binding) {
- return t.arrowFunctionExpression([t.identifier('$event'), t.restElement(t.identifier('attrs'))], t.blockStatement(generateBindingBody(t, binding)));
- });
- });
- 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 generateSpreadEvent = (function (t) {
- return function (_ref) {
- var _ref2 = _slicedToArray(_ref, 2),
- event = _ref2[0],
- bindings = _ref2[1];
- var callbacks = generateBindingsList(t, bindings);
- return t.objectProperty(t.stringLiteral(event), callbacks.length === 1 ? callbacks[0] : t.arrayExpression(callbacks));
- };
- });
- var index = (function (_ref) {
- var t = _ref.types;
- return {
- inherits: syntaxJsx,
- visitor: {
- Program(path) {
- path.traverse({
- JSXOpeningElement(path) {
- var attributes = path.get('attributes');
- var groupedEventAttributes = attributes.reduce(groupEventAttributes(t), {});
- var events = Object.keys(groupedEventAttributes).map(function (key) {
- return [key, groupedEventAttributes[key]];
- });
- if (events.length > 0) {
- path.pushContainer('attributes', t.jSXSpreadAttribute(t.objectExpression([t.objectProperty(t.identifier('on'), t.objectExpression(events.map(generateSpreadEvent(t))))])));
- }
- }
- });
- }
- }
- };
- });
- module.exports = index;
|