@logicflow/core
Version:
LogicFlow, help you quickly create flowcharts
178 lines (177 loc) • 7.04 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
import { isEmpty } from 'lodash-es';
import { map } from 'lodash-es';
var selected = null;
export function translateNodeData(nodeData, distance) {
nodeData.x += distance;
nodeData.y += distance;
if (!isEmpty(nodeData.text)) {
nodeData.text.x += distance;
nodeData.text.y += distance;
}
return nodeData;
}
export function translateEdgeData(edgeData, distance) {
if (edgeData.startPoint) {
edgeData.startPoint.x += distance;
edgeData.startPoint.y += distance;
}
if (edgeData.endPoint) {
edgeData.endPoint.x += distance;
edgeData.endPoint.y += distance;
}
if (edgeData.pointsList && edgeData.pointsList.length > 0) {
edgeData.pointsList.forEach(function (point) {
point.x += distance;
point.y += distance;
});
}
if (!isEmpty(edgeData.text)) {
edgeData.text.x += distance;
edgeData.text.y += distance;
}
return edgeData;
}
export function transformNodeData(nodeData, distance) {
var x = nodeData.x, y = nodeData.y, text = nodeData.text;
// 重新计算 text 的位置,保证粘贴后 text 位置和复制的原节点相对位置一致
var nextText = text
? {
x: text.x + distance,
y: text.y + distance,
value: text.value,
}
: undefined;
return __assign(__assign({}, nodeData), { id: '', x: x + distance, y: y + distance, text: nextText });
}
export function transformEdgeData(edgeData, distance) {
var startPoint = edgeData.startPoint, endPoint = edgeData.endPoint, pointsList = edgeData.pointsList, text = edgeData.text, edgeConfig = __rest(edgeData
// 清除原始边的 id
, ["startPoint", "endPoint", "pointsList", "text"]);
// 清除原始边的 id
edgeConfig.id = '';
// 重新计算边的位置,包括 startPoint、endPoint、pointsList 以及 text
// TODO: 看这个是否可以提出一个通用方法,用于重新计算边的位置
var nextStartPoint = {
x: startPoint.x + distance,
y: startPoint.y + distance,
};
var nextEndPoint = {
x: endPoint.x + distance,
y: endPoint.y + distance,
};
var newPointsList = map(pointsList, function (point) {
return {
x: point.x + distance,
y: point.y + distance,
};
});
var nextText = text
? __assign(__assign({}, text), { x: text.x + distance, y: text.y + distance }) : undefined;
return __assign(__assign({}, edgeConfig), { startPoint: nextStartPoint, endPoint: nextEndPoint, pointsList: newPointsList, text: nextText });
}
var TRANSLATION_DISTANCE = 40;
var CHILDREN_TRANSLATION_DISTANCE = 40;
export function initDefaultShortcut(lf, graph) {
var keyboard = lf.keyboard;
var keyboardOptions = keyboard.options.keyboard;
// 复制
keyboard.on(['cmd + c', 'ctrl + c'], function () {
CHILDREN_TRANSLATION_DISTANCE = TRANSLATION_DISTANCE;
if (!(keyboardOptions === null || keyboardOptions === void 0 ? void 0 : keyboardOptions.enabled))
return true;
if (graph.textEditElement)
return true;
var guards = lf.options.guards;
var elements = graph.getSelectElements(false);
var enabledClone = guards && guards.beforeClone ? guards.beforeClone(elements) : true;
if (!enabledClone ||
(elements.nodes.length === 0 && elements.edges.length === 0)) {
selected = null;
return true;
}
selected = elements;
selected.nodes.forEach(function (node) {
return translateNodeData(node, TRANSLATION_DISTANCE);
});
selected.edges.forEach(function (edge) {
return translateEdgeData(edge, TRANSLATION_DISTANCE);
});
return false;
});
// 粘贴
keyboard.on(['cmd + v', 'ctrl + v'], function () {
if (!(keyboardOptions === null || keyboardOptions === void 0 ? void 0 : keyboardOptions.enabled))
return true;
if (graph.textEditElement)
return true;
if (selected && (selected.nodes || selected.edges)) {
lf.clearSelectElements();
var addElements = lf.addElements(selected, CHILDREN_TRANSLATION_DISTANCE);
if (!addElements)
return true;
addElements.nodes.forEach(function (node) { return lf.selectElementById(node.id, true); });
addElements.edges.forEach(function (edge) { return lf.selectElementById(edge.id, true); });
selected.nodes.forEach(function (node) {
return translateNodeData(node, TRANSLATION_DISTANCE);
});
selected.edges.forEach(function (edge) {
return translateEdgeData(edge, TRANSLATION_DISTANCE);
});
CHILDREN_TRANSLATION_DISTANCE =
CHILDREN_TRANSLATION_DISTANCE + TRANSLATION_DISTANCE;
}
return false;
});
// undo
keyboard.on(['cmd + z', 'ctrl + z'], function () {
if (!(keyboardOptions === null || keyboardOptions === void 0 ? void 0 : keyboardOptions.enabled))
return true;
if (graph.textEditElement)
return true;
lf.undo();
return false;
});
// redo
keyboard.on(['cmd + y', 'ctrl + y'], function () {
if (!(keyboardOptions === null || keyboardOptions === void 0 ? void 0 : keyboardOptions.enabled))
return true;
if (graph.textEditElement)
return true;
lf.redo();
return false;
});
// delete
keyboard.on(['backspace'], function () {
if (!(keyboardOptions === null || keyboardOptions === void 0 ? void 0 : keyboardOptions.enabled))
return true;
if (graph.textEditElement)
return true;
var elements = graph.getSelectElements(true);
lf.clearSelectElements();
elements.edges.forEach(function (edge) { return edge.id && lf.deleteEdge(edge.id); });
elements.nodes.forEach(function (node) { return node.id && lf.deleteNode(node.id); });
return false;
});
}