Vanessa 2024-11-15 13:09:46 +08:00
parent c2c7f87475
commit ab147598e1
2 changed files with 32 additions and 21 deletions

View file

@ -1404,17 +1404,17 @@ export const windowKeyDown = (app: App, event: KeyboardEvent) => {
return;
}
// 闪卡长按 Esc 光标定位到闪卡按钮上 https://github.com/siyuan-note/siyuan/issues/12989
if (document.activeElement && hasClosestByClassName(document.activeElement, "card__action")) {
return;
}
// 光标在文档树等面板中,按 Esc 回到编辑器中 https://github.com/siyuan-note/siyuan/issues/4289
let range;
if (getSelection().rangeCount > 0) {
range = getSelection().getRangeAt(0);
const protypleElement = hasClosestByClassName(range.startContainer, "protyle-content", true);
if (protypleElement) {
const range = getSelection().getRangeAt(0);
if (hasClosestByClassName(range.startContainer, "protyle-content", true)) {
focusByRange(range);
return;
}
} else {
range = document.createRange();
}
const lastBackStack = window.siyuan.backStack[window.siyuan.backStack.length - 1];
if (lastBackStack && lastBackStack.protyle.toolbar.range) {

View file

@ -14,6 +14,7 @@ import {
import {
hasClosestBlock,
hasClosestByAttribute,
hasClosestByClassName,
hasClosestByMatchTag,
hasTopClosestByAttribute,
isInEmbedBlock
@ -1175,23 +1176,33 @@ export const keydown = (protyle: IProtyle, editorElement: HTMLElement) => {
// esc
if (event.key === "Escape") {
if (!protyle.toolbar.element.classList.contains("fn__none") ||
!protyle.hint.element.classList.contains("fn__none") ||
!protyle.toolbar.subElement.classList.contains("fn__none")) {
hideElements(["toolbar", "hint", "util"], protyle);
protyle.hint.enableExtend = false;
} else if (nodeElement.classList.contains("protyle-wysiwyg--select")) {
hideElements(["select"], protyle);
countBlockWord([], protyle.block.rootID);
} else if (!window.siyuan.menus.menu.element.classList.contains("fn__none")) {
// 防止 ESC 时选中当前块
window.siyuan.menus.menu.remove();
if (event.repeat) {
// https://github.com/siyuan-note/siyuan/issues/12989
const cardElement = hasClosestByClassName(range.startContainer, "card__main", true);
if (cardElement && document.activeElement && document.activeElement.classList.contains("protyle-wysiwyg")) {
(cardElement.querySelector(".card__action button") as HTMLElement).focus()
hideElements(["select"], protyle);
}
} else {
hideElements(["select"], protyle);
range.collapse(false);
nodeElement.classList.add("protyle-wysiwyg--select");
countBlockWord([nodeElement.getAttribute("data-node-id")], protyle.block.rootID);
if (!protyle.toolbar.element.classList.contains("fn__none") ||
!protyle.hint.element.classList.contains("fn__none") ||
!protyle.toolbar.subElement.classList.contains("fn__none")) {
hideElements(["toolbar", "hint", "util"], protyle);
protyle.hint.enableExtend = false;
} else if (nodeElement.classList.contains("protyle-wysiwyg--select")) {
hideElements(["select"], protyle);
countBlockWord([], protyle.block.rootID);
} else if (!window.siyuan.menus.menu.element.classList.contains("fn__none")) {
// 防止 ESC 时选中当前块
window.siyuan.menus.menu.remove();
} else {
hideElements(["select"], protyle);
range.collapse(false);
nodeElement.classList.add("protyle-wysiwyg--select");
countBlockWord([nodeElement.getAttribute("data-node-id")], protyle.block.rootID);
}
}
event.stopPropagation();
event.preventDefault();
return;
}