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) {