StackGenVis: Alignment of Data, Algorithms, and Models for Stacking Ensemble Learning Using Performance Metrics
https://doi.org/10.1109/TVCG.2020.3030352
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
162 lines
6.3 KiB
162 lines
6.3 KiB
'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;
|
|
|