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,