mirror of
https://github.com/mozilla/pdf.js.git
synced 2026-06-05 09:41:01 +02:00
Merge pull request #21347 from calixteman/issue21240
Restore editor layer state for unchanged pages after page mutations
This commit is contained in:
commit
e9ee61f67c
@ -101,6 +101,21 @@ function waitForPagesEdited(page, type) {
|
||||
);
|
||||
}
|
||||
|
||||
async function drawInkLine(page, pageNumber) {
|
||||
const rect = await getRect(
|
||||
page,
|
||||
`.page[data-page-number="${pageNumber}"] .annotationEditorLayer`
|
||||
);
|
||||
const x = rect.x + rect.width * 0.3;
|
||||
const y = rect.y + rect.height * 0.3;
|
||||
const clickHandle = await waitForPointerUp(page);
|
||||
await page.mouse.move(x, y);
|
||||
await page.mouse.down();
|
||||
await page.mouse.move(x + 50, y + 50);
|
||||
await page.mouse.up();
|
||||
await awaitPromise(clickHandle);
|
||||
}
|
||||
|
||||
async function waitForHavingContents(page, expected) {
|
||||
await page.evaluate(() => {
|
||||
// Make sure all the pages will be visible.
|
||||
@ -2853,18 +2868,7 @@ describe("Reorganize Pages View", () => {
|
||||
pages.map(async ([browserName, page]) => {
|
||||
// Enable ink editor mode and draw a line on page 1.
|
||||
await switchToEditor("Ink", page);
|
||||
const rect = await getRect(
|
||||
page,
|
||||
".page[data-page-number='1'] .annotationEditorLayer"
|
||||
);
|
||||
const x = rect.x + rect.width * 0.3;
|
||||
const y = rect.y + rect.height * 0.3;
|
||||
const clickHandle = await waitForPointerUp(page);
|
||||
await page.mouse.move(x, y);
|
||||
await page.mouse.down();
|
||||
await page.mouse.move(x + 50, y + 50);
|
||||
await page.mouse.up();
|
||||
await awaitPromise(clickHandle);
|
||||
await drawInkLine(page, 1);
|
||||
|
||||
// Commit the drawing and wait for it to be serialized.
|
||||
await page.keyboard.press("Escape");
|
||||
@ -2914,6 +2918,68 @@ describe("Reorganize Pages View", () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe("Delete last page while editing", () => {
|
||||
let pages;
|
||||
|
||||
beforeEach(async () => {
|
||||
pages = await loadAndWait(
|
||||
"page_with_number.pdf",
|
||||
".annotationEditorLayer",
|
||||
"50",
|
||||
null,
|
||||
{ enableSplitMerge: true }
|
||||
);
|
||||
});
|
||||
|
||||
afterEach(async () => {
|
||||
await closePages(pages);
|
||||
});
|
||||
|
||||
it("should keep editor layers active on unchanged pages", async () => {
|
||||
await Promise.all(
|
||||
pages.map(async ([browserName, page]) => {
|
||||
await waitForThumbnailVisible(page, 1);
|
||||
await (await page.$(".thumbnail[page-number='17']")).scrollIntoView();
|
||||
await page.waitForSelector(getThumbnailSelector(17), {
|
||||
visible: true,
|
||||
});
|
||||
await waitAndClick(page, getThumbnailSelector(17));
|
||||
await page.waitForSelector(
|
||||
`${getThumbnailSelector(17)}[aria-current="page"]`
|
||||
);
|
||||
|
||||
await waitAndClick(
|
||||
page,
|
||||
`.thumbnail:has(${getThumbnailSelector(17)}) input`
|
||||
);
|
||||
const handlePagesEdited = await waitForPagesEdited(page);
|
||||
await waitAndClick(page, "#viewsManagerStatusActionButton");
|
||||
await waitAndClick(page, "#viewsManagerStatusActionDelete");
|
||||
await awaitPromise(handlePagesEdited);
|
||||
|
||||
await page.click("#viewsManagerToggleButton");
|
||||
await page.waitForSelector("#viewsManager", { hidden: true });
|
||||
await page.evaluate(() => {
|
||||
window.PDFViewerApplication.pdfViewer.currentPageNumber = 1;
|
||||
});
|
||||
|
||||
await switchToEditor("Ink", page);
|
||||
await page.waitForSelector(
|
||||
`.page[data-page-number="1"] .annotationEditorLayer.inkEditing`
|
||||
);
|
||||
await drawInkLine(page, 1);
|
||||
|
||||
await page.keyboard.press("Escape");
|
||||
await waitForSerialized(page, 1);
|
||||
const inkEditors = await page.$$(
|
||||
`.page[data-page-number="1"] .inkEditor`
|
||||
);
|
||||
expect(inkEditors.length).withContext(`In ${browserName}`).toBe(1);
|
||||
})
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe("New badge (bug 2026564)", () => {
|
||||
let pages;
|
||||
|
||||
|
||||
@ -355,24 +355,28 @@ class PDFPageView extends BasePDFPageView {
|
||||
}
|
||||
|
||||
updatePageNumber(newPageNumber) {
|
||||
if (this.id === newPageNumber) {
|
||||
return;
|
||||
}
|
||||
const oldPageNumber = this.id;
|
||||
this.id = newPageNumber;
|
||||
this.renderingId = `page${newPageNumber}`;
|
||||
if (this.pdfPage) {
|
||||
this.pdfPage.pageNumber = newPageNumber;
|
||||
|
||||
if (oldPageNumber !== newPageNumber) {
|
||||
this.id = newPageNumber;
|
||||
this.renderingId = `page${newPageNumber}`;
|
||||
if (this.pdfPage) {
|
||||
this.pdfPage.pageNumber = newPageNumber;
|
||||
}
|
||||
// TODO: do we set the page label ?
|
||||
this.setPageLabel(this.pageLabel);
|
||||
const { div } = this;
|
||||
div.setAttribute("data-page-number", newPageNumber);
|
||||
div.setAttribute(
|
||||
"data-l10n-args",
|
||||
JSON.stringify({ page: newPageNumber })
|
||||
);
|
||||
this._textHighlighter.pageIdx = newPageNumber - 1;
|
||||
}
|
||||
// TODO: do we set the page label ?
|
||||
this.setPageLabel(this.pageLabel);
|
||||
const { div } = this;
|
||||
div.setAttribute("data-page-number", newPageNumber);
|
||||
div.setAttribute("data-l10n-args", JSON.stringify({ page: newPageNumber }));
|
||||
this._textHighlighter.pageIdx = newPageNumber - 1;
|
||||
// Don't update the page index for the draw layer, since it's just used as
|
||||
// an identifier.
|
||||
|
||||
// Page mutations clear the editor layer map; restore unchanged pages too.
|
||||
this.#layerProperties.annotationEditorUIManager?.updatePageIndex(
|
||||
oldPageNumber - 1,
|
||||
newPageNumber - 1
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user