From 3eacf3008be853885ee4fd6981cc6bec280f9427 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Sun, 8 Feb 2026 11:51:27 +0800 Subject: [PATCH] :art: Improve heading block copying on Android and HarmonyOS https://github.com/siyuan-note/siyuan/issues/16946 Signed-off-by: Daniel <845765@qq.com> --- app/src/protyle/gutter/index.ts | 4 ++-- app/src/protyle/util/compatibility.ts | 6 ++++++ app/src/types/index.d.ts | 4 ++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/app/src/protyle/gutter/index.ts b/app/src/protyle/gutter/index.ts index d2913ae29..06a976b24 100644 --- a/app/src/protyle/gutter/index.ts +++ b/app/src/protyle/gutter/index.ts @@ -1834,9 +1834,9 @@ export class Gutter { removeFoldAttr: nodeElement.getAttribute("fold") !== "1" }, (response) => { if (isInAndroid()) { - window.JSAndroid.writeHTMLClipboard(protyle.lute.BlockDOM2StdMd(response.data).trimEnd(), response.data + Constants.ZWSP); + window.JSAndroid.writeSiYuanHTMLClipboard(protyle.lute.BlockDOM2StdMd(response.data).trimEnd(), protyle.lute.BlockDOM2HTML(response.data).trimEnd(), response.data + Constants.ZWSP); } else if (isInHarmony()) { - window.JSHarmony.writeHTMLClipboard(protyle.lute.BlockDOM2StdMd(response.data).trimEnd(), response.data + Constants.ZWSP); + window.JSHarmony.writeSiYuanHTMLClipboard(protyle.lute.BlockDOM2StdMd(response.data).trimEnd(), protyle.lute.BlockDOM2HTML(response.data).trimEnd(), response.data + Constants.ZWSP); } else { writeText(response.data + Constants.ZWSP); } diff --git a/app/src/protyle/util/compatibility.ts b/app/src/protyle/util/compatibility.ts index 3d2846430..6cdf8ec77 100644 --- a/app/src/protyle/util/compatibility.ts +++ b/app/src/protyle/util/compatibility.ts @@ -157,6 +157,9 @@ export const readClipboard = async () => { const textObj = getTextSiyuanFromTextHTML(text.textHTML); text.textHTML = textObj.textHtml; text.siyuanHTML = textObj.textSiyuan; + if (!text.siyuanHTML) { + text.siyuanHTML = window.JSAndroid.readSiYuanHTMLClipboard(); + } return text; } if (isInHarmony()) { @@ -165,6 +168,9 @@ export const readClipboard = async () => { const textObj = getTextSiyuanFromTextHTML(text.textHTML); text.textHTML = textObj.textHtml; text.siyuanHTML = textObj.textSiyuan; + if (!text.siyuanHTML) { + text.siyuanHTML = window.JSHarmony.readSiYuanHTMLClipboard(); + } return text; } if (typeof navigator.clipboard === "undefined") { diff --git a/app/src/types/index.d.ts b/app/src/types/index.d.ts index c78506fe9..291d1d552 100644 --- a/app/src/types/index.d.ts +++ b/app/src/types/index.d.ts @@ -243,9 +243,11 @@ interface Window { changeStatusBarColor(color: string, mode: number): void writeClipboard(text: string): void writeHTMLClipboard(text: string, html: string): void + writeSiYuanHTMLClipboard(text: string, html: string, siyuanHTML: string): void writeImageClipboard(uri: string): void readClipboard(): string readHTMLClipboard(): string + readSiYuanHTMLClipboard(): string getBlockURL(): string hideKeyboard(): void showKeyboard(): void @@ -261,8 +263,10 @@ interface Window { changeStatusBarColor(color: string, mode: number): void writeClipboard(text: string): void writeHTMLClipboard(text: string, html: string): void + writeSiYuanHTMLClipboard(text: string, html: string, siyuanHTML: string): void readClipboard(): string readHTMLClipboard(): string + readSiYuanHTMLClipboard(): string returnDesktop(): void print(title: string, html: string): void getScreenWidthPx(): number