Vanessa 2025-02-18 21:45:53 +08:00
parent 22a6c34d94
commit fd42a78e25
2 changed files with 227 additions and 223 deletions

View File

@ -409,11 +409,11 @@
} }
} }
table[contenteditable="false"] + .protyle-action__table { table[contenteditable="false"] + .protyle-action__table > .table__resize {
display: none; display: none;
} }
table[contenteditable="true"] + .protyle-action__table { table + .protyle-action__table {
position: absolute; position: absolute;
top: 4px; top: 4px;
height: 0; height: 0;

View File

@ -811,7 +811,7 @@ export class WYSIWYG {
documentSelf.onmousemove = (moveEvent: MouseEvent) => { documentSelf.onmousemove = (moveEvent: MouseEvent) => {
let moveTarget: boolean | HTMLElement = moveEvent.target as HTMLElement; let moveTarget: boolean | HTMLElement = moveEvent.target as HTMLElement;
// table cell select // table cell select
if (!protyle.disabled && tableBlockElement && tableBlockElement.contains(moveTarget) && if (tableBlockElement && tableBlockElement.contains(moveTarget) &&
!hasClosestByClassName(tableBlockElement, "protyle-wysiwyg__embed")) { !hasClosestByClassName(tableBlockElement, "protyle-wysiwyg__embed")) {
if (moveTarget.classList.contains("table__select")) { if (moveTarget.classList.contains("table__select")) {
moveTarget.classList.add("fn__none"); moveTarget.classList.add("fn__none");
@ -1084,7 +1084,7 @@ export class WYSIWYG {
}); });
protyle.selectElement.classList.add("fn__none"); protyle.selectElement.classList.add("fn__none");
protyle.selectElement.removeAttribute("style"); protyle.selectElement.removeAttribute("style");
if (!protyle.disabled && tableBlockElement) { if (tableBlockElement) {
// @ts-ignore // @ts-ignore
tableBlockElement.firstElementChild.style.webkitUserModify = ""; tableBlockElement.firstElementChild.style.webkitUserModify = "";
const tableSelectElement = tableBlockElement.querySelector(".table__select") as HTMLElement; const tableSelectElement = tableBlockElement.querySelector(".table__select") as HTMLElement;
@ -1093,207 +1093,209 @@ export class WYSIWYG {
getSelection().getRangeAt(0).collapse(false); getSelection().getRangeAt(0).collapse(false);
} }
window.siyuan.menus.menu.remove(); window.siyuan.menus.menu.remove();
window.siyuan.menus.menu.append(new MenuItem({ if (!protyle.disabled) {
label: window.siyuan.languages.mergeCell, window.siyuan.menus.menu.append(new MenuItem({
click: () => { label: window.siyuan.languages.mergeCell,
if (tableBlockElement) { click: () => {
const selectCellElements: HTMLTableCellElement[] = []; if (tableBlockElement) {
const colIndexList: number[] = []; const selectCellElements: HTMLTableCellElement[] = [];
const colCount = tableBlockElement.querySelectorAll("th").length; const colIndexList: number[] = [];
let fnNoneMax = 0; const colCount = tableBlockElement.querySelectorAll("th").length;
const scrollLeft = tableBlockElement.firstElementChild.scrollLeft; let fnNoneMax = 0;
let isTHead = false; const scrollLeft = tableBlockElement.firstElementChild.scrollLeft;
let isTBody = false; let isTHead = false;
tableBlockElement.querySelectorAll("th, td").forEach((item: HTMLTableCellElement, index: number) => { let isTBody = false;
if (item.classList.contains("fn__none")) { tableBlockElement.querySelectorAll("th, td").forEach((item: HTMLTableCellElement, index: number) => {
// 合并的元素中间有 fn__none 的元素 if (item.classList.contains("fn__none")) {
if (item.previousElementSibling && item.previousElementSibling.isSameNode(selectCellElements[selectCellElements.length - 1])) { // 合并的元素中间有 fn__none 的元素
selectCellElements.push(item); if (item.previousElementSibling && item.previousElementSibling.isSameNode(selectCellElements[selectCellElements.length - 1])) {
if (!isTHead && item.parentElement.parentElement.tagName === "THEAD") {
isTHead = true;
} else if (!isTBody && item.parentElement.parentElement.tagName === "TBODY") {
isTBody = true;
}
} else {
if (index < fnNoneMax && colIndexList.includes((index + 1) % colCount)) {
selectCellElements.push(item); selectCellElements.push(item);
if (!isTHead && item.parentElement.parentElement.tagName === "THEAD") { if (!isTHead && item.parentElement.parentElement.tagName === "THEAD") {
isTHead = true; isTHead = true;
} else if (!isTBody && item.parentElement.parentElement.tagName === "TBODY") { } else if (!isTBody && item.parentElement.parentElement.tagName === "TBODY") {
isTBody = true; isTBody = true;
} }
} else {
if (index < fnNoneMax && colIndexList.includes((index + 1) % colCount)) {
selectCellElements.push(item);
if (!isTHead && item.parentElement.parentElement.tagName === "THEAD") {
isTHead = true;
} else if (!isTBody && item.parentElement.parentElement.tagName === "TBODY") {
isTBody = true;
}
}
} }
}
} else {
if (item.offsetLeft + 6 > tableSelectElement.offsetLeft + scrollLeft && item.offsetLeft + item.clientWidth - 6 < tableSelectElement.offsetLeft + scrollLeft + tableSelectElement.clientWidth &&
item.offsetTop + 6 > tableSelectElement.offsetTop && item.offsetTop + item.clientHeight - 6 < tableSelectElement.offsetTop + tableSelectElement.clientHeight) {
selectCellElements.push(item);
if (!isTHead && item.parentElement.parentElement.tagName === "THEAD") {
isTHead = true;
} else if (!isTBody && item.parentElement.parentElement.tagName === "TBODY") {
isTBody = true;
}
colIndexList.push((index + 1) % colCount);
// https://github.com/siyuan-note/insider/issues/1014
fnNoneMax = Math.max((item.rowSpan - 1) * colCount + index + 1, fnNoneMax);
}
}
});
tableSelectElement.removeAttribute("style");
const oldHTML = tableBlockElement.outerHTML;
let cellElement = selectCellElements[0];
let colSpan = cellElement.colSpan;
let index = 1;
while (cellElement.nextElementSibling && cellElement.nextElementSibling.isSameNode(selectCellElements[index])) {
cellElement = cellElement.nextElementSibling as HTMLTableCellElement;
if (!cellElement.classList.contains("fn__none")) { // https://github.com/siyuan-note/insider/issues/1007#issuecomment-1046195608
colSpan += cellElement.colSpan;
}
index++;
}
let html = "";
let rowElement: Element = selectCellElements[0].parentElement;
let rowSpan = selectCellElements[0].rowSpan;
selectCellElements.forEach((item, index) => {
let cellHTML = item.innerHTML.trim();
if (cellHTML.endsWith("<br>")) {
cellHTML = cellHTML.substr(0, cellHTML.length - 4);
}
html += cellHTML + ((!cellHTML || index === selectCellElements.length - 1) ? "" : "<br>");
if (index !== 0) {
if (!rowElement.isSameNode(item.parentElement)) {
if (!item.classList.contains("fn__none")) { // https://github.com/siyuan-note/insider/issues/1011
rowSpan += item.rowSpan;
}
rowElement = item.parentElement;
if (selectCellElements[0].parentElement.parentElement.tagName === "THEAD" && item.parentElement.parentElement.tagName !== "THEAD") {
selectCellElements[0].parentElement.parentElement.insertAdjacentElement("beforeend", item.parentElement);
}
}
item.classList.add("fn__none");
item.innerHTML = "";
}
});
// https://github.com/siyuan-note/insider/issues/1017
if (isTHead && isTBody) {
rowElement = rowElement.parentElement.nextElementSibling.firstElementChild;
while (rowElement && rowElement.parentElement.tagName !== "THEAD") {
let colSpanCount = 0;
let noneCount = 0;
Array.from(rowElement.children).forEach((item: HTMLTableCellElement) => {
colSpanCount += item.colSpan - 1;
if (item.classList.contains("fn__none")) {
noneCount++;
}
});
if (colSpanCount !== noneCount) {
selectCellElements[0].parentElement.parentElement.insertAdjacentElement("beforeend", rowElement);
rowElement = rowElement.parentElement.nextElementSibling.firstElementChild;
} else { } else {
break; if (item.offsetLeft + 6 > tableSelectElement.offsetLeft + scrollLeft && item.offsetLeft + item.clientWidth - 6 < tableSelectElement.offsetLeft + scrollLeft + tableSelectElement.clientWidth &&
item.offsetTop + 6 > tableSelectElement.offsetTop && item.offsetTop + item.clientHeight - 6 < tableSelectElement.offsetTop + tableSelectElement.clientHeight) {
selectCellElements.push(item);
if (!isTHead && item.parentElement.parentElement.tagName === "THEAD") {
isTHead = true;
} else if (!isTBody && item.parentElement.parentElement.tagName === "TBODY") {
isTBody = true;
}
colIndexList.push((index + 1) % colCount);
// https://github.com/siyuan-note/insider/issues/1014
fnNoneMax = Math.max((item.rowSpan - 1) * colCount + index + 1, fnNoneMax);
}
}
});
tableSelectElement.removeAttribute("style");
const oldHTML = tableBlockElement.outerHTML;
let cellElement = selectCellElements[0];
let colSpan = cellElement.colSpan;
let index = 1;
while (cellElement.nextElementSibling && cellElement.nextElementSibling.isSameNode(selectCellElements[index])) {
cellElement = cellElement.nextElementSibling as HTMLTableCellElement;
if (!cellElement.classList.contains("fn__none")) { // https://github.com/siyuan-note/insider/issues/1007#issuecomment-1046195608
colSpan += cellElement.colSpan;
}
index++;
}
let html = "";
let rowElement: Element = selectCellElements[0].parentElement;
let rowSpan = selectCellElements[0].rowSpan;
selectCellElements.forEach((item, index) => {
let cellHTML = item.innerHTML.trim();
if (cellHTML.endsWith("<br>")) {
cellHTML = cellHTML.substr(0, cellHTML.length - 4);
}
html += cellHTML + ((!cellHTML || index === selectCellElements.length - 1) ? "" : "<br>");
if (index !== 0) {
if (!rowElement.isSameNode(item.parentElement)) {
if (!item.classList.contains("fn__none")) { // https://github.com/siyuan-note/insider/issues/1011
rowSpan += item.rowSpan;
}
rowElement = item.parentElement;
if (selectCellElements[0].parentElement.parentElement.tagName === "THEAD" && item.parentElement.parentElement.tagName !== "THEAD") {
selectCellElements[0].parentElement.parentElement.insertAdjacentElement("beforeend", item.parentElement);
}
}
item.classList.add("fn__none");
item.innerHTML = "";
}
});
// https://github.com/siyuan-note/insider/issues/1017
if (isTHead && isTBody) {
rowElement = rowElement.parentElement.nextElementSibling.firstElementChild;
while (rowElement && rowElement.parentElement.tagName !== "THEAD") {
let colSpanCount = 0;
let noneCount = 0;
Array.from(rowElement.children).forEach((item: HTMLTableCellElement) => {
colSpanCount += item.colSpan - 1;
if (item.classList.contains("fn__none")) {
noneCount++;
}
});
if (colSpanCount !== noneCount) {
selectCellElements[0].parentElement.parentElement.insertAdjacentElement("beforeend", rowElement);
rowElement = rowElement.parentElement.nextElementSibling.firstElementChild;
} else {
break;
}
} }
} }
}
// 合并背景色不会修改,需要等计算完毕 // 合并背景色不会修改,需要等计算完毕
setTimeout(() => { setTimeout(() => {
if (tableBlockElement) { if (tableBlockElement) {
selectCellElements[0].innerHTML = html + "<wbr>"; selectCellElements[0].innerHTML = html + "<wbr>";
selectCellElements[0].colSpan = colSpan; selectCellElements[0].colSpan = colSpan;
selectCellElements[0].rowSpan = rowSpan; selectCellElements[0].rowSpan = rowSpan;
focusByWbr(selectCellElements[0], document.createRange()); focusByWbr(selectCellElements[0], document.createRange());
updateTransaction(protyle, tableBlockElement.getAttribute("data-node-id"), tableBlockElement.outerHTML, oldHTML); updateTransaction(protyle, tableBlockElement.getAttribute("data-node-id"), tableBlockElement.outerHTML, oldHTML);
} }
}); });
}
} }
} }).element);
}).element); window.siyuan.menus.menu.append(new MenuItem({type: "separator"}).element);
window.siyuan.menus.menu.append(new MenuItem({type: "separator"}).element); window.siyuan.menus.menu.append(new MenuItem({
window.siyuan.menus.menu.append(new MenuItem({ icon: "iconAlignLeft",
icon: "iconAlignLeft", accelerator: window.siyuan.config.keymap.editor.general.alignLeft.custom,
accelerator: window.siyuan.config.keymap.editor.general.alignLeft.custom, label: window.siyuan.languages.alignLeft,
label: window.siyuan.languages.alignLeft, click: () => {
click: () => { if (tableBlockElement) {
if (tableBlockElement) { const selectCellElements: HTMLTableCellElement[] = [];
const selectCellElements: HTMLTableCellElement[] = []; const scrollLeft = tableBlockElement.firstElementChild.scrollLeft;
const scrollLeft = tableBlockElement.firstElementChild.scrollLeft; tableBlockElement.querySelectorAll("th, td").forEach((item: HTMLTableCellElement) => {
tableBlockElement.querySelectorAll("th, td").forEach((item: HTMLTableCellElement) => { if (!item.classList.contains("fn__none") &&
if (!item.classList.contains("fn__none") && item.offsetLeft + 6 > tableSelectElement.offsetLeft + scrollLeft && item.offsetLeft + item.clientWidth - 6 < tableSelectElement.offsetLeft + scrollLeft + tableSelectElement.clientWidth &&
item.offsetLeft + 6 > tableSelectElement.offsetLeft + scrollLeft && item.offsetLeft + item.clientWidth - 6 < tableSelectElement.offsetLeft + scrollLeft + tableSelectElement.clientWidth && item.offsetTop + 6 > tableSelectElement.offsetTop && item.offsetTop + item.clientHeight - 6 < tableSelectElement.offsetTop + tableSelectElement.clientHeight &&
item.offsetTop + 6 > tableSelectElement.offsetTop && item.offsetTop + item.clientHeight - 6 < tableSelectElement.offsetTop + tableSelectElement.clientHeight && (selectCellElements.length === 0 || (selectCellElements.length > 0 && item.offsetTop === selectCellElements[0].offsetTop))) {
(selectCellElements.length === 0 || (selectCellElements.length > 0 && item.offsetTop === selectCellElements[0].offsetTop))) { selectCellElements.push(item);
selectCellElements.push(item); }
} });
}); tableSelectElement.removeAttribute("style");
tableSelectElement.removeAttribute("style"); setTableAlign(protyle, selectCellElements, tableBlockElement, "left", getEditorRange(tableBlockElement));
setTableAlign(protyle, selectCellElements, tableBlockElement, "left", getEditorRange(tableBlockElement)); }
} }
} }).element);
}).element); window.siyuan.menus.menu.append(new MenuItem({
window.siyuan.menus.menu.append(new MenuItem({ icon: "iconAlignCenter",
icon: "iconAlignCenter", accelerator: window.siyuan.config.keymap.editor.general.alignCenter.custom,
accelerator: window.siyuan.config.keymap.editor.general.alignCenter.custom, label: window.siyuan.languages.alignCenter,
label: window.siyuan.languages.alignCenter, click: () => {
click: () => { if (tableBlockElement) {
if (tableBlockElement) { const selectCellElements: HTMLTableCellElement[] = [];
const selectCellElements: HTMLTableCellElement[] = []; const scrollLeft = tableBlockElement.firstElementChild.scrollLeft;
const scrollLeft = tableBlockElement.firstElementChild.scrollLeft; tableBlockElement.querySelectorAll("th, td").forEach((item: HTMLTableCellElement) => {
tableBlockElement.querySelectorAll("th, td").forEach((item: HTMLTableCellElement) => { if (!item.classList.contains("fn__none") &&
if (!item.classList.contains("fn__none") && item.offsetLeft + 6 > tableSelectElement.offsetLeft + scrollLeft && item.offsetLeft + item.clientWidth - 6 < tableSelectElement.offsetLeft + scrollLeft + tableSelectElement.clientWidth &&
item.offsetLeft + 6 > tableSelectElement.offsetLeft + scrollLeft && item.offsetLeft + item.clientWidth - 6 < tableSelectElement.offsetLeft + scrollLeft + tableSelectElement.clientWidth && item.offsetTop + 6 > tableSelectElement.offsetTop && item.offsetTop + item.clientHeight - 6 < tableSelectElement.offsetTop + tableSelectElement.clientHeight &&
item.offsetTop + 6 > tableSelectElement.offsetTop && item.offsetTop + item.clientHeight - 6 < tableSelectElement.offsetTop + tableSelectElement.clientHeight && (selectCellElements.length === 0 || (selectCellElements.length > 0 && item.offsetTop === selectCellElements[0].offsetTop))) {
(selectCellElements.length === 0 || (selectCellElements.length > 0 && item.offsetTop === selectCellElements[0].offsetTop))) { selectCellElements.push(item);
selectCellElements.push(item); }
} });
}); tableSelectElement.removeAttribute("style");
tableSelectElement.removeAttribute("style"); setTableAlign(protyle, selectCellElements, tableBlockElement, "center", getEditorRange(tableBlockElement));
setTableAlign(protyle, selectCellElements, tableBlockElement, "center", getEditorRange(tableBlockElement)); }
} }
} }).element);
}).element); window.siyuan.menus.menu.append(new MenuItem({
window.siyuan.menus.menu.append(new MenuItem({ icon: "iconAlignRight",
icon: "iconAlignRight", accelerator: window.siyuan.config.keymap.editor.general.alignRight.custom,
accelerator: window.siyuan.config.keymap.editor.general.alignRight.custom, label: window.siyuan.languages.alignRight,
label: window.siyuan.languages.alignRight, click: () => {
click: () => { if (tableBlockElement) {
if (tableBlockElement) { const selectCellElements: HTMLTableCellElement[] = [];
const selectCellElements: HTMLTableCellElement[] = []; const scrollLeft = tableBlockElement.firstElementChild.scrollLeft;
const scrollLeft = tableBlockElement.firstElementChild.scrollLeft; tableBlockElement.querySelectorAll("th, td").forEach((item: HTMLTableCellElement) => {
tableBlockElement.querySelectorAll("th, td").forEach((item: HTMLTableCellElement) => { if (!item.classList.contains("fn__none") &&
if (!item.classList.contains("fn__none") && item.offsetLeft + 6 > tableSelectElement.offsetLeft + scrollLeft && item.offsetLeft + item.clientWidth - 6 < tableSelectElement.offsetLeft + scrollLeft + tableSelectElement.clientWidth &&
item.offsetLeft + 6 > tableSelectElement.offsetLeft + scrollLeft && item.offsetLeft + item.clientWidth - 6 < tableSelectElement.offsetLeft + scrollLeft + tableSelectElement.clientWidth && item.offsetTop + 6 > tableSelectElement.offsetTop && item.offsetTop + item.clientHeight - 6 < tableSelectElement.offsetTop + tableSelectElement.clientHeight &&
item.offsetTop + 6 > tableSelectElement.offsetTop && item.offsetTop + item.clientHeight - 6 < tableSelectElement.offsetTop + tableSelectElement.clientHeight && (selectCellElements.length === 0 || (selectCellElements.length > 0 && item.offsetTop === selectCellElements[0].offsetTop))) {
(selectCellElements.length === 0 || (selectCellElements.length > 0 && item.offsetTop === selectCellElements[0].offsetTop))) { selectCellElements.push(item);
selectCellElements.push(item); }
} });
}); tableSelectElement.removeAttribute("style");
tableSelectElement.removeAttribute("style"); setTableAlign(protyle, selectCellElements, tableBlockElement, "right", getEditorRange(tableBlockElement));
setTableAlign(protyle, selectCellElements, tableBlockElement, "right", getEditorRange(tableBlockElement)); }
} }
} }).element);
}).element); window.siyuan.menus.menu.append(new MenuItem({
window.siyuan.menus.menu.append(new MenuItem({ icon: "",
icon: "", label: window.siyuan.languages.useDefaultAlign,
label: window.siyuan.languages.useDefaultAlign, click: () => {
click: () => { if (tableBlockElement) {
if (tableBlockElement) { const selectCellElements: HTMLTableCellElement[] = [];
const selectCellElements: HTMLTableCellElement[] = []; const scrollLeft = tableBlockElement.firstElementChild.scrollLeft;
const scrollLeft = tableBlockElement.firstElementChild.scrollLeft; tableBlockElement.querySelectorAll("th, td").forEach((item: HTMLTableCellElement) => {
tableBlockElement.querySelectorAll("th, td").forEach((item: HTMLTableCellElement) => { if (!item.classList.contains("fn__none") &&
if (!item.classList.contains("fn__none") && item.offsetLeft + 6 > tableSelectElement.offsetLeft + scrollLeft && item.offsetLeft + item.clientWidth - 6 < tableSelectElement.offsetLeft + scrollLeft + tableSelectElement.clientWidth &&
item.offsetLeft + 6 > tableSelectElement.offsetLeft + scrollLeft && item.offsetLeft + item.clientWidth - 6 < tableSelectElement.offsetLeft + scrollLeft + tableSelectElement.clientWidth && item.offsetTop + 6 > tableSelectElement.offsetTop && item.offsetTop + item.clientHeight - 6 < tableSelectElement.offsetTop + tableSelectElement.clientHeight &&
item.offsetTop + 6 > tableSelectElement.offsetTop && item.offsetTop + item.clientHeight - 6 < tableSelectElement.offsetTop + tableSelectElement.clientHeight && (selectCellElements.length === 0 || (selectCellElements.length > 0 && item.offsetTop === selectCellElements[0].offsetTop))) {
(selectCellElements.length === 0 || (selectCellElements.length > 0 && item.offsetTop === selectCellElements[0].offsetTop))) { selectCellElements.push(item);
selectCellElements.push(item); }
} });
}); tableSelectElement.removeAttribute("style");
tableSelectElement.removeAttribute("style"); setTableAlign(protyle, selectCellElements, tableBlockElement, "", getEditorRange(tableBlockElement));
setTableAlign(protyle, selectCellElements, tableBlockElement, "", getEditorRange(tableBlockElement)); }
} }
} }).element);
}).element); window.siyuan.menus.menu.append(new MenuItem({type: "separator"}).element);
window.siyuan.menus.menu.append(new MenuItem({type: "separator"}).element); }
window.siyuan.menus.menu.append(new MenuItem({ window.siyuan.menus.menu.append(new MenuItem({
icon: "iconCopy", icon: "iconCopy",
accelerator: "⌘C", accelerator: "⌘C",
@ -1305,42 +1307,44 @@ export class WYSIWYG {
} }
} }
}).element); }).element);
window.siyuan.menus.menu.append(new MenuItem({ if (!protyle.disabled) {
icon: "iconCut", window.siyuan.menus.menu.append(new MenuItem({
accelerator: "⌘X", icon: "iconCut",
label: window.siyuan.languages.cut, accelerator: "⌘X",
click() { label: window.siyuan.languages.cut,
if (tableBlockElement) { click() {
focusByRange(getEditorRange(tableBlockElement)); if (tableBlockElement) {
document.execCommand("cut"); focusByRange(getEditorRange(tableBlockElement));
} document.execCommand("cut");
}
}).element);
window.siyuan.menus.menu.append(new MenuItem({
label: window.siyuan.languages.clear,
icon: "iconTrashcan",
accelerator: "⌦",
click() {
clearTableCell(protyle, tableBlockElement as HTMLElement);
}
}).element);
window.siyuan.menus.menu.append(new MenuItem({
label: window.siyuan.languages.paste,
icon: "iconPaste",
accelerator: "⌘V",
async click() {
if (document.queryCommandSupported("paste")) {
document.execCommand("paste");
} else if (tableBlockElement) {
try {
const text = await readClipboard();
paste(protyle, Object.assign(text, {target: tableBlockElement as HTMLElement}));
} catch (e) {
console.log(e);
} }
} }
} }).element);
}).element); window.siyuan.menus.menu.append(new MenuItem({
label: window.siyuan.languages.clear,
icon: "iconTrashcan",
accelerator: "⌦",
click() {
clearTableCell(protyle, tableBlockElement as HTMLElement);
}
}).element);
window.siyuan.menus.menu.append(new MenuItem({
label: window.siyuan.languages.paste,
icon: "iconPaste",
accelerator: "⌘V",
async click() {
if (document.queryCommandSupported("paste")) {
document.execCommand("paste");
} else if (tableBlockElement) {
try {
const text = await readClipboard();
paste(protyle, Object.assign(text, {target: tableBlockElement as HTMLElement}));
} catch (e) {
console.log(e);
}
}
}
}).element);
}
window.siyuan.menus.menu.popup({x: mouseUpEvent.clientX - 8, y: mouseUpEvent.clientY - 16}); window.siyuan.menus.menu.popup({x: mouseUpEvent.clientX - 8, y: mouseUpEvent.clientY - 16});
} }
} }