import {fetchPost} from "../../../util/fetch"; import {getColIconByType} from "./col"; import {showHeaderCellMenu} from "./cell"; export const avRender = (element: Element, cb?: () => void) => { let avElements: Element[] = []; if (element.getAttribute("data-type") === "NodeAttributeView") { // 编辑器内代码块编辑渲染 avElements = [element]; } else { avElements = Array.from(element.querySelectorAll('[data-type="NodeAttributeView"]')); } if (avElements.length === 0) { return; } if (avElements.length > 0) { avElements.forEach((e: HTMLElement) => { if (e.getAttribute("data-render") === "true") { return; } fetchPost("/api/av/renderAttributeView", {id: e.getAttribute("data-av-id")}, (response) => { const data = response.data.av; // header let tableHTML = '
'; let index = 0; data.columns.forEach((column: IAVColumn) => { if (column.hidden) { return; } tableHTML += `
${column.name}
`; index++; }); tableHTML += `
`; // body data.rows.forEach((row: IAVRow) => { tableHTML += `
`; row.cells.forEach((cell, index) => { tableHTML += `
${cell.renderValue?.content || ""}
`; }); tableHTML += "
"; }); const paddingLeft = e.parentElement.style.paddingLeft; const paddingRight = e.parentElement.style.paddingRight; e.style.width = e.parentElement.clientWidth + "px"; e.style.alignSelf = "center"; e.firstElementChild.outerHTML = `
tab1
${data.title}
${tableHTML}
${window.siyuan.languages.addAttr}
`; e.setAttribute("data-render", "true"); if (cb) { cb(); } }); }); } }; export const refreshAV = (protyle: IProtyle, operation: IOperation) => { if (operation.action === "addAttrViewCol") { Array.from(protyle.wysiwyg.element.querySelectorAll(`[data-node-id="${operation.id}"]`)).forEach((item: HTMLElement) => { item.removeAttribute("data-render"); avRender(item, () => { showHeaderCellMenu(protyle, item, item.querySelector(".av__row--header").lastElementChild.previousElementSibling as HTMLElement); }); }); } else if (operation.action === "insertAttrViewBlock") { Array.from(protyle.wysiwyg.element.querySelectorAll(`[data-node-id="${operation.id}"]`)).forEach((item: HTMLElement) => { item.removeAttribute("data-render"); avRender(item); }); } };