[Editor] Allow to save an edited comment in using CTRL+Enter shortcut.

This commit is contained in:
Calixte Denizet 2025-11-21 14:52:04 +01:00
parent ec71e4ed65
commit b6fcb523c5
No known key found for this signature in database
GPG Key ID: 0C5442631EE0691F
4 changed files with 86 additions and 0 deletions

View File

@ -15,6 +15,7 @@
import { import {
awaitPromise, awaitPromise,
clearInput,
closePages, closePages,
createPromise, createPromise,
dragAndDrop, dragAndDrop,
@ -851,4 +852,62 @@ describe("Comment", () => {
); );
}); });
}); });
describe("Save a comment in using CTRL+Enter", () => {
let pages;
beforeEach(async () => {
pages = await loadAndWait(
"comments.pdf",
".annotationEditorLayer",
"page-fit",
null,
{ enableComment: true }
);
});
afterEach(async () => {
await closePages(pages);
});
it("must check that the comment is saved", async () => {
await Promise.all(
pages.map(async ([browserName, page]) => {
const commentButtonSelector = `[data-annotation-id="612R"] + button.annotationCommentButton`;
await waitAndClick(page, commentButtonSelector);
const commentPopupSelector = "#commentPopup";
const editButtonSelector = `${commentPopupSelector} button.commentPopupEdit`;
await waitAndClick(page, editButtonSelector);
const textInputSelector = "#commentManagerTextInput";
await page.waitForSelector(textInputSelector, {
visible: true,
});
await clearInput(page, textInputSelector, true);
const comment = "Comment saved using CTRL+Enter";
await page.type(textInputSelector, comment);
await page.focus(textInputSelector);
await page.keyboard.down("Control");
await page.keyboard.press("Enter");
await page.keyboard.up("Control");
await page.waitForSelector("#commentManagerDialog", {
visible: false,
});
await page.hover(commentButtonSelector);
await page.waitForSelector(commentPopupSelector, {
visible: true,
});
const popupTextSelector = `${commentPopupSelector} .commentPopupText`;
const popupText = await page.evaluate(
selector => document.querySelector(selector).textContent,
popupTextSelector
);
expect(popupText).withContext(`In ${browserName}`).toEqual(comment);
})
);
});
});
}); });

View File

@ -87,6 +87,15 @@ class AltTextManager {
saveButton.addEventListener("click", this.#save.bind(this)); saveButton.addEventListener("click", this.#save.bind(this));
optionDescription.addEventListener("change", onUpdateUIState); optionDescription.addEventListener("change", onUpdateUIState);
optionDecorative.addEventListener("change", onUpdateUIState); optionDecorative.addEventListener("change", onUpdateUIState);
textarea.addEventListener("keydown", e => {
if (
(e.ctrlKey || e.metaKey) &&
e.key === "Enter" &&
!saveButton.disabled
) {
this.#save();
}
});
this.#overlayManager.register(dialog); this.#overlayManager.register(dialog);
} }

View File

@ -723,6 +723,15 @@ class CommentDialog {
textInput.addEventListener("input", () => { textInput.addEventListener("input", () => {
saveButton.disabled = textInput.value === this.#previousText; saveButton.disabled = textInput.value === this.#previousText;
}); });
textInput.addEventListener("keydown", e => {
if (
(e.ctrlKey || e.metaKey) &&
e.key === "Enter" &&
!saveButton.disabled
) {
this.#save();
}
});
// Make the dialog draggable. // Make the dialog draggable.
let pointerMoveAC; let pointerMoveAC;

View File

@ -141,6 +141,15 @@ class NewAltTextManager {
textarea.addEventListener("input", () => { textarea.addEventListener("input", () => {
this.#toggleTitleAndDisclaimer(); this.#toggleTitleAndDisclaimer();
}); });
textarea.addEventListener("keydown", e => {
if (
(e.ctrlKey || e.metaKey) &&
e.key === "Enter" &&
!saveButton.disabled
) {
this.#save();
}
});
eventBus._on("enableguessalttext", ({ value }) => { eventBus._on("enableguessalttext", ({ value }) => {
this.#toggleGuessAltText(value, /* isInitial = */ false); this.#toggleGuessAltText(value, /* isInitial = */ false);