Quellcode durchsuchen

:art: fix https://github.com/siyuan-note/siyuan/issues/10896

Vanessa vor 1 Jahr
Ursprung
Commit
9cd7d77275
2 geänderte Dateien mit 57 neuen und 20 gelöschten Zeilen
  1. 56 20
      app/src/menus/index.ts
  2. 1 0
      app/src/protyle/header/Title.ts

+ 56 - 20
app/src/menus/index.ts

@@ -6,7 +6,7 @@ import {initDockMenu} from "./dock";
 import {initFileMenu, initNavigationMenu} from "./navigation";
 import {initTabMenu} from "./tab";
 /// #endif
-import {Menu} from "./Menu";
+import {Menu, MenuItem} from "./Menu";
 import {hasClosestByClassName, hasTopClosestByTag} from "../protyle/util/hasClosest";
 import {App} from "../index";
 
@@ -22,6 +22,11 @@ export class Menus {
                 return;
             }
             let target = event.target as HTMLElement;
+            if (hasClosestByClassName(target, "av__panel") && !hasClosestByClassName(target, "b3-menu")) {
+                document.querySelector(".av__panel").dispatchEvent(new CustomEvent("click", {detail: "close"}));
+                event.stopPropagation();
+                return;
+            }
             while (target && target.parentElement   // ⌃⇥ 后点击会为空
             && !target.parentElement.isEqualNode(document.querySelector("body"))) {
                 event.preventDefault();
@@ -34,9 +39,7 @@ export class Menus {
                     });
                     event.stopPropagation();
                     break;
-                }
-
-                if (dataType === "navigation-root" && !window.siyuan.config.readonly) {
+                } else if (dataType === "navigation-root" && !window.siyuan.config.readonly) {
                     if (target.querySelector(".b3-list-item__text").classList.contains("ft__on-surface")) {
                         return;
                     }
@@ -45,9 +48,7 @@ export class Menus {
                     initNavigationMenu(app, target).popup({x: event.clientX, y: event.clientY});
                     event.stopPropagation();
                     break;
-                }
-
-                if (dataType === "navigation-file") {
+                } else if (dataType === "navigation-file") {
                     this.unselect();
                     // navigation 文件上:删除/重命名/打开文件位置/导出
                     initFileMenu(app, this.getDir(target), target.getAttribute("data-path"), target).popup({
@@ -56,29 +57,64 @@ export class Menus {
                     });
                     event.stopPropagation();
                     break;
-                }
-
-                if (dataType === "search-item") {
+                } else if (dataType === "search-item") {
                     const nodeId = target.getAttribute("data-node-id");
                     if (nodeId) {
                         initSearchMenu(nodeId).popup({x: event.clientX, y: event.clientY});
                     }
                     event.stopPropagation();
                     break;
-                }
-
-                if (target.classList.contains("dock__item") && target.getAttribute("data-type")) {
+                } else if (dataType && target.classList.contains("dock__item")) {
                     initDockMenu(target).popup({x: event.clientX, y: event.clientY});
                     event.stopPropagation();
                     break;
+                } else if (target.classList.contains("b3-text-field")) {
+                    window.siyuan.menus.menu.remove();
+                    if ((target as HTMLInputElement).selectionStart !== (target as HTMLInputElement).selectionEnd) {
+                        window.siyuan.menus.menu.append(new MenuItem({
+                            icon: "iconCopy",
+                            accelerator: "⌘C",
+                            label: window.siyuan.languages.copy,
+                            click: () => {
+                                document.execCommand("copy");
+                            }
+                        }).element);
+                        window.siyuan.menus.menu.append(new MenuItem({
+                            icon: "iconCut",
+                            accelerator: "⌘X",
+                            label: window.siyuan.languages.cut,
+                            click: () => {
+                                document.execCommand("cut");
+                            }
+                        }).element);
+                        window.siyuan.menus.menu.append(new MenuItem({
+                            icon: "iconTrashcan",
+                            accelerator: "⌫",
+                            label: window.siyuan.languages.delete,
+                            click: () => {
+                                document.execCommand("delete");
+                            }
+                        }).element);
+                    }
+                    window.siyuan.menus.menu.append(new MenuItem({
+                        label: window.siyuan.languages.paste,
+                        icon: "iconPaste",
+                        accelerator: "⌘V",
+                        click: async () => {
+                            document.execCommand("paste");
+                        }
+                    }).element);
+                    window.siyuan.menus.menu.append(new MenuItem({
+                        label: window.siyuan.languages.selectAll,
+                        icon: "iconSelect",
+                        accelerator: "⌘A",
+                        click: () => {
+                            document.execCommand("selectAll");
+                        }
+                    }).element);
+                    window.siyuan.menus.menu.popup({x: event.clientX, y: event.clientY});
+                    target.focus()
                 }
-
-                if (hasClosestByClassName(target, "av__panel") && !hasClosestByClassName(target, "b3-menu")) {
-                    document.querySelector(".av__panel").dispatchEvent(new CustomEvent("click", {detail: "close"}));
-                    event.stopPropagation();
-                    break;
-                }
-
                 target = target.parentElement;
             }
         }, false);

+ 1 - 0
app/src/protyle/header/Title.ts

@@ -239,6 +239,7 @@ export class Title {
             }).element);
             window.siyuan.menus.menu.append(new MenuItem({
                 label: window.siyuan.languages.selectAll,
+                icon: "iconSelect",
                 accelerator: "⌘A",
                 click: () => {
                     range.selectNodeContents(this.editElement);