2024-11-25 17:41:00 +08:00
|
|
|
import { t } from "../services/i18n.js";
|
2025-01-22 20:02:20 +02:00
|
|
|
import contextMenu, { type ContextMenuEvent, type MenuItem } from "./context_menu.js";
|
|
|
|
import appContext, { type CommandNames } from "../components/app_context.js";
|
2025-01-09 18:36:24 +02:00
|
|
|
import type { ViewScope } from "../services/link.js";
|
2021-09-24 21:40:02 +02:00
|
|
|
|
2025-01-22 19:33:53 +02:00
|
|
|
function openContextMenu(notePath: string, e: ContextMenuEvent, viewScope: ViewScope = {}, hoistedNoteId: string | null = null) {
|
2021-09-24 21:40:02 +02:00
|
|
|
contextMenu.show({
|
|
|
|
x: e.pageX,
|
|
|
|
y: e.pageY,
|
2025-01-22 20:02:20 +02:00
|
|
|
items: getItems(),
|
|
|
|
selectMenuItemHandler: ({ command }) => handleLinkContextMenuItem(command, notePath, viewScope, hoistedNoteId)
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2025-01-22 21:07:40 +02:00
|
|
|
function getItems(): MenuItem<CommandNames>[] {
|
2025-01-22 20:02:20 +02:00
|
|
|
return [
|
|
|
|
{ title: t("link_context_menu.open_note_in_new_tab"), command: "openNoteInNewTab", uiIcon: "bx bx-link-external" },
|
|
|
|
{ title: t("link_context_menu.open_note_in_new_split"), command: "openNoteInNewSplit", uiIcon: "bx bx-dock-right" },
|
|
|
|
{ title: t("link_context_menu.open_note_in_new_window"), command: "openNoteInNewWindow", uiIcon: "bx bx-window-open" }
|
|
|
|
];
|
|
|
|
}
|
2022-12-18 22:05:06 +01:00
|
|
|
|
2025-01-22 20:02:20 +02:00
|
|
|
function handleLinkContextMenuItem(command: string | undefined, notePath: string, viewScope = {}, hoistedNoteId: string | null = null) {
|
|
|
|
if (!hoistedNoteId) {
|
2025-03-03 01:04:42 +01:00
|
|
|
hoistedNoteId = appContext.tabManager.getActiveContext()?.hoistedNoteId ?? null;
|
2025-01-22 20:02:20 +02:00
|
|
|
}
|
2021-09-24 21:40:02 +02:00
|
|
|
|
2025-01-22 20:02:20 +02:00
|
|
|
if (command === "openNoteInNewTab") {
|
|
|
|
appContext.tabManager.openContextWithNote(notePath, { hoistedNoteId, viewScope });
|
|
|
|
} else if (command === "openNoteInNewSplit") {
|
2025-03-03 01:04:42 +01:00
|
|
|
const subContexts = appContext.tabManager.getActiveContext()?.getSubContexts();
|
|
|
|
|
|
|
|
if (!subContexts) {
|
|
|
|
logError("subContexts is null");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2025-01-22 20:02:20 +02:00
|
|
|
const { ntxId } = subContexts[subContexts.length - 1];
|
|
|
|
|
|
|
|
appContext.triggerCommand("openNewNoteSplit", { ntxId, notePath, hoistedNoteId, viewScope });
|
|
|
|
} else if (command === "openNoteInNewWindow") {
|
|
|
|
appContext.triggerCommand("openInWindow", { notePath, hoistedNoteId, viewScope });
|
|
|
|
}
|
2021-09-24 21:40:02 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
export default {
|
2025-01-22 20:02:20 +02:00
|
|
|
getItems,
|
|
|
|
handleLinkContextMenuItem,
|
2021-09-24 21:40:02 +02:00
|
|
|
openContextMenu
|
2025-01-09 18:07:02 +02:00
|
|
|
};
|