This commit is contained in:
parent
5b22276435
commit
bce694160b
3 changed files with 51 additions and 38 deletions
|
@ -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()
|
||||
|
|
|
@ -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)))
|
||||
|
|
6
app/src/types/index.d.ts
vendored
6
app/src/types/index.d.ts
vendored
|
@ -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 {
|
||||
|
|
Loading…
Add table
Reference in a new issue