diff --git a/app/src/protyle/render/blockRender.ts b/app/src/protyle/render/blockRender.ts index d6770f5f3..9eb17def3 100644 --- a/app/src/protyle/render/blockRender.ts +++ b/app/src/protyle/render/blockRender.ts @@ -41,53 +41,98 @@ export const blockRender = (protyle: IProtyle, element: Element, top?: number) = if (sbElement) { breadcrumb = false; } - fetchPost("/api/search/searchEmbedBlock", { - embedBlockID: item.getAttribute("data-node-id"), - stmt: content, - headingMode: item.getAttribute("custom-heading-mode") === "1" ? 1 : 0, - excludeIDs: [item.getAttribute("data-node-id"), protyle.block.rootID], - breadcrumb - }, (response) => { - const rotateElement = item.querySelector(".fn__rotate"); - if (rotateElement) { - rotateElement.classList.remove("fn__rotate"); - } - let html = ""; - response.data.blocks.forEach((blocksItem: { block: IBlock, blockPaths: IBreadcrumb[] }) => { - let breadcrumbHTML = ""; - if (blocksItem.blockPaths.length !== 0) { - breadcrumbHTML = genBreadcrumb(blocksItem.blockPaths, true); + if (content.startsWith("//!js")) { + try { + const includeIDs = new Function(content)(); + if (includeIDs instanceof Promise) { + includeIDs.then((promiseIds) => { + if (Array.isArray(promiseIds)) { + fetchPost("/api/search/getEmbedBlock", { + embedBlockID: item.getAttribute("data-node-id"), + includeIDs: promiseIds, + headingMode: item.getAttribute("custom-heading-mode") === "1" ? 1 : 0, + breadcrumb + }, (response) => { + renderEmbed(response.data.blocks || [], protyle, item, top); + }); + } else { + renderEmbed([], protyle, item, top); + } + }).catch(() => { + renderEmbed([], protyle, item, top); + }) + } else if (Array.isArray(includeIDs)) { + fetchPost("/api/search/getEmbedBlock", { + embedBlockID: item.getAttribute("data-node-id"), + includeIDs, + headingMode: item.getAttribute("custom-heading-mode") === "1" ? 1 : 0, + breadcrumb + }, (response) => { + renderEmbed(response.data.blocks || [], protyle, item, top); + }); + } else { + renderEmbed([], protyle, item, top); } - html += `
`; + console.log(includeIDs); + } catch (e) { + renderEmbed([], protyle, item, top); + } + } else { + fetchPost("/api/search/searchEmbedBlock", { + embedBlockID: item.getAttribute("data-node-id"), + stmt: content, + headingMode: item.getAttribute("custom-heading-mode") === "1" ? 1 : 0, + excludeIDs: [item.getAttribute("data-node-id"), protyle.block.rootID], + breadcrumb + }, (response) => { + renderEmbed(response.data.blocks, protyle, item, top) }); - if (response.data.blocks.length > 0) { - item.lastElementChild.insertAdjacentHTML("beforebegin", html + - // 辅助上下移动时进行选中 - `