|
@@ -1,5 +1,7 @@
|
|
|
-import { Graph } from "@antv/x6";
|
|
|
+import { Cell, Graph } from "@antv/x6";
|
|
|
import { printHandle } from "./index";
|
|
|
+import { TopicType } from "@/enum";
|
|
|
+import { MindMapProjectInfo } from "@/types";
|
|
|
import {
|
|
|
handleInsertText,
|
|
|
handlePaste,
|
|
@@ -13,9 +15,16 @@ import {
|
|
|
handleUnGroup,
|
|
|
handleMove,
|
|
|
handleLock,
|
|
|
- handleUnLock
|
|
|
+ handleUnLock,
|
|
|
} from "./hander";
|
|
|
|
|
|
+import {
|
|
|
+ addPeerTopic,
|
|
|
+ addChildrenTopic,
|
|
|
+ deleteTopics,
|
|
|
+ handleMindmapPaste,
|
|
|
+} from "./mindmapHander";
|
|
|
+
|
|
|
export const bindKeys = (graph: Graph) => {
|
|
|
// Ctrl + A 全选
|
|
|
graph.bindKey("ctrl+a", (e: KeyboardEvent) => {
|
|
@@ -27,9 +36,7 @@ export const bindKeys = (graph: Graph) => {
|
|
|
});
|
|
|
|
|
|
// Ctrl + F 查找替换 todo
|
|
|
- graph.bindKey("ctrl+f", (e: KeyboardEvent) => {
|
|
|
-
|
|
|
- });
|
|
|
+ graph.bindKey("ctrl+f", (e: KeyboardEvent) => {});
|
|
|
|
|
|
// Ctrl + + 放大
|
|
|
graph.bindKey("ctrl+=", (e: KeyboardEvent) => {
|
|
@@ -66,13 +73,11 @@ export const bindKeys = (graph: Graph) => {
|
|
|
|
|
|
// Ctrl + K 插入链接
|
|
|
graph.bindKey("ctrl+k", (e: KeyboardEvent) => {
|
|
|
-
|
|
|
// todo
|
|
|
});
|
|
|
|
|
|
// Ctrl+Alt+M 插入评论
|
|
|
graph.bindKey("ctrl+alt+m", (e: KeyboardEvent) => {
|
|
|
-
|
|
|
// todo
|
|
|
});
|
|
|
|
|
@@ -88,7 +93,7 @@ export const bindKeys = (graph: Graph) => {
|
|
|
|
|
|
// Ctrl+U 下划线
|
|
|
graph.bindKey("ctrl+u", (e: KeyboardEvent) => {
|
|
|
- handleSetAttr(graph, "text.textDecoration", 'underline');
|
|
|
+ handleSetAttr(graph, "text.textDecoration", "underline");
|
|
|
});
|
|
|
|
|
|
// Ctrl+c 复制
|
|
@@ -168,7 +173,7 @@ export const bindKeys = (graph: Graph) => {
|
|
|
|
|
|
// ↑ 向上移动
|
|
|
graph.bindKey("up", (e: KeyboardEvent) => {
|
|
|
- if(graph.getSelectedCells().length) {
|
|
|
+ if (graph.getSelectedCells().length) {
|
|
|
e.preventDefault();
|
|
|
handleMove(graph, "y", -10);
|
|
|
}
|
|
@@ -176,7 +181,7 @@ export const bindKeys = (graph: Graph) => {
|
|
|
|
|
|
// ↓ 向下移动
|
|
|
graph.bindKey("down", (e: KeyboardEvent) => {
|
|
|
- if(graph.getSelectedCells().length) {
|
|
|
+ if (graph.getSelectedCells().length) {
|
|
|
e.preventDefault();
|
|
|
handleMove(graph, "y", 10);
|
|
|
}
|
|
@@ -184,7 +189,7 @@ export const bindKeys = (graph: Graph) => {
|
|
|
|
|
|
// ← 向左移动
|
|
|
graph.bindKey("left", (e: KeyboardEvent) => {
|
|
|
- if(graph.getSelectedCells().length) {
|
|
|
+ if (graph.getSelectedCells().length) {
|
|
|
e.preventDefault();
|
|
|
handleMove(graph, "x", -10);
|
|
|
}
|
|
@@ -192,7 +197,7 @@ export const bindKeys = (graph: Graph) => {
|
|
|
|
|
|
// → 向右移动
|
|
|
graph.bindKey("right", (e: KeyboardEvent) => {
|
|
|
- if(graph.getSelectedCells().length) {
|
|
|
+ if (graph.getSelectedCells().length) {
|
|
|
e.preventDefault();
|
|
|
handleMove(graph, "x", 10);
|
|
|
}
|
|
@@ -200,7 +205,7 @@ export const bindKeys = (graph: Graph) => {
|
|
|
|
|
|
// shift+← 向左微移
|
|
|
graph.bindKey("shift+left", (e: KeyboardEvent) => {
|
|
|
- if(graph.getSelectedCells().length) {
|
|
|
+ if (graph.getSelectedCells().length) {
|
|
|
e.preventDefault();
|
|
|
handleMove(graph, "x", -1);
|
|
|
}
|
|
@@ -208,7 +213,7 @@ export const bindKeys = (graph: Graph) => {
|
|
|
|
|
|
// shift+→ 向右微动
|
|
|
graph.bindKey("shift+right", (e: KeyboardEvent) => {
|
|
|
- if(graph.getSelectedCells().length) {
|
|
|
+ if (graph.getSelectedCells().length) {
|
|
|
e.preventDefault();
|
|
|
handleMove(graph, "x", 1);
|
|
|
}
|
|
@@ -216,7 +221,7 @@ export const bindKeys = (graph: Graph) => {
|
|
|
|
|
|
// shift+↑ 向上微动
|
|
|
graph.bindKey("shift+up", (e: KeyboardEvent) => {
|
|
|
- if(graph.getSelectedCells().length) {
|
|
|
+ if (graph.getSelectedCells().length) {
|
|
|
e.stopPropagation();
|
|
|
e.preventDefault();
|
|
|
handleMove(graph, "y", -1);
|
|
@@ -225,7 +230,7 @@ export const bindKeys = (graph: Graph) => {
|
|
|
|
|
|
// shift+↓ 向下微动
|
|
|
graph.bindKey("shift+down", (e: KeyboardEvent) => {
|
|
|
- if(graph.getSelectedCells().length) {
|
|
|
+ if (graph.getSelectedCells().length) {
|
|
|
e.preventDefault();
|
|
|
handleMove(graph, "y", 1);
|
|
|
}
|
|
@@ -276,3 +281,123 @@ export const bindKeys = (graph: Graph) => {
|
|
|
alignCell("v", graph.getSelectedCells());
|
|
|
});
|
|
|
};
|
|
|
+
|
|
|
+export const bindMindmapKeys = (
|
|
|
+ graph: Graph,
|
|
|
+ mindProjectInfo?: MindMapProjectInfo,
|
|
|
+ setMindProjectInfo?: (info: MindMapProjectInfo) => void
|
|
|
+) => {
|
|
|
+ // Enter 增加同级主题
|
|
|
+ graph.bindKey("enter", (e: KeyboardEvent) => {
|
|
|
+ e.preventDefault();
|
|
|
+ const branch = graph
|
|
|
+ .getSelectedCells()
|
|
|
+ .find((cell) => cell.data?.type !== TopicType.sub && cell.isNode());
|
|
|
+ if (branch) {
|
|
|
+ addPeerTopic(branch, graph, setMindProjectInfo);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ const sub = graph
|
|
|
+ .getSelectedCells()
|
|
|
+ .find((cell) => cell.data?.type === TopicType.sub && cell.isNode());
|
|
|
+ if (sub) {
|
|
|
+ sub.isNode() && addPeerTopic(sub, graph, setMindProjectInfo);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // Tab 增加子主题
|
|
|
+ graph.bindKey("tab", (e: KeyboardEvent) => {
|
|
|
+ e.preventDefault();
|
|
|
+ const node = graph.getSelectedCells().find((cell) => cell.isNode());
|
|
|
+ if (node) {
|
|
|
+ node.isNode() && addChildrenTopic(node, setMindProjectInfo);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // insert 增加子主题
|
|
|
+ graph.bindKey("insert", (e: KeyboardEvent) => {
|
|
|
+ e.preventDefault();
|
|
|
+ const node = graph.getSelectedCells().find((cell) => cell.isNode());
|
|
|
+ if (node) {
|
|
|
+ node.isNode() && addChildrenTopic(node, setMindProjectInfo);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // delete 删除
|
|
|
+ graph.bindKey("delete", (e: KeyboardEvent) => {
|
|
|
+ e.preventDefault();
|
|
|
+ const topicIds = graph
|
|
|
+ .getSelectedCells()
|
|
|
+ .filter((cell) => cell.isNode)
|
|
|
+ .map((cell) => cell.id);
|
|
|
+ deleteTopics(topicIds, setMindProjectInfo);
|
|
|
+ });
|
|
|
+
|
|
|
+ // Ctrl + A 全选
|
|
|
+ graph.bindKey("ctrl+a", (e: KeyboardEvent) => {
|
|
|
+ const cells = graph.getNodes();
|
|
|
+ graph.select(cells);
|
|
|
+ });
|
|
|
+
|
|
|
+ // Ctrl + + 放大
|
|
|
+ graph.bindKey("ctrl+=", (e: KeyboardEvent) => {
|
|
|
+ graph.zoomTo(graph.zoom() + 0.1);
|
|
|
+ });
|
|
|
+
|
|
|
+ // Ctrl + - 缩小
|
|
|
+ graph.bindKey("ctrl+-", (e: KeyboardEvent) => {
|
|
|
+ graph.zoomTo(graph.zoom() - 0.1);
|
|
|
+ });
|
|
|
+
|
|
|
+ // esc 取消
|
|
|
+ graph.bindKey("esc", (e: KeyboardEvent) => {
|
|
|
+ graph.cleanSelection();
|
|
|
+ graph.trigger("cancel");
|
|
|
+ });
|
|
|
+
|
|
|
+ // Ctrl+Alt+M 插入评论
|
|
|
+ graph.bindKey("ctrl+alt+m", (e: KeyboardEvent) => {
|
|
|
+ // todo
|
|
|
+ });
|
|
|
+
|
|
|
+ // Ctrl+B 加粗
|
|
|
+ graph.bindKey("ctrl+b", (e: KeyboardEvent) => {
|
|
|
+ handleSetAttr(graph, "text.bold", true);
|
|
|
+ });
|
|
|
+
|
|
|
+ // Ctrl+I 斜体
|
|
|
+ graph.bindKey("ctrl+i", (e: KeyboardEvent) => {
|
|
|
+ handleSetAttr(graph, "text.italic", true);
|
|
|
+ });
|
|
|
+
|
|
|
+ // Ctrl+U 下划线
|
|
|
+ graph.bindKey("ctrl+u", (e: KeyboardEvent) => {
|
|
|
+ handleSetAttr(graph, "text.textDecoration", "underline");
|
|
|
+ });
|
|
|
+
|
|
|
+ // Ctrl+c 复制
|
|
|
+ graph.bindKey("ctrl+c", (e: KeyboardEvent) => {
|
|
|
+ localStorage.setItem("mindmap-copy-data", JSON.stringify(graph.getSelectedCells()));
|
|
|
+ navigator.clipboard.writeText(" ");
|
|
|
+ });
|
|
|
+
|
|
|
+ // Ctrl+x 剪切
|
|
|
+ graph.bindKey("ctrl+x", (e: KeyboardEvent) => {
|
|
|
+ graph.cut(graph.getSelectedCells());
|
|
|
+ });
|
|
|
+
|
|
|
+ // Ctrl+v 粘贴
|
|
|
+ graph.bindKey("ctrl+v", (e: KeyboardEvent) => {
|
|
|
+ setMindProjectInfo && handleMindmapPaste(graph, setMindProjectInfo);
|
|
|
+ });
|
|
|
+
|
|
|
+ // Ctrl+z 撤销
|
|
|
+ graph.bindKey("ctrl+z", (e: KeyboardEvent) => {
|
|
|
+ graph.undo();
|
|
|
+ });
|
|
|
+
|
|
|
+ // Ctrl+y 重做
|
|
|
+ graph.bindKey("ctrl+y", (e: KeyboardEvent) => {
|
|
|
+ graph.redo();
|
|
|
+ });
|
|
|
+};
|