diff --git a/app/src/config/search.ts b/app/src/config/search.ts
index 05d370146..4d976b5d1 100644
--- a/app/src/config/search.ts
+++ b/app/src/config/search.ts
@@ -15,7 +15,7 @@ export const initConfigSearch = (element: HTMLElement) => {
"editor", "md2", "md3", "md12", "md16", "md27", "md28", "md29", "md30", "md31", "md32", "md33", "md34",
"md39", "md40", "fontSizeTip", "fontSize", "font", "font1", "generateHistory", "generateHistoryInterval",
"historyRetentionDays", "historyRetentionDaysTip", "clearHistory", "katexMacros", "katexMacrosTip",
- "editReadonly", "editReadonlyTip"
+ "editReadonly", "editReadonlyTip", "embedBlockBreadcrumb", "embedBlockBreadcrumbTip"
]),
// 文档树
diff --git a/app/src/protyle/gutter/index.ts b/app/src/protyle/gutter/index.ts
index 5e7e5bc1e..b2a8d4652 100644
--- a/app/src/protyle/gutter/index.ts
+++ b/app/src/protyle/gutter/index.ts
@@ -1165,6 +1165,7 @@ export class Gutter {
}).element);
} else if (type === "NodeBlockQueryEmbed" && !window.siyuan.config.readonly && !window.siyuan.config.editor.readOnly) {
window.siyuan.menus.menu.append(new MenuItem({type: "separator"}).element);
+ const breadcrumb = nodeElement.getAttribute("breadcrumb");
window.siyuan.menus.menu.append(new MenuItem({
id: "assetSubMenu",
type: "submenu",
@@ -1183,6 +1184,25 @@ export class Gutter {
click() {
protyle.toolbar.showRender(protyle, nodeElement);
}
+ }, {
+ label: `
${window.siyuan.languages.embedBlockBreadcrumb}
+
`,
+ bind(element) {
+ element.addEventListener("click", (event: MouseEvent & { target: HTMLElement }) => {
+ const inputElement = element.querySelector("input");
+ if (event.target.tagName !== "INPUT") {
+ inputElement.checked = !inputElement.checked;
+ }
+ nodeElement.setAttribute("breadcrumb", inputElement.checked.toString());
+ fetchPost("/api/attr/setBlockAttrs", {
+ id,
+ attrs: {breadcrumb: inputElement.checked.toString()}
+ });
+ nodeElement.removeAttribute("data-render")
+ blockRender(protyle, nodeElement);
+ window.siyuan.menus.menu.remove();
+ });
+ }
}]
}).element);
} else if (type === "NodeHeading" && !window.siyuan.config.readonly && !window.siyuan.config.editor.readOnly) {
diff --git a/app/src/protyle/markdown/blockRender.ts b/app/src/protyle/markdown/blockRender.ts
index 1c24533a0..23fdce070 100644
--- a/app/src/protyle/markdown/blockRender.ts
+++ b/app/src/protyle/markdown/blockRender.ts
@@ -26,10 +26,17 @@ export const blockRender = (protyle: IProtyle, element: Element) => {
${item.lastElementChild.outerHTML}`;
const content = Lute.UnEscapeHTMLStr(item.getAttribute("data-content"));
+ let breadcrumb: boolean | string = item.getAttribute("breadcrumb");
+ if (breadcrumb) {
+ breadcrumb = breadcrumb === "true"
+ } else {
+ breadcrumb = window.siyuan.config.editor.embedBlockBreadcrumb
+ }
fetchPost("/api/search/searchEmbedBlock", {
stmt: content,
headingMode: item.getAttribute("custom-heading-mode") === "1" ? 1 : 0,
- excludeIDs: [item.getAttribute("data-node-id"), protyle.block.rootID]
+ excludeIDs: [item.getAttribute("data-node-id"), protyle.block.rootID],
+ breadcrumb
}, (response) => {
const rotateElement = item.querySelector(".fn__rotate");
if (rotateElement) {
@@ -37,7 +44,11 @@ export const blockRender = (protyle: IProtyle, element: Element) => {
}
let html = "";
response.data.blocks.forEach((blocksItem: { block: IBlock, blockPaths: IBreadcrumb[] }) => {
- html += `${genBreadcrumb(blocksItem.blockPaths, true)}${blocksItem.block.content}
`;
+ let breadcrumbHTML = "";
+ if (blocksItem.blockPaths.length !== 0) {
+ breadcrumbHTML = genBreadcrumb(blocksItem.blockPaths, true);
+ }
+ html += `${breadcrumbHTML}${blocksItem.block.content}
`;
});
item.setAttribute("data-render", "true");
if (response.data.blocks.length > 0) {