Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 3 additions & 6 deletions src/core/evaluator.js
Original file line number Diff line number Diff line change
Expand Up @@ -3197,6 +3197,9 @@ class PartialEvaluator {
break;
}

// preprocessor.read() already handles save, restore and transform
// operations, so we don't need to worry about them here.

textState = stateManager.state;
currentTextState ||= textState.clone();
const fn = operation.fn;
Expand Down Expand Up @@ -3570,12 +3573,6 @@ class PartialEvaluator {
});
}
break;
case OPS.restore:
stateManager.restore();
break;
case OPS.save:
stateManager.save();
break;
} // switch
if (textContent.items.length >= (sink?.desiredSize ?? 1)) {
// Wait for ready, if we reach highWaterMark.
Expand Down
46 changes: 22 additions & 24 deletions test/integration/reorganize_pages_spec.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,10 @@ describe("Reorganize Pages View", () => {
await waitForThumbnailVisible(page, 1);
const rect2 = await getRect(page, getThumbnailSelector(2));
const rect4 = await getRect(page, getThumbnailSelector(4));
await page.click(`.thumbnail:has(${getThumbnailSelector(1)}) input`);
await waitAndClick(
page,
`.thumbnail:has(${getThumbnailSelector(1)}) input`
);

const handlePagesEdited = await waitForPagesEdited(page);
await dragAndDrop(
Expand Down Expand Up @@ -288,10 +291,11 @@ describe("Reorganize Pages View", () => {
const rect1 = await getRect(page, getThumbnailSelector(1));
const rect2 = await getRect(page, getThumbnailSelector(2));
await (await page.$(".thumbnail[page-number='14'")).scrollIntoView();
await page.waitForSelector(getThumbnailSelector(14), {
visible: true,
});
await page.click(`.thumbnail:has(${getThumbnailSelector(14)}) input`);

await waitAndClick(
page,
`.thumbnail:has(${getThumbnailSelector(14)}) input`
);
await (await page.$(".thumbnail[page-number='1'")).scrollIntoView();
await page.waitForSelector(getThumbnailSelector(1), {
visible: true,
Expand Down Expand Up @@ -323,7 +327,7 @@ describe("Reorganize Pages View", () => {
const rect1 = await getRect(page, getThumbnailSelector(1));
const rect2 = await getRect(page, getThumbnailSelector(2));

await page.click(getThumbnailSelector(2));
await waitAndClick(page, getThumbnailSelector(2));
await page.waitForSelector(
`${getThumbnailSelector(2)}[aria-current="page"]`
);
Expand Down Expand Up @@ -367,11 +371,8 @@ describe("Reorganize Pages View", () => {
it("should check if the search is working after moving pages", async () => {
await Promise.all(
pages.map(async ([browserName, page]) => {
await page.click("#viewFindButton");
await page.waitForSelector(":has(> #findHighlightAll)", {
visible: true,
});
await page.click(":has(> #findHighlightAll)");
await waitAndClick(page, "#viewFindButton");
await waitAndClick(page, ":has(> #findHighlightAll)");

await page.waitForSelector("#findInput", { visible: true });
await page.type("#findInput", "1");
Expand Down Expand Up @@ -482,7 +483,7 @@ describe("Reorganize Pages View", () => {
await waitForThumbnailVisible(page, 1);
await movePages(page, [2], 10);
await scrollIntoView(page, getAnnotationSelector("107R"));
await page.click(getAnnotationSelector("107R"));
await waitAndClick(page, getAnnotationSelector("107R"));
const currentPage = await page.$eval(
"#pageNumber",
el => el.valueAsNumber
Expand All @@ -498,11 +499,11 @@ describe("Reorganize Pages View", () => {
await waitForThumbnailVisible(page, 1);
await movePages(page, [2, 4], 10);

await page.click("#viewsManagerSelectorButton");
await page.click("#outlinesViewMenu");
await waitAndClick(page, "#viewsManagerSelectorButton");
await waitAndClick(page, "#outlinesViewMenu");
await page.waitForSelector("#outlinesView", { visible: true });

await page.click("#outlinesView .treeItem:nth-child(2)");
await waitAndClick(page, "#outlinesView .treeItem:nth-child(2)");

const currentPage = await page.$eval(
"#pageNumber",
Expand Down Expand Up @@ -539,12 +540,8 @@ describe("Reorganize Pages View", () => {
await Promise.all(
pages.map(async ([browserName, page]) => {
await page.waitForSelector("#outlinesView", { visible: true });
await page.waitForSelector("#viewsManagerSelectorButton", {
visible: true,
});
await page.click("#viewsManagerSelectorButton");
await page.waitForSelector("#thumbnailsViewMenu", { visible: true });
await page.click("#thumbnailsViewMenu");
await waitAndClick(page, "#viewsManagerSelectorButton");
await waitAndClick(page, "#thumbnailsViewMenu");

const thumbSelector =
"#thumbnailsView .thumbnailImageContainer > img";
Expand Down Expand Up @@ -1702,8 +1699,9 @@ describe("Reorganize Pages View", () => {
await page.waitForSelector("button.thumbnailPasteButton", {
hidden: true,
});
const pasteButtons = await page.$$("button.thumbnailPasteButton");
expect(pasteButtons.length).withContext(`In ${browserName}`).toBe(0);
await page.waitForFunction(
() => !document.querySelector("button.thumbnailPasteButton")
);
})
);
});
Expand Down Expand Up @@ -1751,7 +1749,7 @@ describe("Reorganize Pages View", () => {
);
});

await page.click("#viewsManagerStatusActionButton");
await waitAndClick(page, "#viewsManagerStatusActionButton");
await waitAndClick(page, "#viewsManagerStatusActionExport");
const pagesData = await awaitPromise(handleExport);
expect(pagesData)
Expand Down
43 changes: 40 additions & 3 deletions test/integration/test_utils.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -650,13 +650,50 @@ async function scrollIntoView(page, selector) {
sel => [
new Promise(resolve => {
const container = document.getElementById("viewerContainer");
if (container.scrollHeight <= container.clientHeight) {
const element = document.querySelector(sel);
if (!container || !element) {
resolve();
return;
}
container.addEventListener("scrollend", resolve, { once: true });
const element = document.querySelector(sel);
if (
container.scrollHeight <= container.clientHeight &&
container.scrollWidth <= container.clientWidth
) {
resolve();
return;
}

const beforeTop = container.scrollTop;
const beforeLeft = container.scrollLeft;
let settled = false;
let timeoutId = null;

const finish = () => {
if (settled) {
return;
}
settled = true;
if (timeoutId !== null) {
clearTimeout(timeoutId);
}
container.removeEventListener("scrollend", finish);
resolve();
};

container.addEventListener("scrollend", finish, { once: true });
element.scrollIntoView({ behavior: "instant", block: "start" });

if (
container.scrollTop === beforeTop &&
container.scrollLeft === beforeLeft
) {
finish();
return;
}

// Some browsers occasionally miss `scrollend`, so keep a short
// fallback to avoid hanging.
timeoutId = setTimeout(finish, 250);
}),
],
selector
Expand Down
4 changes: 3 additions & 1 deletion web/pdf_thumbnail_viewer.js
Original file line number Diff line number Diff line change
Expand Up @@ -721,7 +721,9 @@ class PDFThumbnailViewer {
const newPageNumber = currentPageNumber || 1;
this.linkService.goToPage(newPageNumber);
const thumbnailView = this._thumbnails[newPageNumber - 1];
thumbnailView.imageContainer.focus();
if (!this.container.contains(document.activeElement)) {
thumbnailView.imageContainer.focus();
}
}, 0);
}

Expand Down
Loading