diff --git a/app/src/boot/globalEvent/keydown.ts b/app/src/boot/globalEvent/keydown.ts index c9c85d2f4..fd9a014b7 100644 --- a/app/src/boot/globalEvent/keydown.ts +++ b/app/src/boot/globalEvent/keydown.ts @@ -368,7 +368,7 @@ const editKeydown = (app: App, event: KeyboardEvent) => { } if (!isFileFocus && matchHotKey(window.siyuan.config.keymap.editor.general.spaceRepetition.custom, event)) { fetchPost("/api/riff/getTreeRiffDueCards", {rootID: protyle.block.rootID}, (response) => { - openCardByData(app, response.data, "doc", protyle.block.rootID, protyle.title.editElement.textContent || window.siyuan.languages.untitled); + openCardByData(app, response.data, "doc", protyle.block.rootID, protyle.title?.editElement.textContent || window.siyuan.languages.untitled); }); event.preventDefault(); return true; diff --git a/app/src/card/openCard.ts b/app/src/card/openCard.ts index ccd6b8cbb..bd3096793 100644 --- a/app/src/card/openCard.ts +++ b/app/src/card/openCard.ts @@ -13,6 +13,9 @@ import {escapeHtml} from "../util/escape"; /// #if !MOBILE import {openFile} from "../editor/util"; /// #endif +/// #if !BROWSER +import {ipcRenderer} from "electron"; +/// #endif import * as dayjs from "dayjs"; import {getDisplayName, movePathTo} from "../util/pathName"; import {App} from "../index"; @@ -84,8 +87,8 @@ export const genCardHTML = (options: {
-
- +
+
`; /// #endif @@ -406,7 +409,7 @@ export const bindCardEvent = async (options: { /// #if MOBILE menu.fullscreen(); /// #else - const rect = target.getBoundingClientRect(); + const rect = moreElement.getBoundingClientRect(); menu.open({ x: rect.left, y: rect.bottom @@ -417,25 +420,62 @@ export const bindCardEvent = async (options: { /// #if !MOBILE const sticktabElement = hasClosestByAttribute(target, "data-type", "sticktab"); if (sticktabElement) { - openFile({ - app: options.app, - position: "right", - custom: { - icon: "iconRiffCard", - title: window.siyuan.languages.spaceRepetition, - data: { - cardsData: options.cardsData, - index, - cardType: filterElement.getAttribute("data-cardtype") as TCardType, - id: docId, - title: options.title - }, - id: "siyuan-card" - }, + const stickMenu = new Menu(); + stickMenu.addItem({ + icon: "iconLayoutRight", + label: window.siyuan.languages.insertRight, + click() { + openFile({ + app: options.app, + position: "right", + custom: { + icon: "iconRiffCard", + title: window.siyuan.languages.spaceRepetition, + data: { + cardsData: options.cardsData, + index, + cardType: filterElement.getAttribute("data-cardtype") as TCardType, + id: docId, + title: options.title + }, + id: "siyuan-card" + }, + }); + options.dialog.destroy(); + } + }); + /// #if !BROWSER + stickMenu.addItem({ + icon: "iconOpenWindow", + label: window.siyuan.languages.openByNewWindow, + click() { + const json = { + "title": window.siyuan.languages.spaceRepetition, + "icon": "iconRiffCard", + "instance": "Tab", + "children": { + "instance": "Custom", + "customModelType": "siyuan-card", + "customModelData": { + "cardType": filterElement.getAttribute("data-cardtype"), + "id": docId, + "title": options.title + } + } + }; + ipcRenderer.send(Constants.SIYUAN_OPEN_WINDOW, { + // 需要 encode, 否则 https://github.com/siyuan-note/siyuan/issues/9343 + url: `${window.location.protocol}//${window.location.host}/stage/build/app/window.html?v=${Constants.SIYUAN_VERSION}&json=${encodeURIComponent(JSON.stringify(json))}` + }); + options.dialog.destroy(); + } + }); + /// #endif + const rect = sticktabElement.getBoundingClientRect(); + stickMenu.open({ + x: rect.left, + y: rect.bottom }); - if (options.dialog) { - options.dialog.destroy(); - } event.stopPropagation(); event.preventDefault(); return;