From fa6f57dc976a06647575b015c1fde166080eba54 Mon Sep 17 00:00:00 2001 From: Vanessa Date: Sat, 20 Aug 2022 13:13:21 +0800 Subject: [PATCH] :art: fix https://github.com/siyuan-note/siyuan/issues/5661 --- app/src/menus/protyle.ts | 24 ++++++++++++++++++++++ app/src/protyle/gutter/index.ts | 36 +++++++++++++++++++++++++++++++++ app/src/types/protyle.d.ts | 2 ++ 3 files changed, 62 insertions(+) diff --git a/app/src/menus/protyle.ts b/app/src/menus/protyle.ts index 961768d5b..3992bf816 100644 --- a/app/src/menus/protyle.ts +++ b/app/src/menus/protyle.ts @@ -251,6 +251,30 @@ export const contentMenu = (protyle: IProtyle, nodeElement: Element) => { document.execCommand("copy"); } }).element); + window.siyuan.menus.menu.append(new MenuItem({ + label: window.siyuan.languages.copyPlainText, + click() { + focusByRange(getEditorRange(nodeElement)); + writeText(range.toString()) + } + }).element); + window.siyuan.menus.menu.append(new MenuItem({ + label: window.siyuan.languages.copy +" HTML", + click() { + focusByRange(getEditorRange(nodeElement)); + let html = '' + range.cloneContents().childNodes.forEach(item => { + if (item.nodeType === 3) { + html += item.textContent + } else { + html += (item as Element).outerHTML + } + }) + const tempElement = document.createElement('template') + tempElement.innerHTML = protyle.lute.BlockDOM2HTML(html) + writeText(tempElement.content.firstElementChild.innerHTML); + } + }).element); window.siyuan.menus.menu.append(new MenuItem({ icon: "iconCut", accelerator: "⌘X", diff --git a/app/src/protyle/gutter/index.ts b/app/src/protyle/gutter/index.ts index bac321287..a700ada4a 100644 --- a/app/src/protyle/gutter/index.ts +++ b/app/src/protyle/gutter/index.ts @@ -485,6 +485,29 @@ export class Gutter { } } }).element); + window.siyuan.menus.menu.append(new MenuItem({ + label: window.siyuan.languages.copyPlainText, + click() { + let html = ""; + selectsElement.forEach(item => { + const editElement = getContenteditableElement(item); + if (editElement) { + html += editElement.textContent + "\n"; + } + }); + writeText(html.trimEnd()); + } + }).element); + window.siyuan.menus.menu.append(new MenuItem({ + label: window.siyuan.languages.copy + " HTML", + click() { + let html = ""; + selectsElement.forEach(item => { + html += item.outerHTML + }); + writeText(protyle.lute.BlockDOM2HTML(html)); + } + }).element); if (window.siyuan.config.readonly) { return; } @@ -826,6 +849,19 @@ export class Gutter { document.execCommand("copy"); } } + }, { + label: window.siyuan.languages.copyPlainText, + click() { + const editElement = getContenteditableElement(nodeElement); + if (editElement) { + writeText(editElement.textContent); + } + } + }, { + label: window.siyuan.languages.copy + " HTML", + click() { + writeText(protyle.lute.BlockDOM2HTML(nodeElement.outerHTML)); + } }, { label: window.siyuan.languages.duplicate, disabled: window.siyuan.config.readonly, diff --git a/app/src/types/protyle.d.ts b/app/src/types/protyle.d.ts index f98ea6a30..15b0a102d 100644 --- a/app/src/types/protyle.d.ts +++ b/app/src/types/protyle.d.ts @@ -206,6 +206,8 @@ declare class Lute { public IsValidLinkDest(text: string): boolean; public BlockDOM2InlineBlockDOM(html: string): string; + + public BlockDOM2HTML(html: string): string; } declare const webkitAudioContext: {