diff --git a/app/src/boot/globalEvent/keydown.ts b/app/src/boot/globalEvent/keydown.ts index 89a6404bc..b4ea66207 100644 --- a/app/src/boot/globalEvent/keydown.ts +++ b/app/src/boot/globalEvent/keydown.ts @@ -1366,14 +1366,14 @@ export const windowKeyDown = (app: App, event: KeyboardEvent) => { return; } // https://github.com/siyuan-note/siyuan/issues/8913#issuecomment-1679720605 - const confirmElement = document.querySelector("#confirmDialogConfirmBtn"); - if (confirmElement) { + const confirmDialogElement = document.querySelector('.b3-dialog--open[data-key="dialog-confirm"]'); + if (confirmDialogElement) { if (event.key === "Enter") { - confirmElement.dispatchEvent(new CustomEvent("click")); + confirmDialogElement.dispatchEvent(new CustomEvent("click", {detail: event.key})); event.preventDefault(); return; } else if (event.key === "Escape") { - confirmElement.previousElementSibling.previousElementSibling.dispatchEvent(new CustomEvent("click")); + confirmDialogElement.dispatchEvent(new CustomEvent("click", {detail: event.key})); event.preventDefault(); return; } diff --git a/app/src/dialog/confirmDialog.ts b/app/src/dialog/confirmDialog.ts index a8e2a09a3..abb046dd3 100644 --- a/app/src/dialog/confirmDialog.ts +++ b/app/src/dialog/confirmDialog.ts @@ -16,23 +16,31 @@ export const confirmDialog = (title: string, text: string,
${text}
-
+
`, width: isMobile() ? "92vw" : "520px", }); - const btnsElement = dialog.element.querySelectorAll(".b3-button"); - btnsElement[0].addEventListener("click", () => { - if (cancel) { - cancel(dialog); + + dialog.element.addEventListener("click", (event) => { + let target = event.target as HTMLElement; + const isDispatch = typeof event.detail === "string"; + while (target && !target.isSameNode(dialog.element) || isDispatch) { + if (target.id === "cancelDialogConfirmBtn" || (isDispatch && event.detail=== "Escape")) { + if (cancel) { + cancel(dialog); + } + dialog.destroy(); + break; + } else if (target.id === "confirmDialogConfirmBtn" || (isDispatch && event.detail=== "Enter")) { + if (confirm) { + confirm(dialog); + } + dialog.destroy(); + break; + } + target = target.parentElement; } - dialog.destroy(); - }); - btnsElement[1].addEventListener("click", () => { - if (confirm) { - confirm(dialog); - } - dialog.destroy(); }); dialog.element.setAttribute("data-key", Constants.DIALOG_CONFIRM); }; diff --git a/app/src/protyle/render/av/col.ts b/app/src/protyle/render/av/col.ts index 934760caf..994c72eb4 100644 --- a/app/src/protyle/render/av/col.ts +++ b/app/src/protyle/render/av/col.ts @@ -968,9 +968,10 @@ export const showColMenu = (protyle: IProtyle, blockElement: Element, cellElemen }); dialog.element.addEventListener("click", (event) => { let target = event.target as HTMLElement; - while (target && !target.isSameNode(dialog.element)) { + const isDispatch = typeof event.detail === "string"; + while (target && !target.isSameNode(dialog.element) || isDispatch) { const action = target.getAttribute("data-action"); - if (action === "delete") { + if (action === "delete" || (isDispatch && event.detail === "Enter")) { removeColByMenu({ protyle, colId, @@ -998,13 +999,15 @@ export const showColMenu = (protyle: IProtyle, blockElement: Element, cellElemen }); dialog.destroy(); break; - } else if (target.classList.contains("b3-button--cancel")) { + } else if (target.classList.contains("b3-button--cancel") || (isDispatch && event.detail === "Escape")) { dialog.destroy(); break; } target = target.parentElement; } }); + dialog.element.querySelector("button").focus() + dialog.element.setAttribute("data-key", Constants.DIALOG_CONFIRM); return; } } diff --git a/app/src/protyle/render/av/openMenuPanel.ts b/app/src/protyle/render/av/openMenuPanel.ts index 96f5f396b..8d80ba734 100644 --- a/app/src/protyle/render/av/openMenuPanel.ts +++ b/app/src/protyle/render/av/openMenuPanel.ts @@ -1106,11 +1106,12 @@ export const openMenuPanel = (options: { `, }); - dialog.element.addEventListener("click", (event) => { - let target = event.target as HTMLElement; - while (target && !target.isSameNode(dialog.element)) { + dialog.element.addEventListener("click", (dialogEvent) => { + let target = dialogEvent.target as HTMLElement; + const isDispatch = typeof dialogEvent.detail === "string"; + while (target && !target.isSameNode(dialog.element) || isDispatch) { const action = target.getAttribute("data-action"); - if (action === "delete") { + if (action === "delete" || (isDispatch && dialogEvent.detail === "Enter")) { removeCol({ protyle: options.protyle, data, @@ -1140,13 +1141,14 @@ export const openMenuPanel = (options: { }); dialog.destroy(); break; - } else if (target.classList.contains("b3-button--cancel")) { + } else if (target.classList.contains("b3-button--cancel") || (isDispatch && dialogEvent.detail === "Escape")) { dialog.destroy(); break; } target = target.parentElement; } }); + dialog.element.setAttribute("data-key", Constants.DIALOG_CONFIRM); } else { removeCol({ protyle: options.protyle,