mirror of
https://github.com/siyuan-note/siyuan.git
synced 2026-01-06 00:38:49 +01:00
This commit is contained in:
parent
4a60146f11
commit
51130ad35c
1 changed files with 61 additions and 54 deletions
|
|
@ -37,11 +37,16 @@ export const initBlockPopover = () => {
|
|||
}
|
||||
|
||||
if (window.siyuan.config.editor.floatWindowMode === 1) {
|
||||
clearTimeout(timeoutHide);
|
||||
timeoutHide = window.setTimeout(() => {
|
||||
hidePopover(event)
|
||||
}, 200);
|
||||
|
||||
if (!getTarget(event, aElement)) {
|
||||
hidePopover(event);
|
||||
return;
|
||||
}
|
||||
if (window.siyuan.ctrlIsPressed) {
|
||||
clearTimeout(timeoutHide);
|
||||
showPopover()
|
||||
}
|
||||
return;
|
||||
|
|
@ -50,29 +55,7 @@ export const initBlockPopover = () => {
|
|||
clearTimeout(timeout);
|
||||
clearTimeout(timeoutHide);
|
||||
timeoutHide = window.setTimeout(() => {
|
||||
if (hasClosestByClassName(event.target, "b3-menu") ||
|
||||
(event.target.id && event.target.tagName !== "svg" && (event.target.id.startsWith("minder_node") || event.target.id.startsWith("kity_") || event.target.id.startsWith("node_")))
|
||||
|| event.target.classList.contains("counter")
|
||||
|| event.target.tagName === "circle"
|
||||
) {
|
||||
// b3-menu 需要处理,(( 后的 hint 上的图表移上去需显示预览
|
||||
// gutter & mindmap & 文件树上的数字 & 关系图节点不处理
|
||||
return false;
|
||||
}
|
||||
popoverTargetElement = hasClosestByAttribute(event.target, "data-type", "block-ref") as HTMLElement ||
|
||||
hasClosestByAttribute(event.target, "data-type", "virtual-block-ref") as HTMLElement;
|
||||
if (popoverTargetElement && popoverTargetElement.classList.contains("b3-tooltips")) {
|
||||
popoverTargetElement = undefined;
|
||||
}
|
||||
if (!popoverTargetElement) {
|
||||
popoverTargetElement = hasClosestByClassName(event.target, "popover__block") as HTMLElement;
|
||||
}
|
||||
const linkElement = hasClosestByAttribute(event.target, "data-type", "a", true);
|
||||
if (!popoverTargetElement && linkElement && linkElement.getAttribute("data-href")?.startsWith("siyuan://blocks")) {
|
||||
popoverTargetElement = linkElement;
|
||||
}
|
||||
if (!popoverTargetElement) {
|
||||
hidePopover(event)
|
||||
if (!hidePopover(event)) {
|
||||
return;
|
||||
}
|
||||
if (!popoverTargetElement && !aElement) {
|
||||
|
|
@ -90,39 +73,62 @@ export const initBlockPopover = () => {
|
|||
};
|
||||
|
||||
const hidePopover = (event: MouseEvent & { target: HTMLElement }) => {
|
||||
const blockElement = hasClosestByClassName(event.target, "block__popover", true);
|
||||
const maxEditLevels: { [key: string]: number } = {oid: 0};
|
||||
window.siyuan.blockPanels.forEach((item) => {
|
||||
if (item.targetElement && item.element.getAttribute("data-pin") === "true") {
|
||||
const level = parseInt(item.element.getAttribute("data-level"));
|
||||
const oid = item.element.getAttribute("data-oid");
|
||||
if (maxEditLevels[oid]) {
|
||||
if (level > maxEditLevels[oid]) {
|
||||
maxEditLevels[oid] = level;
|
||||
if (hasClosestByClassName(event.target, "b3-menu") ||
|
||||
(event.target.id && event.target.tagName !== "svg" && (event.target.id.startsWith("minder_node") || event.target.id.startsWith("kity_") || event.target.id.startsWith("node_")))
|
||||
|| event.target.classList.contains("counter")
|
||||
|| event.target.tagName === "circle"
|
||||
) {
|
||||
// b3-menu 需要处理,(( 后的 hint 上的图表移上去需显示预览
|
||||
// gutter & mindmap & 文件树上的数字 & 关系图节点不处理
|
||||
return false;
|
||||
}
|
||||
popoverTargetElement = hasClosestByAttribute(event.target, "data-type", "block-ref") as HTMLElement ||
|
||||
hasClosestByAttribute(event.target, "data-type", "virtual-block-ref") as HTMLElement;
|
||||
if (popoverTargetElement && popoverTargetElement.classList.contains("b3-tooltips")) {
|
||||
popoverTargetElement = undefined;
|
||||
}
|
||||
if (!popoverTargetElement) {
|
||||
popoverTargetElement = hasClosestByClassName(event.target, "popover__block") as HTMLElement;
|
||||
}
|
||||
const linkElement = hasClosestByAttribute(event.target, "data-type", "a", true);
|
||||
if (!popoverTargetElement && linkElement && linkElement.getAttribute("data-href")?.startsWith("siyuan://blocks")) {
|
||||
popoverTargetElement = linkElement;
|
||||
}
|
||||
if (!popoverTargetElement) {
|
||||
const blockElement = hasClosestByClassName(event.target, "block__popover", true);
|
||||
const maxEditLevels: { [key: string]: number } = {oid: 0};
|
||||
window.siyuan.blockPanels.forEach((item) => {
|
||||
if (item.targetElement && item.element.getAttribute("data-pin") === "true") {
|
||||
const level = parseInt(item.element.getAttribute("data-level"));
|
||||
const oid = item.element.getAttribute("data-oid");
|
||||
if (maxEditLevels[oid]) {
|
||||
if (level > maxEditLevels[oid]) {
|
||||
maxEditLevels[oid] = level;
|
||||
}
|
||||
} else {
|
||||
maxEditLevels[oid] = level; // 不能为1,否则 pin 住第三层,第二层会消失
|
||||
}
|
||||
} else {
|
||||
maxEditLevels[oid] = level; // 不能为1,否则 pin 住第三层,第二层会消失
|
||||
}
|
||||
}
|
||||
});
|
||||
if (blockElement) {
|
||||
for (let i = 0; i < window.siyuan.blockPanels.length; i++) {
|
||||
const item = window.siyuan.blockPanels[i];
|
||||
if (item.targetElement &&
|
||||
parseInt(item.element.getAttribute("data-level")) > (maxEditLevels[item.element.getAttribute("data-oid")] || 0) &&
|
||||
item.element.getAttribute("data-pin") === "false" &&
|
||||
parseInt(item.element.getAttribute("data-level")) > parseInt(blockElement.getAttribute("data-level"))) {
|
||||
item.destroy();
|
||||
i--;
|
||||
});
|
||||
if (blockElement) {
|
||||
for (let i = 0; i < window.siyuan.blockPanels.length; i++) {
|
||||
const item = window.siyuan.blockPanels[i];
|
||||
if (item.targetElement &&
|
||||
parseInt(item.element.getAttribute("data-level")) > (maxEditLevels[item.element.getAttribute("data-oid")] || 0) &&
|
||||
item.element.getAttribute("data-pin") === "false" &&
|
||||
parseInt(item.element.getAttribute("data-level")) > parseInt(blockElement.getAttribute("data-level"))) {
|
||||
item.destroy();
|
||||
i--;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (let i = 0; i < window.siyuan.blockPanels.length; i++) {
|
||||
const item = window.siyuan.blockPanels[i];
|
||||
if (item.targetElement && item.element.getAttribute("data-pin") === "false" &&
|
||||
parseInt(item.element.getAttribute("data-level")) > (maxEditLevels[item.element.getAttribute("data-oid")] || 0)) {
|
||||
item.destroy();
|
||||
i--;
|
||||
} else {
|
||||
for (let i = 0; i < window.siyuan.blockPanels.length; i++) {
|
||||
const item = window.siyuan.blockPanels[i];
|
||||
if (item.targetElement && item.element.getAttribute("data-pin") === "false" &&
|
||||
parseInt(item.element.getAttribute("data-level")) > (maxEditLevels[item.element.getAttribute("data-oid")] || 0)) {
|
||||
item.destroy();
|
||||
i--;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -222,4 +228,5 @@ export const showPopover = async () => {
|
|||
defIds,
|
||||
}));
|
||||
}
|
||||
popoverTargetElement = undefined;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue