Vanessa 2023-12-01 11:48:20 +08:00
parent 5b22276435
commit bce694160b
3 changed files with 51 additions and 38 deletions

View file

@ -4,7 +4,6 @@ import {transaction} from "../../wysiwyg/transaction";
import {openMenuPanel} from "./openMenuPanel";
import {removeBlock} from "../../wysiwyg/remove";
import {getEditorRange} from "../../util/selection";
import {fetchPost} from "../../../util/fetch";
export const openViewMenu = (options: { protyle: IProtyle, blockElement: HTMLElement, element: HTMLElement }) => {
const menu = new Menu("av-view");
@ -29,7 +28,11 @@ export const openViewMenu = (options: { protyle: IProtyle, blockElement: HTMLEle
icon: "iconSettings",
label: window.siyuan.languages.config,
click() {
openMenuPanel({protyle: options.protyle, blockElement: options.blockElement, type: "config"});
openMenuPanel({
protyle: options.protyle,
blockElement: options.blockElement,
type: "config"
});
}
})
menu.addSeparator();
@ -37,42 +40,32 @@ export const openViewMenu = (options: { protyle: IProtyle, blockElement: HTMLEle
icon: "iconCopy",
label: window.siyuan.languages.duplicate,
click() {
fetchPost("/api/av/renderAttributeView", {
id: options.blockElement.dataset.avId,
}, (response) => {
const id = Lute.NewNodeID();
const data = response.data as IAV;
transaction(options.protyle, [{
action: "duplicateAttrViewView",
avID: data.id,
previousID: data.viewID,
id
}], [{
action: "removeAttrViewView",
avID: data.id,
id
}]);
});
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() {
fetchPost("/api/av/renderAttributeView", {
id: options.blockElement.dataset.avId,
}, (response) => {
const data = response.data as IAV;
if (data.views.length === 1) {
removeBlock(options.protyle, options.blockElement, getEditorRange(options.blockElement))
} else {
transaction(options.protyle, [{
action: "removeAttrViewView",
avID: data.id,
id: data.viewID
}]);
}
});
if (options.element.parentElement.querySelectorAll("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()

View file

@ -77,6 +77,9 @@ import {activeBlur, hideKeyboardToolbar} from "../../mobile/util/keyboardToolbar
import {commonClick} from "./commonClick";
import {avClick, avContextmenu, updateAVName} from "../render/av/action";
import {stickyRow, updateHeader} from "../render/av/row";
import {showColMenu} from "../render/av/col";
import {openViewMenu} from "../render/av/view";
import {avRender} from "../render/av/render";
export class WYSIWYG {
public lastHTMLs: { [key: string]: string } = {};
@ -1344,7 +1347,6 @@ export class WYSIWYG {
});
return false;
}
const nodeElement = hasClosestBlock(target);
const avRowElement = hasClosestByClassName(target, "av__row");
if (avRowElement && avContextmenu(protyle, avRowElement, {
@ -1356,9 +1358,31 @@ export class WYSIWYG {
event.preventDefault();
return;
}
const nodeElement = hasClosestBlock(target);
if (!nodeElement) {
return false;
}
const avCellHeaderElement = hasClosestByClassName(target, "av__cellheader")
if (avCellHeaderElement) {
showColMenu(protyle, nodeElement, target.parentElement);
event.stopPropagation();
event.preventDefault();
return;
}
const avTabHeaderElement = hasClosestByClassName(target, "item");
if (nodeElement.classList.contains("av") && avTabHeaderElement) {
if (avTabHeaderElement.classList.contains("item--focus")) {
openViewMenu({protyle, blockElement:nodeElement, element:target});
} else {
nodeElement.removeAttribute("data-render")
avRender(nodeElement, protyle, () => {
openViewMenu({protyle, blockElement:nodeElement, element:nodeElement.querySelector(".item.item--focus")});
}, avTabHeaderElement.dataset.id);
}
event.stopPropagation();
event.preventDefault();
return;
}
if (!isNotEditBlock(nodeElement) && !nodeElement.classList.contains("protyle-wysiwyg--select") &&
!hasClosestByClassName(target, "protyle-action") && // https://github.com/siyuan-note/siyuan/issues/8983
(isMobile() || event.detail.target || (beforeContextmenuRange && nodeElement.contains(beforeContextmenuRange.startContainer)))

View file

@ -1018,15 +1018,11 @@ interface IAVView {
icon: string
}
interface IAVTable {
interface IAVTable extends IAVView {
columns: IAVColumn[],
filters: IAVFilter[],
sorts: IAVSort[],
name: string,
type: "table"
rows: IAVRow[],
id: string
icon: string
}
interface IAVFilter {