diff --git a/app/src/protyle/render/blockRender.ts b/app/src/protyle/render/blockRender.ts index 88c3d0a95..6cfc2dcc9 100644 --- a/app/src/protyle/render/blockRender.ts +++ b/app/src/protyle/render/blockRender.ts @@ -1,10 +1,10 @@ -import {hasClosestByAttribute, hasTopClosestByClassName, isInEmbedBlock} from "../util/hasClosest"; +import {hasClosestByAttribute, hasTopClosestByClassName} from "../util/hasClosest"; import {fetchPost, fetchSyncPost} from "../../util/fetch"; import {processRender} from "../util/processCode"; import {highlightRender} from "./highlightRender"; -import {Constants} from "../../constants"; import {genBreadcrumb, improveBreadcrumbAppearance} from "../wysiwyg/renderBacklink"; import {avRender} from "./av/render"; +import {genRenderFrame} from "./util"; export const blockRender = (protyle: IProtyle, element: Element, top?: number) => { let blockElements: Element[] = []; @@ -23,12 +23,8 @@ export const blockRender = (protyle: IProtyle, element: Element, top?: number) = } // 需置于请求返回前,否则快速滚动会导致重复加载 https://ld246.com/article/1666857862494?r=88250 item.setAttribute("data-render", "true"); + genRenderFrame(item); item.style.height = (item.clientHeight - 4) + "px"; // 减少抖动 https://ld246.com/article/1668669380171 - item.innerHTML = `
- - - -
${item.lastElementChild.outerHTML}`; const content = Lute.UnEscapeHTMLStr(item.getAttribute("data-content")); let breadcrumb: boolean | string = item.getAttribute("breadcrumb"); if (breadcrumb) { @@ -112,13 +108,10 @@ const renderEmbed = (blocks: { html += `
${breadcrumbHTML}${blocksItem.block.content}
`; }); if (blocks.length > 0) { - item.lastElementChild.insertAdjacentHTML("beforebegin", html + - // 辅助上下移动时进行选中 - `
${Constants.ZWSP}
`); + item.firstElementChild.insertAdjacentHTML("afterend", html); improveBreadcrumbAppearance(item.querySelector(".protyle-wysiwyg__embed")); } else { - item.lastElementChild.insertAdjacentHTML("beforebegin", `
${window.siyuan.languages.refExpired}
-
${Constants.ZWSP}
`); + item.firstElementChild.insertAdjacentHTML("afterend", `
${window.siyuan.languages.refExpired}
`); } processRender(item); diff --git a/app/src/protyle/render/util.ts b/app/src/protyle/render/util.ts index a1c26b0cb..7bf606174 100644 --- a/app/src/protyle/render/util.ts +++ b/app/src/protyle/render/util.ts @@ -1,3 +1,6 @@ +import {isInEmbedBlock} from "../util/hasClosest"; +import {Constants} from "../../constants"; + export const genIconHTML = (element?: false | HTMLElement) => { let enable = true; if (element) { @@ -14,6 +17,17 @@ export const genIconHTML = (element?: false | HTMLElement) => { `; }; +export const genRenderFrame = (renderElement:Element) => { + if (renderElement.querySelector(".protyle-icons")) { + return; + } + renderElement.insertAdjacentHTML("afterbegin",`
+ + + +
${Constants.ZWSP}
`) +} + export const processClonePHElement = (item: Element) => { if (item.getAttribute("data-type") === "NodeHTMLBlock") { const phElement = item.querySelector("protyle-html"); diff --git a/app/src/protyle/util/insertHTML.ts b/app/src/protyle/util/insertHTML.ts index ceaf3e74b..726b226a4 100644 --- a/app/src/protyle/util/insertHTML.ts +++ b/app/src/protyle/util/insertHTML.ts @@ -282,6 +282,7 @@ const processTable = (range: Range, html: string, protyle: IProtyle, blockElemen export const insertHTML = (html: string, protyle: IProtyle, isBlock = false, // 移动端插入嵌入块时,获取到的 range 为旧值 useProtyleRange = false, + // 在开头粘贴块则插入上方 insertByCursor = false) => { if (html === "") { return; diff --git a/app/src/protyle/util/selection.ts b/app/src/protyle/util/selection.ts index 1cff3011e..252b5791b 100644 --- a/app/src/protyle/util/selection.ts +++ b/app/src/protyle/util/selection.ts @@ -8,6 +8,7 @@ import { import {hasClosestByAttribute, hasClosestByTag} from "./hasClosest"; import {countBlockWord, countSelectWord} from "../../layout/status"; import {hideElements} from "../ui/hideElements"; +import {genRenderFrame} from "../render/util"; const selectIsEditor = (editor: Element, range?: Range) => { if (!range) { @@ -547,14 +548,9 @@ export const focusBlock = (element: Element, parentElement?: HTMLElement, toStar range.selectNodeContents(element.firstElementChild); setRange = true; } else if (type === "NodeBlockQueryEmbed") { - if (element.lastElementChild.previousElementSibling?.firstChild) { - range.selectNodeContents(element.lastElementChild.previousElementSibling.firstChild); - range.collapse(true); - } else { - // https://github.com/siyuan-note/siyuan/issues/5267 - range.selectNodeContents(element); - range.collapse(true); - } + genRenderFrame(element); + range.selectNodeContents(element.lastElementChild.previousElementSibling.firstChild); + range.collapse(true); setRange = true; } else if (["NodeMathBlock", "NodeHTMLBlock"].includes(type)) { if (element.lastElementChild.previousElementSibling?.lastElementChild?.firstChild) {