|
@@ -5,19 +5,18 @@ import {copyTab} from "../layout/util";
|
|
import {copySubMenu} from "./commonMenuItem";
|
|
import {copySubMenu} from "./commonMenuItem";
|
|
import {Model} from "../layout/Model";
|
|
import {Model} from "../layout/Model";
|
|
|
|
|
|
-const closeMenu = (model: Model) => {
|
|
|
|
- const currentTab = model.parent;
|
|
|
|
|
|
+const closeMenu = (tab: Tab) => {
|
|
const allTabs: Tab[] = [];
|
|
const allTabs: Tab[] = [];
|
|
const unmodifiedTabs: Tab[] = [];
|
|
const unmodifiedTabs: Tab[] = [];
|
|
const leftTabs: Tab[] = [];
|
|
const leftTabs: Tab[] = [];
|
|
const rightTabs: Tab[] = [];
|
|
const rightTabs: Tab[] = [];
|
|
let midIndex = -1;
|
|
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;
|
|
const editor = item.model as Editor;
|
|
if (!editor || (editor.editor?.protyle && !editor.editor?.protyle.updated)) {
|
|
if (!editor || (editor.editor?.protyle && !editor.editor?.protyle.updated)) {
|
|
unmodifiedTabs.push(item);
|
|
unmodifiedTabs.push(item);
|
|
}
|
|
}
|
|
- if (item.id === currentTab.id) {
|
|
|
|
|
|
+ if (item.id === tab.id) {
|
|
midIndex = index;
|
|
midIndex = index;
|
|
}
|
|
}
|
|
if (midIndex === -1) {
|
|
if (midIndex === -1) {
|
|
@@ -33,7 +32,7 @@ const closeMenu = (model: Model) => {
|
|
label: window.siyuan.languages.close,
|
|
label: window.siyuan.languages.close,
|
|
accelerator: window.siyuan.config.keymap.general.closeTab.custom,
|
|
accelerator: window.siyuan.config.keymap.general.closeTab.custom,
|
|
click: () => {
|
|
click: () => {
|
|
- currentTab.parent.removeTab(currentTab.id);
|
|
|
|
|
|
+ tab.parent.removeTab(tab.id);
|
|
}
|
|
}
|
|
}).element);
|
|
}).element);
|
|
if (allTabs.length > 1) {
|
|
if (allTabs.length > 1) {
|
|
@@ -41,12 +40,12 @@ const closeMenu = (model: Model) => {
|
|
label: window.siyuan.languages.closeOthers,
|
|
label: window.siyuan.languages.closeOthers,
|
|
click: async () => {
|
|
click: async () => {
|
|
for (let index = 0; index < allTabs.length; index++) {
|
|
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);
|
|
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);
|
|
}).element);
|
|
@@ -72,8 +71,8 @@ const closeMenu = (model: Model) => {
|
|
await leftTabs[index].parent.removeTab(leftTabs[index].id);
|
|
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);
|
|
}).element);
|
|
@@ -87,8 +86,8 @@ const closeMenu = (model: Model) => {
|
|
await rightTabs[index].parent.removeTab(rightTabs[index].id);
|
|
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);
|
|
}).element);
|
|
@@ -102,8 +101,8 @@ const closeMenu = (model: Model) => {
|
|
await unmodifiedTabs[index].parent.removeTab(unmodifiedTabs[index].id);
|
|
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) {
|
|
} else if (allTabs[0].headElement.parentElement) {
|
|
allTabs[0].parent.switchTab(allTabs[0].headElement, true);
|
|
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);
|
|
window.siyuan.menus.menu.append(new MenuItem({type: "separator"}).element);
|
|
};
|
|
};
|
|
|
|
|
|
-const splitSubMenu = (model: Model) => {
|
|
|
|
|
|
+const splitSubMenu = (tab: Tab) => {
|
|
const subMenus: IMenu[] = [{
|
|
const subMenus: IMenu[] = [{
|
|
icon: "iconSplitLR",
|
|
icon: "iconSplitLR",
|
|
label: window.siyuan.languages.splitLR,
|
|
label: window.siyuan.languages.splitLR,
|
|
click: () => {
|
|
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({
|
|
subMenus.push({
|
|
icon: "iconRight",
|
|
icon: "iconRight",
|
|
label: window.siyuan.languages.splitMoveR,
|
|
label: window.siyuan.languages.splitMoveR,
|
|
click: () => {
|
|
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",
|
|
icon: "iconSplitTB",
|
|
label: window.siyuan.languages.splitTB,
|
|
label: window.siyuan.languages.splitTB,
|
|
click: () => {
|
|
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({
|
|
subMenus.push({
|
|
icon: "iconDown",
|
|
icon: "iconDown",
|
|
label: window.siyuan.languages.splitMoveB,
|
|
label: window.siyuan.languages.splitMoveB,
|
|
click: () => {
|
|
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;
|
|
return subMenus;
|
|
};
|
|
};
|
|
|
|
|
|
-export const initTabMenu = (type: string, model: Model) => {
|
|
|
|
|
|
+export const initTabMenu = (tab: Tab) => {
|
|
window.siyuan.menus.menu.remove();
|
|
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({
|
|
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);
|
|
}).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({
|
|
window.siyuan.menus.menu.append(new MenuItem({
|
|
label: window.siyuan.languages.unpin,
|
|
label: window.siyuan.languages.unpin,
|
|
icon: "iconPin",
|
|
icon: "iconPin",
|
|
click: () => {
|
|
click: () => {
|
|
- model.parent.unpin();
|
|
|
|
|
|
+ tab.unpin();
|
|
}
|
|
}
|
|
}).element);
|
|
}).element);
|
|
} else {
|
|
} else {
|
|
@@ -186,7 +185,7 @@ export const initTabMenu = (type: string, model: Model) => {
|
|
label: window.siyuan.languages.pin,
|
|
label: window.siyuan.languages.pin,
|
|
icon: "iconPin",
|
|
icon: "iconPin",
|
|
click: () => {
|
|
click: () => {
|
|
- model.parent.pin();
|
|
|
|
|
|
+ tab.pin();
|
|
}
|
|
}
|
|
}).element);
|
|
}).element);
|
|
}
|
|
}
|