"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _domUtil = require("@antv/dom-util"); var _util = require("@antv/util"); var _base = _interopRequireDefault(require("../base")); var _insertCss = _interopRequireDefault(require("insert-css")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } var __extends = void 0 && (void 0).__extends || function () { var _extendStatics = function extendStatics(d, b) { _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; } || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return _extendStatics(d, b); }; return function (d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); _extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; }(); var DELTA = 0.05; typeof document !== 'undefined' && (0, _insertCss.default)("\n .g6-component-toolbar {\n position: absolute;\n list-style-type: none;\n padding: 6px;\n left: 0px;\n top: 0px;\n background-color: rgba(255, 255, 255, 0.9);\n border: 1px solid #e2e2e2;\n border-radius: 4px;\n font-size: 12px;\n color: #545454;\n margin: 0;\n }\n .g6-component-toolbar li {\n float: left;\n text-align: center;\n width: 35px;\n height: 24px;\n cursor: pointer;\n\t\tlist-style-type:none;\n list-style: none;\n margin-left: 0px;\n }\n .g6-component-toolbar li .icon {\n opacity: 0.7;\n }\n .g6-component-toolbar li .icon:hover {\n opacity: 1;\n }\n"); var getEventPath = function getEventPath(evt) { if (!evt) { return []; } if (evt.composedPath) { return evt.composedPath(); } var path = []; var el = evt.target; while (el) { path.push(el); if (el.tagName === 'HTML') { path.push(document, window); return path; } el = el.parentElement; } return path; }; var ToolBar = /** @class */function (_super) { __extends(ToolBar, _super); function ToolBar(config) { return _super.call(this, config) || this; } ToolBar.prototype.getDefaultCfgs = function () { return { handleClick: undefined, // 指定菜单内容,function(e) {...} getContent: function getContent(graph) { return "\n
\n "; }, zoomSensitivity: 2 }; }; ToolBar.prototype.init = function () { var _this = this; var graph = this.get('graph'); var getContent = this.get('getContent'); var toolBar = getContent(graph); var toolBarDOM = toolBar; if ((0, _util.isString)(toolBar)) { toolBarDOM = (0, _domUtil.createDom)(toolBar); } var className = this.get('className'); toolBarDOM.setAttribute('class', className || 'g6-component-toolbar'); var container = this.get('container'); if (!container) { container = this.get('graph').get('container'); } if ((0, _util.isString)(container)) { container = document.getElementById(container); } container.appendChild(toolBarDOM); this.set('toolBar', toolBarDOM); var handleClick = this.get('handleClick'); toolBarDOM.addEventListener('click', function (evt) { var current = getEventPath(evt).filter(function (p) { return p.nodeName === 'LI'; }); if (current.length === 0) { return; } var code = current[0].getAttribute('code'); if (!code) { return; } if (handleClick) { handleClick(code, graph); } else { _this.handleDefaultOperator(code); } }); var pos = this.get('position'); if (pos) { (0, _domUtil.modifyCSS)(toolBarDOM, { top: "".concat(pos.y, "px"), left: "".concat(pos.x, "px") }); } this.bindUndoRedo(); }; ToolBar.prototype.bindUndoRedo = function () { var graph = this.get('graph'); var undoDom = document.querySelector('.g6-component-toolbar li[code="undo"]'); var undoDomIcon = document.querySelector('.g6-component-toolbar li[code="undo"] svg'); var redoDom = document.querySelector('.g6-component-toolbar li[code="redo"]'); var redoDomIcon = document.querySelector('.g6-component-toolbar li[code="redo"] svg'); if (!undoDom || !undoDomIcon || !redoDom || !redoDomIcon) { return; } // initialy disabled redo and undo icons undoDom.setAttribute('style', 'cursor: not-allowed'); undoDomIcon.setAttribute('style', 'opacity: 0.4'); redoDom.setAttribute('style', 'cursor: not-allowed'); redoDomIcon.setAttribute('style', 'opacity: 0.4'); graph.on('stackchange', function (evt) { var undoStack = evt.undoStack, redoStack = evt.redoStack; var undoStackLen = undoStack.length; var redoStackLen = redoStack.length; // undo 不可用 if (undoStackLen === 0) { undoDom.setAttribute('style', 'cursor: not-allowed'); undoDomIcon.setAttribute('style', 'opacity: 0.4'); } else { undoDom.removeAttribute('style'); undoDomIcon.removeAttribute('style'); } // redo 不可用 if (redoStackLen === 0) { redoDom.setAttribute('style', 'cursor: not-allowed'); redoDomIcon.setAttribute('style', 'opacity: 0.4'); } else { redoDom.removeAttribute('style'); redoDomIcon.removeAttribute('style'); } }); }; /** * undo 操作 */ ToolBar.prototype.undo = function () { var graph = this.get('graph'); var undoStack = graph.getUndoStack(); if (!undoStack || undoStack.length === 0) { return; } var currentData = undoStack.pop(); if (currentData) { var action = currentData.action; graph.pushStack(action, (0, _util.clone)(currentData.data), 'redo'); var data_1 = currentData.data.before; if (action === 'add') { data_1 = currentData.data.after; } if (!data_1) return; switch (action) { case 'visible': { Object.keys(data_1).forEach(function (key) { var array = data_1[key]; if (!array) return; array.forEach(function (model) { var item = graph.findById(model.id); if (model.visible) { graph.showItem(item, false); } else { graph.hideItem(item, false); } }); }); break; } case 'render': case 'update': Object.keys(data_1).forEach(function (key) { var array = data_1[key]; if (!array) return; array.forEach(function (model) { var item = graph.findById(model.id); delete model.id; graph.updateItem(item, model, false); if (item.getType() === 'combo') graph.updateCombo(item); }); }); break; case 'changedata': graph.changeData(data_1, false); break; case 'delete': { Object.keys(data_1).forEach(function (key) { var array = data_1[key]; if (!array) return; array.forEach(function (model) { var itemType = model.itemType; delete model.itemType; graph.addItem(itemType, model, false); }); }); break; } case 'add': Object.keys(data_1).forEach(function (key) { var array = data_1[key]; if (!array) return; array.forEach(function (model) { graph.removeItem(model.id, false); }); }); break; case 'updateComboTree': Object.keys(data_1).forEach(function (key) { var array = data_1[key]; if (!array) return; array.forEach(function (model) { graph.updateComboTree(model.id, model.parentId, false); }); }); break; case 'createCombo': var afterCombos = currentData.data.after.combos; var createdCombo = afterCombos[afterCombos.length - 1]; Object.keys(data_1).forEach(function (key) { var array = data_1[key]; if (!array) return; array.forEach(function (model) { graph.updateComboTree(model.id, model.parentId, false); }); }); graph.removeItem(createdCombo.id, false); break; case 'uncombo': var targetCombo_1 = data_1.combos[data_1.combos.length - 1]; var childrenIds = data_1.nodes.concat(data_1.combos).map(function (child) { return child.id; }).filter(function (id) { return id !== targetCombo_1.id; }); graph.createCombo(targetCombo_1, childrenIds, false); break; case 'layout': graph.updateLayout(data_1, undefined, undefined, false); break; default: } } }; /** * redo 操作 */ ToolBar.prototype.redo = function () { var graph = this.get('graph'); var redoStack = graph.getRedoStack(); if (!redoStack || redoStack.length === 0) { return; } var currentData = redoStack.pop(); if (currentData) { var action = currentData.action; var data_2 = currentData.data.after; graph.pushStack(action, (0, _util.clone)(currentData.data)); if (action === 'delete') { data_2 = currentData.data.before; } if (!data_2) return; switch (action) { case 'visible': { Object.keys(data_2).forEach(function (key) { var array = data_2[key]; if (!array) return; array.forEach(function (model) { var item = graph.findById(model.id); if (model.visible) { graph.showItem(item, false); } else { graph.hideItem(item, false); } }); }); break; } case 'render': case 'update': Object.keys(data_2).forEach(function (key) { var array = data_2[key]; if (!array) return; array.forEach(function (model) { var item = graph.findById(model.id); delete model.id; graph.updateItem(item, model, false); if (item.getType() === 'combo') graph.updateCombo(item); }); }); break; case 'changedata': graph.changeData(data_2, false); break; case 'delete': if (data_2.edges) { data_2.edges.forEach(function (model) { graph.removeItem(model.id, false); }); } if (data_2.nodes) { data_2.nodes.forEach(function (model) { graph.removeItem(model.id, false); }); } if (data_2.combos) { data_2.combos.forEach(function (model) { graph.removeItem(model.id, false); }); } break; case 'add': { Object.keys(data_2).forEach(function (key) { var array = data_2[key]; if (!array) return; array.forEach(function (model) { var itemType = model.itemType; delete model.itemType; graph.addItem(itemType, model, false); }); }); break; } case 'updateComboTree': Object.keys(data_2).forEach(function (key) { var array = data_2[key]; if (!array) return; array.forEach(function (model) { graph.updateComboTree(model.id, model.parentId, false); }); }); break; case 'createCombo': var createdCombo = data_2.combos[data_2.combos.length - 1]; graph.createCombo(createdCombo, createdCombo.children.map(function (child) { return child.id; }), false); break; case 'uncombo': var beforeCombos = currentData.data.before.combos; var targertCombo = beforeCombos[beforeCombos.length - 1]; graph.uncombo(targertCombo.id, false); break; case 'layout': graph.updateLayout(data_2, undefined, undefined, false); break; default: } } }; /** * zoomOut 操作 */ ToolBar.prototype.zoomOut = function () { var graph = this.get('graph'); var currentZoom = graph.getZoom(); var ratioOut = 1 / (1 - DELTA * this.get('zoomSensitivity')); var maxZoom = this.get('maxZoom') || graph.get('maxZoom'); if (ratioOut * currentZoom > maxZoom) { return; } graph.zoomTo(currentZoom * ratioOut); }; /** * zoomIn 操作 */ ToolBar.prototype.zoomIn = function () { var graph = this.get('graph'); var currentZoom = graph.getZoom(); var ratioIn = 1 - DELTA * this.get('zoomSensitivity'); var minZoom = this.get('minZoom') || graph.get('minZoom'); if (ratioIn * currentZoom < minZoom) { return; } graph.zoomTo(currentZoom * ratioIn); }; /** * realZoom 操作 */ ToolBar.prototype.realZoom = function () { var graph = this.get('graph'); graph.zoomTo(1); }; /** * autoZoom 操作 */ ToolBar.prototype.autoZoom = function () { var graph = this.get('graph'); graph.fitView([20, 20]); }; /** * 根据 Toolbar 上不同类型对图进行操作 * @param code 操作类型编码 * @param graph Graph 实例 */ ToolBar.prototype.handleDefaultOperator = function (code) { switch (code) { case 'redo': this.redo(); break; case 'undo': this.undo(); break; case 'zoomOut': this.zoomOut(); break; case 'zoomIn': this.zoomIn(); break; case 'realZoom': this.realZoom(); break; case 'autoZoom': this.autoZoom(); break; default: } }; ToolBar.prototype.destroy = function () { var toolBar = this.get('toolBar'); if (toolBar) { var container = this.get('container'); if (!container) { container = this.get('graph').get('container'); } if ((0, _util.isString)(container)) { container = document.getElementById(container); } container.removeChild(toolBar); } var handleClick = this.get('handleClick'); if (handleClick) { toolBar.removeEventListener('click', handleClick); } }; return ToolBar; }(_base.default); var _default = exports.default = ToolBar;