This commit is contained in:
Vanessa 2023-05-17 18:48:42 +08:00
parent de2a414968
commit d44f47e9b5
2 changed files with 21 additions and 9 deletions

View File

@ -39,7 +39,7 @@ export const initBlockPopover = () => {
} else if (!aElement) { } else if (!aElement) {
hideTooltip(); hideTooltip();
} }
if (window.siyuan.config.editor.floatWindowMode === 1) { if (window.siyuan.config.editor.floatWindowMode === 1 || window.siyuan.shiftIsPressed) {
clearTimeout(timeoutHide); clearTimeout(timeoutHide);
timeoutHide = window.setTimeout(() => { timeoutHide = window.setTimeout(() => {
hidePopover(event); hidePopover(event);
@ -51,6 +51,9 @@ export const initBlockPopover = () => {
if (window.siyuan.ctrlIsPressed) { if (window.siyuan.ctrlIsPressed) {
clearTimeout(timeoutHide); clearTimeout(timeoutHide);
showPopover(); showPopover();
} else if (window.siyuan.shiftIsPressed) {
clearTimeout(timeoutHide);
showPopover(true);
} }
return; return;
} }
@ -65,7 +68,7 @@ export const initBlockPopover = () => {
clearTimeout(timeout); clearTimeout(timeout);
} }
}, 200); }, 200);
timeout = window.setTimeout(async () => { timeout = window.setTimeout(() => {
if (!getTarget(event, aElement)) { if (!getTarget(event, aElement)) {
return; return;
} }
@ -159,7 +162,7 @@ const getTarget = (event: MouseEvent & { target: HTMLElement }, aElement: false
aElement.getAttribute("prevent-popover") !== "true") { aElement.getAttribute("prevent-popover") !== "true") {
popoverTargetElement = aElement; popoverTargetElement = aElement;
} }
if (!popoverTargetElement || window.siyuan.altIsPressed || window.siyuan.shiftIsPressed || if (!popoverTargetElement || window.siyuan.altIsPressed ||
(window.siyuan.config.editor.floatWindowMode === 0 && window.siyuan.ctrlIsPressed) || (window.siyuan.config.editor.floatWindowMode === 0 && window.siyuan.ctrlIsPressed) ||
(popoverTargetElement && popoverTargetElement.getAttribute("prevent-popover") === "true")) { (popoverTargetElement && popoverTargetElement.getAttribute("prevent-popover") === "true")) {
return false; return false;
@ -174,7 +177,7 @@ const getTarget = (event: MouseEvent & { target: HTMLElement }, aElement: false
return true; return true;
}; };
export const showPopover = async () => { export const showPopover = async (showRef = false) => {
if (!popoverTargetElement) { if (!popoverTargetElement) {
return; return;
} }
@ -183,12 +186,18 @@ export const showPopover = async () => {
const dataId = popoverTargetElement.getAttribute("data-id"); const dataId = popoverTargetElement.getAttribute("data-id");
if (dataId) { if (dataId) {
// backlink/util/hint/正文标题 上的弹层 // backlink/util/hint/正文标题 上的弹层
if (dataId.startsWith("[")) { if (showRef) {
ids = JSON.parse(dataId); const postResponse = await fetchSyncPost("/api/block/getRefIDs", {id: dataId});
ids = postResponse.data.refIDs;
defIds = postResponse.data.defIDs;
} else { } else {
ids = [dataId]; if (dataId.startsWith("[")) {
ids = JSON.parse(dataId);
} else {
ids = [dataId];
}
defIds = JSON.parse(popoverTargetElement.getAttribute("data-defids") || "[]");
} }
defIds = JSON.parse(popoverTargetElement.getAttribute("data-defids") || "[]");
} else if (popoverTargetElement.getAttribute("data-type")?.indexOf("virtual-block-ref") > -1) { } else if (popoverTargetElement.getAttribute("data-type")?.indexOf("virtual-block-ref") > -1) {
const nodeElement = hasClosestBlock(popoverTargetElement); const nodeElement = hasClosestBlock(popoverTargetElement);
if (nodeElement) { if (nodeElement) {
@ -237,5 +246,5 @@ export const showPopover = async () => {
defIds, defIds,
})); }));
} }
popoverTargetElement = undefined; // 不能清除否则ctrl 后 shift 就 无效 popoverTargetElement = undefined;
}; };

View File

@ -435,6 +435,9 @@ export const globalShortcut = (app: App) => {
if (!event.altKey && event.shiftKey && !isCtrl(event)) { if (!event.altKey && event.shiftKey && !isCtrl(event)) {
if (event.key === "Shift") { if (event.key === "Shift") {
window.siyuan.shiftIsPressed = true; window.siyuan.shiftIsPressed = true;
if (!event.repeat) {
showPopover(true);
}
} else { } else {
window.siyuan.shiftIsPressed = false; window.siyuan.shiftIsPressed = false;
} }