diff --git a/app/src/protyle/util/insertHTML.ts b/app/src/protyle/util/insertHTML.ts index c1b1dfedf..28c70b20a 100644 --- a/app/src/protyle/util/insertHTML.ts +++ b/app/src/protyle/util/insertHTML.ts @@ -88,13 +88,11 @@ export const insertHTML = (html: string, protyle: IProtyle, isBlock = false) => range.insertNode(tempElement.content.cloneNode(true)); range.collapse(false); blockElement.setAttribute("updated", dayjs().format("YYYYMMDDHHmmss")); - const trimStartText = editableElement ? editableElement.textContent.trimStart() : ""; - if (editableElement && - // 引用内容为 ```test% 会导致错误 - !editableElement.querySelector('[data-type="block-ref"]') && - (trimStartText.startsWith("```") || trimStartText.startsWith("~~~") || trimStartText.startsWith("···") || + // 使用 innerHTML,避免行内元素为代码块 + const trimStartText = editableElement ? editableElement.innerHTML.trimStart() : ""; + if (editableElement && (trimStartText.startsWith("```") || trimStartText.startsWith("~~~") || trimStartText.startsWith("···") || trimStartText.indexOf("\n```") > -1 || trimStartText.indexOf("\n~~~") > -1 || trimStartText.indexOf("\n···") > -1)) { - if (editableElement.innerHTML.indexOf("\n") === -1 && trimStartText.replace(/·|~/g, "`").replace(/^`{3,}/g, "").indexOf("`") > -1) { + if (trimStartText.indexOf("\n") === -1 && trimStartText.replace(/·|~/g, "`").replace(/^`{3,}/g, "").indexOf("`") > -1) { // ```test` 不处理 } else { let replaceInnerHTML = editableElement.innerHTML.replace(/^(~|·|`){3,}/g, "```").replace(/\n(~|·|`){3,}/g, "\n```").trim(); diff --git a/app/src/protyle/wysiwyg/enter.ts b/app/src/protyle/wysiwyg/enter.ts index a96506dd1..7f775a1d6 100644 --- a/app/src/protyle/wysiwyg/enter.ts +++ b/app/src/protyle/wysiwyg/enter.ts @@ -210,11 +210,10 @@ export const enter = (blockElement: HTMLElement, range: Range, protyle: IProtyle item.classList.remove("img--select"); }); // 代码块 - const trimStartText = editableElement.textContent.trimStart(); - if (!editableElement.querySelector('[data-type="block-ref"]') && - (trimStartText.startsWith("```") || trimStartText.startsWith("···") || trimStartText.startsWith("~~~") || - trimStartText.indexOf("\n```") > -1 || trimStartText.indexOf("\n~~~") > -1 || trimStartText.indexOf("\n···") > -1)) { - if (editableElement.innerHTML.indexOf("\n") === -1 && trimStartText.replace(/·|~/g, "`").replace(/^`{3,}/g, "").indexOf("`") > -1) { + const trimStartText = editableElement.innerHTML.trimStart(); + if (trimStartText.startsWith("```") || trimStartText.startsWith("···") || trimStartText.startsWith("~~~") || + trimStartText.indexOf("\n```") > -1 || trimStartText.indexOf("\n~~~") > -1 || trimStartText.indexOf("\n···") > -1) { + if (trimStartText.indexOf("\n") === -1 && trimStartText.replace(/·|~/g, "`").replace(/^`{3,}/g, "").indexOf("`") > -1) { // ```test` 不处理,正常渲染为段落块 } else { const oldHTML = blockElement.outerHTML; diff --git a/app/src/protyle/wysiwyg/input.ts b/app/src/protyle/wysiwyg/input.ts index 37c091ba1..21aa9415f 100644 --- a/app/src/protyle/wysiwyg/input.ts +++ b/app/src/protyle/wysiwyg/input.ts @@ -61,14 +61,12 @@ export const input = async (protyle: IProtyle, blockElement: HTMLElement, range: if (editElement.innerHTML === "》") { editElement.innerHTML = ">"; } - const trimStartText = editElement.textContent.trimStart(); - if (!editElement.querySelector('[data-type="block-ref"]') && - (trimStartText.startsWith("````") || trimStartText.startsWith("····") || trimStartText.startsWith("~~~~")) && - editElement.innerHTML.indexOf("\n") === -1) { + const trimStartText = editElement.innerHTML.trimStart(); + if ((trimStartText.startsWith("````") || trimStartText.startsWith("····") || trimStartText.startsWith("~~~~")) && + trimStartText.indexOf("\n") === -1) { // 超过三个标记符就可以形成为代码块,下方会处理 - } else if (!editElement.querySelector('[data-type="block-ref"]') && - (trimStartText.startsWith("```") || trimStartText.startsWith("···") || trimStartText.startsWith("~~~")) && - editElement.innerHTML.indexOf("\n") === -1 && trimStartText.replace(/·|~/g, "`").replace(/^`{3,}/g, "").indexOf("`") === -1) { + } else if ((trimStartText.startsWith("```") || trimStartText.startsWith("···") || trimStartText.startsWith("~~~")) && + trimStartText.indexOf("\n") === -1 && trimStartText.replace(/·|~/g, "`").replace(/^`{3,}/g, "").indexOf("`") === -1) { // ```test` 后续处理,```test 不处理 updateTransaction(protyle, id, blockElement.outerHTML, protyle.wysiwyg.lastHTMLs[id]); wbrElement.remove(); @@ -110,10 +108,9 @@ export const input = async (protyle: IProtyle, blockElement: HTMLElement, range: todoOldHTML = blockElement.outerHTML; } } else { - if (!editElement.querySelector('[data-type="block-ref"]') && - (trimStartText.startsWith("```") || trimStartText.startsWith("~~~") || trimStartText.startsWith("···") || - editElement.textContent.indexOf("\n```") > -1 || editElement.textContent.indexOf("\n~~~") > -1 || editElement.textContent.indexOf("\n···") > -1)) { - if (editElement.innerHTML.indexOf("\n") === -1 && editElement.textContent.replace(/·|~/g, "`").replace(/^`{3,}/g, "").indexOf("`") > -1) { + if (trimStartText.startsWith("```") || trimStartText.startsWith("~~~") || trimStartText.startsWith("···") || + trimStartText.indexOf("\n```") > -1 || trimStartText.indexOf("\n~~~") > -1 || trimStartText.indexOf("\n···") > -1) { + if (trimStartText.indexOf("\n") === -1 && trimStartText.replace(/·|~/g, "`").replace(/^`{3,}/g, "").indexOf("`") > -1) { // ```test` 不处理,正常渲染为段落块 } else { let replaceInnerHTML = editElement.innerHTML.replace(/^(~|·|`){3,}/g, "```").replace(/\n(~|·|`){3,}/g, "\n```").trim();