diff --git a/app/src/protyle/render/av/render.ts b/app/src/protyle/render/av/render.ts
index 7e6de2b6d..5da3778f5 100644
--- a/app/src/protyle/render/av/render.ts
+++ b/app/src/protyle/render/av/render.ts
@@ -5,6 +5,7 @@ import {getCalcValue} from "./cell";
import * as dayjs from "dayjs";
import {hasClosestByAttribute} from "../../util/hasClosest";
import {Menu} from "../../../plugin/Menu";
+import {escapeAttr} from "../../../util/escape";
export const avRender = (element: Element, cb?: () => void) => {
let avElements: Element[] = [];
@@ -241,7 +242,8 @@ export const renderAVAttribute = (element: HTMLElement, id: string) => {
keyValues: {
key: {
type: TAVCol,
- name: string
+ name: string,
+ options?: { name: string, color: string }[]
},
values: { keyID: string, id: string, blockID: string, type?: TAVCol & IAVCellValue } []
}[],
@@ -258,8 +260,9 @@ export const renderAVAttribute = (element: HTMLElement, id: string) => {
${item.key.name}
-
+
${genAVValueHTML(item.values[0])}
`;
@@ -338,10 +341,10 @@ export const renderAVAttribute = (element: HTMLElement, id: string) => {
(window.siyuan.menus.menu.element.querySelector(".b3-switch") as HTMLInputElement).checked = false
}
})
- const targetRect = target.getBoundingClientRect()
+ const datetRect = dateElement.getBoundingClientRect()
dateMenu.open({
- x: targetRect.left,
- y: targetRect.bottom
+ x: datetRect.left,
+ y: datetRect.bottom
})
window.siyuan.menus.menu.element.style.zIndex = "400";
event.stopPropagation()
@@ -350,7 +353,78 @@ export const renderAVAttribute = (element: HTMLElement, id: string) => {
}
const mSelectElement = hasClosestByAttribute(target, "data-type", "select") || hasClosestByAttribute(target, "data-type", "mSelect")
if (mSelectElement) {
- return
+ const mSelectMenu = new Menu("custom-attr-av-select", () => {
+ const mSelect: { content: string, color: string }[] = []
+ let mSelectHTML = "";
+ window.siyuan.menus.menu.element.querySelectorAll('.svg').forEach(item => {
+ const chipElement = item.parentElement.previousElementSibling.firstElementChild as HTMLElement
+ const content = chipElement.textContent.trim()
+ const color = chipElement.dataset.color
+ mSelect.push({
+ content,
+ color
+ })
+ mSelectHTML += `${content}`
+ })
+ fetchPost("/api/av/setAttributeViewBlockAttr", {
+ avID: mSelectElement.dataset.avId,
+ keyID: mSelectElement.dataset.keyId,
+ rowID: mSelectElement.dataset.blockId,
+ cellID: mSelectElement.dataset.id,
+ value: {
+ mSelect
+ }
+ });
+ mSelectElement.innerHTML = mSelectHTML
+ })
+ if (mSelectMenu.isOpen) {
+ return;
+ }
+ const names: string[] = []
+ mSelectElement.querySelectorAll(".b3-chip").forEach(item => {
+ names.push(item.textContent.trim())
+ })
+ JSON.parse(mSelectElement.dataset.options || "").forEach((item: { name: string, color: string }) => {
+ mSelectMenu.addItem({
+ iconHTML: "",
+ label: `
+ ${item.name}
+`,
+ accelerator: names.includes(item.name) ? '' : Constants.ZWSP,
+ click(element) {
+ const acceleratorElement = element.querySelector(".b3-menu__accelerator")
+ if (mSelectElement.dataset.type === "select") {
+ window.siyuan.menus.menu.element.querySelectorAll(".b3-menu__accelerator").forEach(itemElement => {
+ if (itemElement.isSameNode(acceleratorElement)) {
+ if (acceleratorElement.querySelector("svg")) {
+ acceleratorElement.innerHTML = "";
+ } else {
+ acceleratorElement.innerHTML = ''
+ }
+ } else {
+ itemElement.innerHTML = "";
+ }
+ })
+ return false;
+ }
+ if (acceleratorElement.querySelector("svg")) {
+ acceleratorElement.innerHTML = "";
+ } else {
+ acceleratorElement.innerHTML = ''
+ }
+ return true;
+ }
+ })
+ })
+ const mSelecttRect = mSelectElement.getBoundingClientRect()
+ mSelectMenu.open({
+ x: mSelecttRect.left,
+ y: mSelecttRect.bottom
+ })
+ window.siyuan.menus.menu.element.style.zIndex = "400";
+ event.stopPropagation()
+ event.preventDefault();
+ return;
}
})
element.querySelectorAll(".b3-text-field--text").forEach((item: HTMLInputElement) => {