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.
StackGenVis/frontend/node_modules/@interactjs/actions/gesture.js

153 lines
4.3 KiB

4 years ago
import InteractEvent from "../core/InteractEvent.js";
import { ActionName } from "../core/scope.js";
import * as utils from "../utils/index.js";
ActionName.Gesture = 'gesture';
function install(scope) {
const {
actions,
Interactable,
defaults
} = scope;
/**
* ```js
* interact(element).gesturable({
* onstart: function (event) {},
* onmove : function (event) {},
* onend : function (event) {},
*
* // limit multiple gestures.
* // See the explanation in {@link Interactable.draggable} example
* max: Infinity,
* maxPerElement: 1,
* })
*
* var isGestureable = interact(element).gesturable()
* ```
*
* Gets or sets whether multitouch gestures can be performed on the target
*
* @param {boolean | object} [options] true/false or An object with event
* listeners to be fired on gesture events (makes the Interactable gesturable)
* @return {boolean | Interactable} A boolean indicating if this can be the
* target of gesture events, or this Interactable
*/
Interactable.prototype.gesturable = function (options) {
if (utils.is.object(options)) {
this.options.gesture.enabled = options.enabled !== false;
this.setPerAction(ActionName.Gesture, options);
this.setOnEvents(ActionName.Gesture, options);
return this;
}
if (utils.is.bool(options)) {
this.options.gesture.enabled = options;
return this;
}
return this.options.gesture;
};
actions[ActionName.Gesture] = gesture;
actions.names.push(ActionName.Gesture);
utils.arr.merge(actions.eventTypes, ['gesturestart', 'gesturemove', 'gestureend']);
actions.methodDict.gesture = 'gesturable';
defaults.actions.gesture = gesture.defaults;
}
function updateGestureProps({
interaction,
iEvent,
event,
phase
}) {
if (interaction.prepared.name !== 'gesture') {
return;
}
const pointers = interaction.pointers.map(p => p.pointer);
const starting = phase === 'start';
const ending = phase === 'end';
const deltaSource = interaction.interactable.options.deltaSource;
iEvent.touches = [pointers[0], pointers[1]];
if (starting) {
iEvent.distance = utils.pointer.touchDistance(pointers, deltaSource);
iEvent.box = utils.pointer.touchBBox(pointers);
iEvent.scale = 1;
iEvent.ds = 0;
iEvent.angle = utils.pointer.touchAngle(pointers, deltaSource);
iEvent.da = 0;
interaction.gesture.startDistance = iEvent.distance;
interaction.gesture.startAngle = iEvent.angle;
} else if (ending || event instanceof InteractEvent) {
const prevEvent = interaction.prevEvent;
iEvent.distance = prevEvent.distance;
iEvent.box = prevEvent.box;
iEvent.scale = prevEvent.scale;
iEvent.ds = 0;
iEvent.angle = prevEvent.angle;
iEvent.da = 0;
} else {
iEvent.distance = utils.pointer.touchDistance(pointers, deltaSource);
iEvent.box = utils.pointer.touchBBox(pointers);
iEvent.scale = iEvent.distance / interaction.gesture.startDistance;
iEvent.angle = utils.pointer.touchAngle(pointers, deltaSource);
iEvent.ds = iEvent.scale - interaction.gesture.scale;
iEvent.da = iEvent.angle - interaction.gesture.angle;
}
interaction.gesture.distance = iEvent.distance;
interaction.gesture.angle = iEvent.angle;
if (utils.is.number(iEvent.scale) && iEvent.scale !== Infinity && !isNaN(iEvent.scale)) {
interaction.gesture.scale = iEvent.scale;
}
}
const gesture = {
id: 'actions/gesture',
before: ['actions/drag', 'actions/resize'],
install,
listeners: {
'interactions:action-start': updateGestureProps,
'interactions:action-move': updateGestureProps,
'interactions:action-end': updateGestureProps,
'interactions:new': ({
interaction
}) => {
interaction.gesture = {
angle: 0,
distance: 0,
scale: 1,
startAngle: 0,
startDistance: 0
};
},
'auto-start:check': arg => {
if (arg.interaction.pointers.length < 2) {
return undefined;
}
const gestureOptions = arg.interactable.options.gesture;
if (!(gestureOptions && gestureOptions.enabled)) {
return undefined;
}
arg.action = {
name: ActionName.Gesture
};
return false;
}
},
defaults: {},
getCursor() {
return '';
}
};
export default gesture;
//# sourceMappingURL=gesture.js.map