This commit is contained in:
Vanessa 2023-06-08 22:56:52 +08:00
parent c5d6f41805
commit d332328726
4 changed files with 39 additions and 39 deletions

View File

@ -4,15 +4,15 @@ import {Menu} from "../../../plugin/API";
import {getIconByType} from "./render";
export const avClick = (protyle: IProtyle, event: MouseEvent & { target: HTMLElement }) => {
const blockElement = hasClosestBlock(event.target)
const addElement = hasClosestByAttribute(event.target, "data-type", "av-header-add")
const blockElement = hasClosestBlock(event.target);
const addElement = hasClosestByAttribute(event.target, "data-type", "av-header-add");
if (addElement && blockElement) {
const menu = new Menu("av-header-add")
const menu = new Menu("av-header-add");
menu.addItem({
icon: "iconAlignLeft",
label: window.siyuan.languages.text,
click() {
const id = Lute.NewNodeID()
const id = Lute.NewNodeID();
transaction(protyle, [{
action: "addAttrViewCol",
name: "Text",
@ -25,28 +25,28 @@ export const avClick = (protyle: IProtyle, event: MouseEvent & { target: HTMLEle
parentID: blockElement.getAttribute("data-av-type"),
}]);
}
})
const addRect = addElement.getBoundingClientRect()
});
const addRect = addElement.getBoundingClientRect();
menu.open({
x: addRect.left,
y: addRect.bottom,
h: addRect.height
})
});
event.preventDefault();
event.stopPropagation();
return true
return true;
}
const cellElement = hasClosestByClassName(event.target, "av__cell")
const cellElement = hasClosestByClassName(event.target, "av__cell");
if (cellElement && blockElement) {
const type = cellElement.getAttribute("data-dtype")
const menu = new Menu("av-header-cell")
const type = cellElement.getAttribute("data-dtype");
const menu = new Menu("av-header-cell");
menu.addItem({
icon: getIconByType(type),
label: `<input style="margin: 4px 0" class="b3-text-field" type="text" value="${cellElement.innerText.trim()}">`,
bind() {
}
})
});
if (type !== "block") {
menu.addItem({
icon: "iconEdit",
@ -54,31 +54,31 @@ export const avClick = (protyle: IProtyle, event: MouseEvent & { target: HTMLEle
click() {
}
})
});
}
menu.addSeparator()
menu.addSeparator();
menu.addItem({
icon: "iconUp",
label: window.siyuan.languages.fileNameNatASC,
click() {
}
})
});
menu.addItem({
icon: "iconDown",
label: window.siyuan.languages.fileNameNatDESC,
click() {
}
})
});
menu.addItem({
icon: "iconFilter",
label: window.siyuan.languages.filter,
click() {
}
})
menu.addSeparator()
});
menu.addSeparator();
if (type !== "block") {
menu.addItem({
icon: "iconEyeoff",
@ -86,22 +86,22 @@ export const avClick = (protyle: IProtyle, event: MouseEvent & { target: HTMLEle
click() {
}
})
});
menu.addItem({
icon: "iconCopy",
label: window.siyuan.languages.duplicate,
click() {
}
})
});
menu.addItem({
icon: "iconTrashcan",
label: window.siyuan.languages.delete,
click() {
}
})
menu.addSeparator()
});
menu.addSeparator();
}
menu.addItem({
label: `<div class="fn__flex" style="margin-bottom: 4px"><span>${window.siyuan.languages.wrap}</span><span class="fn__space fn__flex-1"></span>
@ -109,16 +109,16 @@ export const avClick = (protyle: IProtyle, event: MouseEvent & { target: HTMLEle
click() {
}
})
const cellRect = cellElement.getBoundingClientRect()
});
const cellRect = cellElement.getBoundingClientRect();
menu.open({
x: cellRect.left,
y: cellRect.bottom,
h: cellRect.height
})
});
event.preventDefault();
event.stopPropagation();
return true
return true;
}
return false
}
return false;
};

View File

@ -7,7 +7,7 @@ export const getIconByType = (type: string) => {
case "block":
return "iconParagraph";
}
}
};
export const avRender = (element: Element) => {
let avElements: Element[] = [];
@ -37,7 +37,7 @@ export const avRender = (element: Element) => {
tableHTML += `<div class="av__cell" data-id="${column.id}" data-dtype="${column.type}" data-wrap="${column.wrap}" style="width: ${column.width || 200}px;">
<svg><use xlink:href="#${column.icon || getIconByType(column.type)}"></use></svg>
<span>${column.name}</span>
</div>`
</div>`;
});
tableHTML += `<div class="block__icons">
<div class="block__icon block__icon--show" data-type="av-header-add"><svg><use xlink:href="#iconAdd"></use></svg></div>
@ -50,9 +50,9 @@ export const avRender = (element: Element) => {
data.rows.forEach((row: IAVRow) => {
tableHTML += `<div class="av__row" data-id="${row.id}"><div class="av__firstcol"><input type="checkbox"></div>`;
row.cells.forEach((cell, index) => {
tableHTML += `<div class="av__cell" style="width: ${data.columns[index].width || 200}px;background-color: ${cell.bgColor || ""};color: ${cell.color || ""}">${cell.value}</div>`
tableHTML += `<div class="av__cell" style="width: ${data.columns[index].width || 200}px;background-color: ${cell.bgColor || ""};color: ${cell.color || ""}">${cell.value}</div>`;
});
tableHTML += `<div></div></div>`;
tableHTML += "<div></div></div>";
});
const paddingLeft = e.parentElement.style.paddingLeft;
const paddingRight = e.parentElement.style.paddingRight;

View File

@ -27,7 +27,7 @@ export const scrollEvent = (protyle: IProtyle, element: HTMLElement) => {
protyle.wysiwyg.element.querySelectorAll(".av").forEach((item: HTMLElement) => {
if (item.parentElement.classList.contains("protyle-wysiwyg")) {
const headerTop = item.offsetTop - 30 + 56; // 30 - 面包屑, 56 - tab+title
const headerElement = item.querySelector(".av__row--header") as HTMLElement
const headerElement = item.querySelector(".av__row--header") as HTMLElement;
if (headerElement) {
if (headerTop < element.scrollTop && headerTop + headerElement.parentElement.clientHeight > element.scrollTop) {
headerElement.style.transform = `translateY(${element.scrollTop - headerTop}px)`;
@ -35,9 +35,9 @@ export const scrollEvent = (protyle: IProtyle, element: HTMLElement) => {
headerElement.style.transform = "";
}
}
const footerElement = item.querySelector(".av__row--footer") as HTMLElement
const footerElement = item.querySelector(".av__row--footer") as HTMLElement;
if (footerElement) {
const footerBottom = headerTop + footerElement.parentElement.clientHeight
const footerBottom = headerTop + footerElement.parentElement.clientHeight;
const scrollBottom = element.scrollTop + element.clientHeight;
if (headerTop + 42 + 36 * 2 < scrollBottom && footerBottom > scrollBottom) {
footerElement.style.transform = `translateY(${scrollBottom - footerBottom}px)`;

View File

@ -796,11 +796,11 @@ export const dropEvent = (protyle: IProtyle, editorElement: HTMLElement) => {
// 拖拽到属性视图内
const blockElement = hasClosestBlock(targetElement);
if (blockElement) {
let previousID = ""
let previousID = "";
if (targetElement.classList.contains("dragover__bottom")) {
previousID = targetElement.getAttribute("data-id") || ""
previousID = targetElement.getAttribute("data-id") || "";
} else {
previousID = targetElement.previousElementSibling?.getAttribute("data-id") || ""
previousID = targetElement.previousElementSibling?.getAttribute("data-id") || "";
}
transaction(protyle, [{
action: "insertAttrViewBlock",
@ -1008,7 +1008,7 @@ export const dropEvent = (protyle: IProtyle, editorElement: HTMLElement) => {
// 列表项不能拖入列表上方块的下面
disabledPosition = "bottom";
}
const avRowElement = hasClosestByClassName(event.target, "av__row")
const avRowElement = hasClosestByClassName(event.target, "av__row");
if (targetElement.classList.contains("av") && avRowElement) {
if (avRowElement.classList.contains("av__row--header")) {
// 表头之前不能插入