UNPKG

@antv/g6-pc

Version:

A Graph Visualization Framework in JavaScript

198 lines (197 loc) 6.31 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _tslib = require("tslib"); var _util = require("@antv/util"); var DEFAULT_TRIGGER = 'click'; var ALLOW_EVENTS = ['click', 'drag']; var DEFAULT_KEY = undefined; var ALLOW_KEYS = ['shift', 'ctrl', 'control', 'alt', 'meta', undefined]; var _default = exports.default = { getDefaultCfg: function getDefaultCfg() { return { trigger: DEFAULT_TRIGGER, key: DEFAULT_KEY, edgeConfig: {}, getEdgeConfig: undefined }; }, getEvents: function getEvents() { var self = this; // 检测输入是否合法 if (!(ALLOW_EVENTS.indexOf(self.trigger.toLowerCase()) > -1)) { self.trigger = DEFAULT_TRIGGER; // eslint-disable-next-line no-console console.warn("Behavior create-edge 的 trigger 参数不合法,请输入 'click','drag'"); } if (self.key && ALLOW_KEYS.indexOf(self.key.toLowerCase()) === -1) { self.trigger = DEFAULT_KEY; // eslint-disable-next-line no-console console.warn("Behavior create-edge 的 key 参数不合法,请输入 'shift','ctrl','alt','control',或 undefined"); } var events; if (self.trigger === 'drag') { events = { 'node:dragstart': 'onClick', 'combo:dragstart': 'onClick', drag: 'updateEndPoint', 'node:drop': 'onClick', 'combo:drop': 'onClick', dragend: 'onDragEnd' }; } else if (self.trigger === 'click') { events = { 'node:click': 'onClick', mousemove: 'updateEndPoint', 'edge:click': 'cancelCreating', 'canvas:click': 'cancelCreating', 'combo:click': 'onClick' }; } if (self.key) { events.keydown = 'onKeyDown'; events.keyup = 'onKeyUp'; } return events; }, onDragEnd: function onDragEnd(ev) { var self = this; if (self.key && !self.keydown) return; var item = ev.item; if (!item || item.getID() === self.source || item.getType() !== 'node') self.cancelCreating({ item: self.edge, x: ev.x, y: ev.y }); }, // 如果边的起点没有指定,则根据起点创建新边;如果起点已经指定而终点未指定,则指定终点 onClick: function onClick(ev) { var self = this; if (self.key && !self.keydown) return; var node = ev.item; var graph = self.graph; var model = node.getModel(); var getEdgeConfig = self.getEdgeConfig; // 如果起点已经指定而终点未指定,则指定终点 if (self.addingEdge && self.edge) { if (!self.shouldEnd(ev, self)) return; var edgeConfig = void 0; if (getEdgeConfig && (0, _util.isFunction)(getEdgeConfig)) { edgeConfig = getEdgeConfig({ source: self.source, target: model.id }, self); } else { edgeConfig = self.edgeConfig; } var updateCfg = (0, _tslib.__assign)({ target: model.id }, edgeConfig); if (self.source === model.id) { updateCfg.type = 'loop'; } graph.emit('beforecreateedge', {}); graph.updateItem(self.edge, updateCfg, false); if (graph.get('enabledStack')) { var addedModel = (0, _tslib.__assign)((0, _tslib.__assign)({}, self.edge.getModel()), { itemType: 'edge' }); var after = {}; after.edges = [addedModel]; graph.pushStack('add', { before: {}, after: after }); } graph.emit('aftercreateedge', { edge: self.edge }); // 暂时将该边的 capture 恢复为 true self.edge.getKeyShape().set('capture', true); self.edge = null; self.addingEdge = false; } else { // 如果边的起点没有指定,则根据起点创建新边 if (!self.shouldBegin(ev, self)) return; // 获取自定义 edge 配置 var edgeConfig = void 0; if (getEdgeConfig && (0, _util.isFunction)(getEdgeConfig)) { edgeConfig = getEdgeConfig({ source: model.id, target: model.id }, self); } else { edgeConfig = self.edgeConfig; } self.edge = graph.addItem('edge', (0, _tslib.__assign)({ source: model.id, target: model.id }, edgeConfig), false); self.source = model.id; self.addingEdge = true; // 暂时将该边的 capture 设置为 false,这样可以拾取到后面的元素 self.edge.getKeyShape().set('capture', false); } }, // 边的起点已经确定,边的末端跟随鼠标移动 updateEndPoint: function updateEndPoint(ev) { var self = this; if (self.key && !self.keydown) return; if (self.edge && self.edge.destroyed) self.cancelCreating({ item: self.edge }); var point = { x: ev.x, y: ev.y }; // 若此时 source 节点已经被移除,结束添加边 if (!self.graph.findById(self.source)) { self.addingEdge = false; return; } if (self.addingEdge && self.edge) { // 更新边的终点为鼠标位置 self.graph.updateItem(self.edge, { target: point }, false); } }, // 取消增加边,删除该边;或指定终点 cancelCreating: function cancelCreating(ev) { var _a, _b; var self = this; if (self.key && !self.keydown) return; var graph = self.graph; var currentEdge = ev.item; if (self.addingEdge && (self.edge === currentEdge || ((_b = (_a = ev.target) === null || _a === void 0 ? void 0 : _a.isCanvas) === null || _b === void 0 ? void 0 : _b.call(_a)))) { if (self.edge && !self.edge.destroyed) graph.removeItem(self.edge, false); self.edge = null; self.addingEdge = false; return; } }, onKeyDown: function onKeyDown(e) { var self = this; var code = e.key; if (!code) { return; } if (code.toLowerCase() === self.key.toLowerCase()) { self.keydown = true; } else { self.keydown = false; } }, onKeyUp: function onKeyUp() { var self = this; if (self.addingEdge && self.edge) { // 清除正在增加的边 self.graph.removeItem(self.edge, false); self.addingEdge = false; self.edge = null; } this.keydown = false; } };