mirror of
https://github.com/mozilla/pdf.js.git
synced 2025-04-19 06:38:07 +02:00
Fix left offset when scrolling to search result
When computing the left offset of the highlighted text, we cannot use .offsetLeft because the text might have been scaled through CSS, and it needs to be taken into account. Use `.getClientRects()`/`.getBoundingClientRect()` instead, which will return measurements scaled appropriately.
This commit is contained in:
parent
8985d80aef
commit
4e2aabc5cd
4 changed files with 36 additions and 1 deletions
|
@ -126,4 +126,31 @@ describe("find bar", () => {
|
|||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe("issue19207.pdf", () => {
|
||||
let pages;
|
||||
|
||||
beforeAll(async () => {
|
||||
pages = await loadAndWait("issue19207.pdf", ".textLayer", 200);
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
await closePages(pages);
|
||||
});
|
||||
|
||||
it("must scroll to the search result text", async () => {
|
||||
await Promise.all(
|
||||
pages.map(async ([browserName, page]) => {
|
||||
// Search for "40"
|
||||
await page.click("#viewFindButton");
|
||||
await page.waitForSelector("#viewFindButton", { hidden: false });
|
||||
await page.type("#findInput", "40");
|
||||
|
||||
const highlight = await page.waitForSelector(".textLayer .highlight");
|
||||
|
||||
expect(await highlight.isIntersectingViewport()).toBeTrue();
|
||||
})
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
1
test/pdfs/.gitignore
vendored
1
test/pdfs/.gitignore
vendored
|
@ -690,3 +690,4 @@
|
|||
!inks_basic.pdf
|
||||
!issue19182.pdf
|
||||
!issue18911.pdf
|
||||
!issue19207.pdf
|
||||
|
|
BIN
test/pdfs/issue19207.pdf
Normal file
BIN
test/pdfs/issue19207.pdf
Normal file
Binary file not shown.
|
@ -193,8 +193,15 @@ class TextHighlighter {
|
|||
span.className = `${className} appended`;
|
||||
span.append(node);
|
||||
div.append(span);
|
||||
return className.includes("selected") ? span.offsetLeft : 0;
|
||||
|
||||
if (className.includes("selected")) {
|
||||
const { left } = span.getClientRects()[0];
|
||||
const parentLeft = div.getBoundingClientRect().left;
|
||||
return left - parentLeft;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
div.append(node);
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue