diff --git a/app/appearance/langs/ar_SA.json b/app/appearance/langs/ar_SA.json index 1bbb7afdd..bcd1edfc4 100644 --- a/app/appearance/langs/ar_SA.json +++ b/app/appearance/langs/ar_SA.json @@ -1180,6 +1180,7 @@ "newFileTip": "الرجاء فتح دفتر الملاحظات أولاً", "copyBlockRef": "نسخ كمرجع كتلة", "copyBlockEmbed": "نسخ ككتلة تضمين", + "copyMarkdown": "نسخ كـ Markdown", "linkLevel": "العمق", "mark": "تمييز", "splitLR": "تقسيم لليمين", diff --git a/app/appearance/langs/de_DE.json b/app/appearance/langs/de_DE.json index 47f75f90f..07a3a1c5e 100644 --- a/app/appearance/langs/de_DE.json +++ b/app/appearance/langs/de_DE.json @@ -1180,6 +1180,7 @@ "newFileTip": "Bitte öffnen Sie zuerst ein Notizbuch", "copyBlockRef": "Blockreferenz kopieren", "copyBlockEmbed": "Blockeinbettung kopieren", + "copyMarkdown": "Als Markdown kopieren", "linkLevel": "Tiefe", "mark": "Markieren", "splitLR": "Rechts aufteilen", diff --git a/app/appearance/langs/en_US.json b/app/appearance/langs/en_US.json index 9e821ddd4..61fbd4071 100644 --- a/app/appearance/langs/en_US.json +++ b/app/appearance/langs/en_US.json @@ -1180,6 +1180,7 @@ "newFileTip": "Please open a notebook first", "copyBlockRef": "Copy block ref", "copyBlockEmbed": "Copy block embed", + "copyMarkdown": "Copy as Markdown", "linkLevel": "Depth", "mark": "Mark", "splitLR": "Split Right", diff --git a/app/appearance/langs/es_ES.json b/app/appearance/langs/es_ES.json index 383e9d0c8..9e33a5d54 100644 --- a/app/appearance/langs/es_ES.json +++ b/app/appearance/langs/es_ES.json @@ -1180,6 +1180,7 @@ "newFileTip": "Por favor, abra primero un cuaderno de notas", "copyBlockRef": "Copiar bloque referencia", "copyBlockEmbed": "Copiar bloque incrustado", + "copyMarkdown": "Copiar como Markdown", "linkLevel": "Profundidad", "mark": "Marca", "splitLR": "Dividir a la derecha", diff --git a/app/appearance/langs/fr_FR.json b/app/appearance/langs/fr_FR.json index 982d32481..9f1ee5ff6 100644 --- a/app/appearance/langs/fr_FR.json +++ b/app/appearance/langs/fr_FR.json @@ -1180,6 +1180,7 @@ "newFileTip": "Veuillez d'abord ouvrir un carnet de notes", "copyBlockRef": "Copier bloc réf", "copyBlockEmbed": "Copier le bloc en tant que bloc incorporé", + "copyMarkdown": "Copier comme Markdown", "linkLevel": "Niveaux", "mark": "Mark", "splitLR": "Split Droit", diff --git a/app/appearance/langs/he_IL.json b/app/appearance/langs/he_IL.json index 5b7274fb1..d4ebbe7c9 100644 --- a/app/appearance/langs/he_IL.json +++ b/app/appearance/langs/he_IL.json @@ -1180,6 +1180,7 @@ "newFileTip": "אנא פתח מחברת קודם", "copyBlockRef": "העתק הפניה לבלוק", "copyBlockEmbed": "העתק הטמעה לבלוק", + "copyMarkdown": "העתק כ-Markdown", "linkLevel": "עומק", "mark": "סמן", "splitLR": "חלק ימינה", diff --git a/app/appearance/langs/it_IT.json b/app/appearance/langs/it_IT.json index d811d2bfe..41683f622 100644 --- a/app/appearance/langs/it_IT.json +++ b/app/appearance/langs/it_IT.json @@ -1180,6 +1180,7 @@ "newFileTip": "Si prega di aprire prima un taccuino", "copyBlockRef": "Copia riferimento blocco", "copyBlockEmbed": "Copia incorporamento blocco", + "copyMarkdown": "Copia come Markdown", "linkLevel": "Profondità", "mark": "Segna", "splitLR": "Dividi a destra", diff --git a/app/appearance/langs/ja_JP.json b/app/appearance/langs/ja_JP.json index 830dd3edb..efe37d3d9 100644 --- a/app/appearance/langs/ja_JP.json +++ b/app/appearance/langs/ja_JP.json @@ -1180,6 +1180,7 @@ "newFileTip": "最初にノートブックを開いてください", "copyBlockRef": "ブロック参照としてコピー", "copyBlockEmbed": "埋め込みブロックとしてコピー", + "copyMarkdown": "Markdown としてコピー", "linkLevel": "深さ", "mark": "ハイライト", "splitLR": "右に分割", diff --git a/app/appearance/langs/pl_PL.json b/app/appearance/langs/pl_PL.json index 092d8ff85..0968048d0 100644 --- a/app/appearance/langs/pl_PL.json +++ b/app/appearance/langs/pl_PL.json @@ -1180,6 +1180,7 @@ "newFileTip": "Proszę najpierw otworzyć notes", "copyBlockRef": "Skopiuj odniesienie do bloku", "copyBlockEmbed": "Skopiuj blok osadzony", + "copyMarkdown": "Skopiuj jako Markdown", "linkLevel": "Głębokość", "mark": "Zaznacz", "splitLR": "Podziel w prawo", diff --git a/app/appearance/langs/pt_BR.json b/app/appearance/langs/pt_BR.json index dceafde79..09364cd13 100644 --- a/app/appearance/langs/pt_BR.json +++ b/app/appearance/langs/pt_BR.json @@ -1180,6 +1180,7 @@ "newFileTip": "Por favor, abra um bloco de notas primeiro", "copyBlockRef": "Copiar referência de bloco", "copyBlockEmbed": "Copiar bloco incorporado", + "copyMarkdown": "Copiar como Markdown", "linkLevel": "Profundidade", "mark": "Marca", "splitLR": "Dividir à Direita", diff --git a/app/appearance/langs/ru_RU.json b/app/appearance/langs/ru_RU.json index 674a42eab..07eeb1a20 100644 --- a/app/appearance/langs/ru_RU.json +++ b/app/appearance/langs/ru_RU.json @@ -1180,6 +1180,7 @@ "newFileTip": "Пожалуйста, сначала откройте блокнот", "copyBlockRef": "Скопировать ссылку на блок", "copyBlockEmbed": "Скопировать встроенный блок", + "copyMarkdown": "Скопировать как Markdown", "linkLevel": "Глубина", "mark": "Значить", "splitLR": "Разделить направо", diff --git a/app/appearance/langs/zh_CHT.json b/app/appearance/langs/zh_CHT.json index 3807a8937..b575614db 100644 --- a/app/appearance/langs/zh_CHT.json +++ b/app/appearance/langs/zh_CHT.json @@ -1180,6 +1180,7 @@ "newFileTip": "請先打開一個筆記本", "copyBlockRef": "複製為塊引用", "copyBlockEmbed": "複製為嵌入塊", + "copyMarkdown": "複製為 Markdown", "linkLevel": "層級", "mark": "標記", "splitLR": "向右並排顯示", diff --git a/app/appearance/langs/zh_CN.json b/app/appearance/langs/zh_CN.json index 310492d55..a4a9329df 100644 --- a/app/appearance/langs/zh_CN.json +++ b/app/appearance/langs/zh_CN.json @@ -1180,6 +1180,7 @@ "newFileTip": "请先打开一个笔记本", "copyBlockRef": "复制为块引用", "copyBlockEmbed": "复制为嵌入块", + "copyMarkdown": "复制为 Markdown", "linkLevel": "层级", "mark": "标记", "splitLR": "向右分屏", diff --git a/app/src/menus/commonMenuItem.ts b/app/src/menus/commonMenuItem.ts index 0dbd3e1be..055742015 100644 --- a/app/src/menus/commonMenuItem.ts +++ b/app/src/menus/commonMenuItem.ts @@ -6,7 +6,7 @@ import {getSearch, isMobile, isValidAttrName} from "../util/functions"; import {isLocalPath, movePathTo, moveToPath, pathPosix} from "../util/pathName"; import {MenuItem} from "./Menu"; import {saveExport} from "../protyle/export"; -import {isInAndroid, isInHarmony, openByMobile} from "../protyle/util/compatibility"; +import {isInAndroid, isInHarmony, openByMobile, writeText} from "../protyle/util/compatibility"; import {fetchPost, fetchSyncPost} from "../util/fetch"; import {hideMessage, showMessage} from "../dialog/message"; import {Dialog} from "../dialog"; @@ -380,8 +380,8 @@ export const openAttr = (nodeElement: Element, focusName = "bookmark", protyle?: }); }; -export const copySubMenu = (ids: string[], accelerator = true, focusElement?: Element) => { - return [{ +export const copySubMenu = (ids: string[], accelerator = true, focusElement?: Element, stdMarkdownId?: string) => { + const menuItems = [{ id: "copyBlockRef", iconHTML: "", accelerator: accelerator ? window.siyuan.config.keymap.editor.general.copyBlockRef.custom : undefined, @@ -448,6 +448,32 @@ export const copySubMenu = (ids: string[], accelerator = true, focusElement?: El } } }]; + + if (stdMarkdownId) { + menuItems.push({ + id: "copyMarkdown", + iconHTML: "", + label: window.siyuan.languages.copyMarkdown, + accelerator: undefined, + click: async () => { + const response = await fetchSyncPost("/api/export/exportMdContent", { + id: stdMarkdownId, + refMode: 3, + embedMode: 1, + yfm: false, + fillCSSVar: false, + adjustHeadingLevel: false + }); + const text = response.data.content; + writeText(text); + if (focusElement) { + focusBlock(focusElement); + } + } + }); + } + + return menuItems; }; export const exportMd = (id: string) => { diff --git a/app/src/protyle/header/openTitleMenu.ts b/app/src/protyle/header/openTitleMenu.ts index ad1c9a5d5..beca1629f 100644 --- a/app/src/protyle/header/openTitleMenu.ts +++ b/app/src/protyle/header/openTitleMenu.ts @@ -42,7 +42,7 @@ export const openTitleMenu = (protyle: IProtyle, position: IPosition) => { label: window.siyuan.languages.copy, icon: "iconCopy", type: "submenu", - submenu: copySubMenu([protyle.block.rootID]) + submenu: copySubMenu([protyle.block.rootID], true, undefined, protyle.block.showAll ? protyle.block.id : protyle.block.rootID) }).element); if (!protyle.disabled) { window.siyuan.menus.menu.append(movePathToMenu([protyle.path]));