import {Menu} from "../../../plugin/Menu"; import {unicode2Emoji} from "../../../emoji"; import {transaction} from "../../wysiwyg/transaction"; import {openMenuPanel} from "./openMenuPanel"; import {removeBlock} from "../../wysiwyg/remove"; import {getEditorRange} from "../../util/selection"; export const openViewMenu = (options: { protyle: IProtyle, blockElement: HTMLElement, element: HTMLElement }) => { const menu = new Menu("av-view"); if (menu.isOpen) { return; } menu.addItem({ icon: "iconEdit", label: window.siyuan.languages.rename, click() { document.querySelector(".av__panel")?.remove(); openMenuPanel({ protyle: options.protyle, blockElement: options.blockElement, type: "config", cb: (avPanelElement) => { (avPanelElement.querySelector('.b3-text-field[data-type="name"]') as HTMLInputElement).focus(); } }); } }); menu.addItem({ icon: "iconSettings", label: window.siyuan.languages.config, click() { document.querySelector(".av__panel")?.remove(); openMenuPanel({ protyle: options.protyle, blockElement: options.blockElement, type: "config" }); } }); menu.addSeparator(); menu.addItem({ icon: "iconCopy", label: window.siyuan.languages.duplicate, click() { document.querySelector(".av__panel")?.remove(); const id = Lute.NewNodeID(); transaction(options.protyle, [{ action: "duplicateAttrViewView", avID: options.blockElement.dataset.avId, previousID: options.element.dataset.id, id }], [{ action: "removeAttrViewView", avID: options.blockElement.dataset.avId, id }]); } }); menu.addItem({ icon: "iconTrashcan", label: window.siyuan.languages.delete, click() { document.querySelector(".av__panel")?.remove(); if (options.blockElement.querySelectorAll(".layout-tab-bar .item").length === 1) { removeBlock(options.protyle, options.blockElement, getEditorRange(options.blockElement)); } else { transaction(options.protyle, [{ action: "removeAttrViewView", avID: options.blockElement.dataset.avId, id: options.element.dataset.id }]); } } }); const rect = options.element.getBoundingClientRect(); menu.open({ x: rect.left, y: rect.bottom }); }; export const bindViewEvent = (options: { protyle: IProtyle, data: IAV, menuElement: HTMLElement }) => { const inputElement = options.menuElement.querySelector('.b3-text-field[data-type="name"]') as HTMLInputElement; inputElement.addEventListener("blur", () => { if (inputElement.value !== inputElement.dataset.value) { transaction(options.protyle, [{ action: "setAttrViewViewName", avID: options.data.id, id: options.data.viewID, data: inputElement.value }], [{ action: "setAttrViewViewName", avID: options.data.id, id: options.data.viewID, data: inputElement.dataset.value }]); inputElement.dataset.value = inputElement.value; } }); }; export const getViewHTML = (data: IAVTable) => { return `
`; }; export const getSwitcherHTML = (views: IAVView[], viewId: string) => { let html = ""; views.forEach((item) => { html += ``; }); return `
${html}
`; }; export const addView = (protyle: IProtyle, blockElement: Element) => { const id = Lute.NewNodeID(); const avID = blockElement.getAttribute("data-av-id"); transaction(protyle, [{ action: "addAttrViewView", avID, id }], [{ action: "removeAttrViewView", avID, id }]); };