Переглянути джерело

:bug: 当前页签没有激活时编辑器没有初始化

Vanessa 2 роки тому
батько
коміт
6cd50643c6
2 змінених файлів з 42 додано та 43 видалено
  1. 1 1
      app/src/menus/index.ts
  2. 41 42
      app/src/menus/tab.ts

+ 1 - 1
app/src/menus/index.ts

@@ -23,7 +23,7 @@ export class Menus {
                 const dataType = target.getAttribute("data-type");
                 if (dataType === "tab-header") {
                     this.unselect();
-                    initTabMenu(dataType, (getInstanceById(target.getAttribute("data-id")) as Tab).model).popup({
+                    initTabMenu((getInstanceById(target.getAttribute("data-id")) as Tab)).popup({
                         x: event.clientX,
                         y: event.clientY
                     });

+ 41 - 42
app/src/menus/tab.ts

@@ -5,19 +5,18 @@ import {copyTab} from "../layout/util";
 import {copySubMenu} from "./commonMenuItem";
 import {Model} from "../layout/Model";
 
-const closeMenu = (model: Model) => {
-    const currentTab = model.parent;
+const closeMenu = (tab: Tab) => {
     const allTabs: Tab[] = [];
     const unmodifiedTabs: Tab[] = [];
     const leftTabs: Tab[] = [];
     const rightTabs: Tab[] = [];
     let midIndex = -1;
-    currentTab.parent.children.forEach((item: Tab, index: number) => {
+    tab.parent.children.forEach((item: Tab, index: number) => {
         const editor = item.model as Editor;
         if (!editor || (editor.editor?.protyle && !editor.editor?.protyle.updated)) {
             unmodifiedTabs.push(item);
         }
-        if (item.id === currentTab.id) {
+        if (item.id === tab.id) {
             midIndex = index;
         }
         if (midIndex === -1) {
@@ -33,7 +32,7 @@ const closeMenu = (model: Model) => {
         label: window.siyuan.languages.close,
         accelerator: window.siyuan.config.keymap.general.closeTab.custom,
         click: () => {
-            currentTab.parent.removeTab(currentTab.id);
+            tab.parent.removeTab(tab.id);
         }
     }).element);
     if (allTabs.length > 1) {
@@ -41,12 +40,12 @@ const closeMenu = (model: Model) => {
             label: window.siyuan.languages.closeOthers,
             click: async () => {
                 for (let index = 0; index < allTabs.length; index++) {
-                    if (allTabs[index].id !== currentTab.id && !allTabs[index].headElement.classList.contains("item--pin")) {
+                    if (allTabs[index].id !== tab.id && !allTabs[index].headElement.classList.contains("item--pin")) {
                         await allTabs[index].parent.removeTab(allTabs[index].id, true);
                     }
                 }
-                if (!currentTab.headElement.parentElement.querySelector(".item--focus")) {
-                    currentTab.parent.switchTab(currentTab.headElement, true);
+                if (!tab.headElement.parentElement.querySelector(".item--focus")) {
+                    tab.parent.switchTab(tab.headElement, true);
                 }
             }
         }).element);
@@ -72,8 +71,8 @@ const closeMenu = (model: Model) => {
                             await leftTabs[index].parent.removeTab(leftTabs[index].id);
                         }
                     }
-                    if (!currentTab.headElement.parentElement.querySelector(".item--focus")) {
-                        currentTab.parent.switchTab(currentTab.headElement, true);
+                    if (!tab.headElement.parentElement.querySelector(".item--focus")) {
+                        tab.parent.switchTab(tab.headElement, true);
                     }
                 }
             }).element);
@@ -87,8 +86,8 @@ const closeMenu = (model: Model) => {
                             await rightTabs[index].parent.removeTab(rightTabs[index].id);
                         }
                     }
-                    if (!currentTab.headElement.parentElement.querySelector(".item--focus")) {
-                        currentTab.parent.switchTab(currentTab.headElement, true);
+                    if (!tab.headElement.parentElement.querySelector(".item--focus")) {
+                        tab.parent.switchTab(tab.headElement, true);
                     }
                 }
             }).element);
@@ -102,8 +101,8 @@ const closeMenu = (model: Model) => {
                             await unmodifiedTabs[index].parent.removeTab(unmodifiedTabs[index].id);
                         }
                     }
-                    if (currentTab.headElement.parentElement && !currentTab.headElement.parentElement.querySelector(".item--focus")) {
-                        currentTab.parent.switchTab(currentTab.headElement, true);
+                    if (tab.headElement.parentElement && !tab.headElement.parentElement.querySelector(".item--focus")) {
+                        tab.parent.switchTab(tab.headElement, true);
                     } else if (allTabs[0].headElement.parentElement) {
                         allTabs[0].parent.switchTab(allTabs[0].headElement, true);
                     }
@@ -114,24 +113,22 @@ const closeMenu = (model: Model) => {
     window.siyuan.menus.menu.append(new MenuItem({type: "separator"}).element);
 };
 
-const splitSubMenu = (model: Model) => {
+const splitSubMenu = (tab: Tab) => {
     const subMenus: IMenu[] = [{
         icon: "iconSplitLR",
         label: window.siyuan.languages.splitLR,
         click: () => {
-            const currentTab = model.parent;
-            currentTab.parent.split("lr").addTab(copyTab(currentTab));
+            tab.parent.split("lr").addTab(copyTab(tab));
         }
     }];
-    const currentTab = model.parent;
-    if (currentTab.parent.children.length > 1) {
+    if (tab.parent.children.length > 1) {
         subMenus.push({
             icon: "iconRight",
             label: window.siyuan.languages.splitMoveR,
             click: () => {
-                const newWnd = currentTab.parent.split("lr");
-                newWnd.headersElement.append(currentTab.headElement);
-                newWnd.moveTab(currentTab);
+                const newWnd = tab.parent.split("lr");
+                newWnd.headersElement.append(tab.headElement);
+                newWnd.moveTab(tab);
             }
         });
     }
@@ -139,46 +136,48 @@ const splitSubMenu = (model: Model) => {
         icon: "iconSplitTB",
         label: window.siyuan.languages.splitTB,
         click: () => {
-            const currentTab = model.parent;
-            currentTab.parent.split("tb").addTab(copyTab(currentTab));
+            tab.parent.split("tb").addTab(copyTab(tab));
         }
     });
 
-    if (currentTab.parent.children.length > 1) {
+    if (tab.parent.children.length > 1) {
         subMenus.push({
             icon: "iconDown",
             label: window.siyuan.languages.splitMoveB,
             click: () => {
-                const newWnd = currentTab.parent.split("tb");
-                newWnd.headersElement.append(currentTab.headElement);
-                newWnd.moveTab(currentTab);
+                const newWnd = tab.parent.split("tb");
+                newWnd.headersElement.append(tab.headElement);
+                newWnd.moveTab(tab);
             }
         });
     }
     return subMenus;
 };
 
-export const initTabMenu = (type: string, model: Model) => {
+export const initTabMenu = (tab: Tab) => {
     window.siyuan.menus.menu.remove();
-    closeMenu(model);
-    window.siyuan.menus.menu.append(new MenuItem({
-        label: window.siyuan.languages.split,
-        submenu: splitSubMenu(model)
-    }).element);
-    if (model instanceof Editor) {
+    closeMenu(tab);
+    const model = tab.model;
+    if (model) {
         window.siyuan.menus.menu.append(new MenuItem({
-            label: window.siyuan.languages.copy,
-            icon: "iconCopy",
-            type: "submenu",
-            submenu: copySubMenu(model.editor.protyle.block.rootID, "", false)
+            label: window.siyuan.languages.split,
+            submenu: splitSubMenu(tab)
         }).element);
+        if (model instanceof Editor) {
+            window.siyuan.menus.menu.append(new MenuItem({
+                label: window.siyuan.languages.copy,
+                icon: "iconCopy",
+                type: "submenu",
+                submenu: copySubMenu(model.editor.protyle.block.rootID, "", false)
+            }).element);
+        }
     }
-    if (model.parent.headElement.classList.contains("item--pin")) {
+    if (tab.headElement.classList.contains("item--pin")) {
         window.siyuan.menus.menu.append(new MenuItem({
             label: window.siyuan.languages.unpin,
             icon: "iconPin",
             click: () => {
-                model.parent.unpin();
+                tab.unpin();
             }
         }).element);
     } else {
@@ -186,7 +185,7 @@ export const initTabMenu = (type: string, model: Model) => {
             label: window.siyuan.languages.pin,
             icon: "iconPin",
             click: () => {
-                model.parent.pin();
+                tab.pin();
             }
         }).element);
     }