From 7ec3d60e9b400a68d0995dbd673ccf73f86c99b9 Mon Sep 17 00:00:00 2001 From: LoukasPap Date: Thu, 6 Aug 2026 13:32:07 +0300 Subject: [PATCH 1/5] Fix edit toolbar overlap issue with annotations and move it up to page level --- src/display/editor/tools.js | 6 +++++- test/pdfs/.gitignore | 1 + test/pdfs/link-overlaps-editor-toolbar.pdf | Bin 0 -> 40294 bytes test/test_manifest.json | 7 +++++++ web/annotation_editor_layer_builder.css | 5 ++++- web/annotation_layer_builder.css | 2 ++ 6 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 test/pdfs/link-overlaps-editor-toolbar.pdf diff --git a/src/display/editor/tools.js b/src/display/editor/tools.js index af98c6940ae81..a6fc40677a8c1 100644 --- a/src/display/editor/tools.js +++ b/src/display/editor/tools.js @@ -1480,8 +1480,12 @@ class AnnotationEditorUIManager { if (!boxes) { return; } + const parent = textLayer.parentElement; + if (!parent) { + return; + } this.#floatingToolbar ||= new FloatingToolbar(this); - this.#floatingToolbar.show(textLayer, boxes, this.direction === "ltr"); + this.#floatingToolbar.show(parent, boxes, this.direction === "ltr"); } /** diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index 8148a5d3202a4..c4d09e9dde859 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -939,6 +939,7 @@ !checkbox_no_appearance.pdf !opt_demo.pdf !bug1873345.pdf +!link-overlaps-editor-toolbar.pdf !cff_bluescale_small_zones.pdf !multimedia_annotations.pdf !issue17333.pdf diff --git a/test/pdfs/link-overlaps-editor-toolbar.pdf b/test/pdfs/link-overlaps-editor-toolbar.pdf new file mode 100644 index 0000000000000000000000000000000000000000..740c36cc734bda940e5ed03fb05ba48035c49e04 GIT binary patch literal 40294 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 md@PWV{ z{H5K$Hp?%^$Nvn$EL<-M?OzMQH)+^DhzVWn$|odkj|}R}iH!7Pa9FY!iS;5HfJrI= zKZvk)aCL5k!YWI;0cLWd-NXPbD9i3N#vcA>M|#!DB;c~r9y#YrU76Iu?zpu?Xo1zf z5!w5>ubznTsjlZh^wVLp~LHr3gVQSV||N*oRnLw|TK? zqqtWok#!Dg-WWpR`|^sGqM$!2*$S!7^t1$80|2WXG@F0$!~}UI1joO8Q_Xa$kZA~O zFk~V6I_XrswbPLH z*b|yFN@`M>)u$o(6z|27I< zPKp2dnR2mnas1=UK4t)jg_Zr~6#cJ9eCUIyOE8yl?afjMjShf>TbiFmfaHfk2!e!; zed~;W900k5V1S$m5fHqY0I~5VtM8p`a^1TsZYxZlh@A468t3^HcDYQ-hlZFOw>Y;Z zsZ7%;%B;g#sVVj)xtjV_Zx#$F9;-~hq{qk33*PS>N7pOvok#5nX6WJw6wqt&X1?Vu zr6+!|bgz3_^PB1#?9`UVC=C$bPQM4%U(GKEy0=eWQw!G(eDGai-`qi2O~1epj$$2u zU$wNfvEn0Ai}S%HJ+H0vE8Ap_S=B1S2Jr32{e4%2%Y#BcZsg`9$Fxh~Fmup}(OMJo z;zGOqQ>8^+x>?($&a-_1@?gmk4rh#JFAUsmBb9)Yd)8^ z%M#}6@sDHc0jsZ`GM7J&KAPY9nB#moQ+7^%3XbhN?f7WxYtS)P&?a7DYSh7|$9QQs z{gAfJ;x25SE9H#)W#55}FyUv`q{<0&vg3p%M8B^+w?<*+JbTmC@aL0~fm;ExT$_ZW z_Qda+Xx3(EA7+6fvBPs)`=_oqUwrgB7!3>#L+V7vp4!c>3vfH0CLd&>y_hbg_78V; z^3oX3kiX@RO$}a_aSDh(RqXwJo7%Dh8R31?seX5O?GaIb?A|=o)$s& zoezC5=wTsP@#m!08jPkLr>)0nAO$XlxD`rF;GOg8e@p&M+p&#FNhrSA+Idf%>faYt z!_+T)aB}S2^;7!OAw6LnKVmgfCnk4Xkb^s2P?rD!L!@+S%qK<)raOm&>K4_@s{?|A zyIp!O_y>6IxW{nJ8n}{mm+Tl^V@&i4-9+;Y_;zlDQBQ?LC#2DiKIYNM-6ScC6bag1Fh zLFQbwPHS=5XCqhNA7t(9{ETP{Fq)>tR~5wVhsF`ZItGVKJCqZ9_#AtD8)P#=3Q|k4wRSD6!L)!8af# zO0p3u{!+=OX%VO{+nU>0_Ylz^;PoIgAh8uAXt*g1bSkt@JTOvyJ0oAon(kRD}W z_xx{&Wkj~gH;dfmABrQUnGDddZdA0VVVmsgPOwsKhz^B1>XyFX*St=`{FpbZQrg!n z^T{2~lVA)!g=?T{`_i8@oF^v3skMlRJ~U*+zuR)Ha#rQ%&dzJwLP$&IQtO`ZuN<

sxVo7FhN(0RNh^>%>#Kn&D~FJ5oDiEM26 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 literal 0 HcmV?d00001 diff --git a/test/test_manifest.json b/test/test_manifest.json index 05dea0a73d430..617cebb86c0bf 100644 --- a/test/test_manifest.json +++ b/test/test_manifest.json @@ -1215,6 +1215,13 @@ "rounds": 1, "type": "text" }, + { + "id": "link-overlaps-editor-toolbar", + "file": "pdfs/link-overlaps-editor-toolbar.pdf", + "md5": "cffe75e60236e236e15793e37cd0809b", + "rounds": 1, + "type": "eq" + }, { "id": "issue9655-text", "file": "pdfs/issue9655_reduced.pdf", diff --git a/web/annotation_editor_layer_builder.css b/web/annotation_editor_layer_builder.css index 13f4768c4d334..7801fd64ace5e 100644 --- a/web/annotation_editor_layer_builder.css +++ b/web/annotation_editor_layer_builder.css @@ -122,6 +122,7 @@ font-size: calc(100px * var(--total-scale-factor)); transform-origin: 0 0; cursor: auto; + isolation: isolate; .selectedEditor { z-index: 100000 !important; @@ -241,7 +242,7 @@ .highlightEditor, .signatureEditor ), -.textLayer { +.page { .editToolbar { --editor-toolbar-delete-image: url(images/editor-toolbar-delete.svg); --editor-toolbar-bg-color: light-dark(#f0f0f4, #2b2a33); @@ -329,6 +330,8 @@ position: absolute; inset-inline-end: 0; inset-block-start: calc(100% + var(--editor-toolbar-vert-offset)); + z-index: 2; + isolation: isolate; border-radius: 6px; background-color: var(--editor-toolbar-bg-color); diff --git a/web/annotation_layer_builder.css b/web/annotation_layer_builder.css index af3a2af245a5d..9737b7e322e43 100644 --- a/web/annotation_layer_builder.css +++ b/web/annotation_layer_builder.css @@ -79,6 +79,8 @@ left: 0; pointer-events: none; transform-origin: 0 0; + z-index: 1; + isolation: isolate; &[data-main-rotation="90"] .norotate { transform: rotate(270deg) translateX(-100%); From dbece9daa7dabaa5e6b37c93efdfb3a8184106e9 Mon Sep 17 00:00:00 2001 From: LoukasPap Date: Wed, 19 Aug 2026 17:28:26 +0300 Subject: [PATCH 2/5] Move createFreeTextEditor function to test_utils --- test/integration/freetext_editor_spec.mjs | 52 +---------------------- test/integration/test_utils.mjs | 49 +++++++++++++++++++++ 2 files changed, 51 insertions(+), 50 deletions(-) diff --git a/test/integration/freetext_editor_spec.mjs b/test/integration/freetext_editor_spec.mjs index 35aaa2e72bd9b..614da115ed59d 100644 --- a/test/integration/freetext_editor_spec.mjs +++ b/test/integration/freetext_editor_spec.mjs @@ -17,10 +17,10 @@ import { awaitPromise, clearEditors, closePages, + commit, copy, copyToClipboard, - countSerialized, - countStorageEntries, + createFreeTextEditor, createPromise, dragAndDrop, firstPageOnTop, @@ -28,7 +28,6 @@ import { getEditors, getEditorSelector, getFirstSerialized, - getNextEditorId, getRect, getSerialized, isCanvasMonochrome, @@ -67,55 +66,8 @@ const selectAll = selectEditors.bind(null, "freeText"); const clearAll = clearEditors.bind(null, "freeText"); -const commit = async page => { - await page.keyboard.press("Escape"); - await page.waitForSelector(".freeTextEditor.selectedEditor .overlay.enabled"); -}; - const switchToFreeText = switchToEditor.bind(null, "FreeText"); -const cancelFocusIn = async (page, selector) => { - page.evaluate(sel => { - const el = document.querySelector(sel); - el.addEventListener( - "focusin", - evt => { - evt.preventDefault(); - evt.stopPropagation(); - }, - { capture: true, once: true } - ); - }, selector); -}; - -const createFreeTextEditor = async ({ - page, - x, - y, - data = null, - noFocusIn = false, -}) => { - const editorSelector = getEditorSelector(await getNextEditorId(page)); - const serializedCount = await countSerialized(page); - const storageEntriesCount = await countStorageEntries(page); - - await page.mouse.click(x, y); - await page.waitForSelector(editorSelector, { visible: true }); - if (data) { - await page.type(`${editorSelector} .internal`, data); - } - if (noFocusIn) { - await cancelFocusIn(page, editorSelector); - } - await commit(page); - - await waitForSelectedEditor(page, editorSelector); - await waitForStorageEntries(page, storageEntriesCount + 1); - await waitForSerialized(page, serializedCount + 1); - - return editorSelector; -}; - describe("FreeText Editor", () => { describe("FreeText", () => { let pages; diff --git a/test/integration/test_utils.mjs b/test/integration/test_utils.mjs index 5999c202d2ef8..52211b43b334e 100644 --- a/test/integration/test_utils.mjs +++ b/test/integration/test_utils.mjs @@ -432,6 +432,53 @@ async function waitForUnselectedEditor(page, selector) { return page.waitForSelector(`${selector}:not(.selectedEditor)`); } +async function commit(page) { + await page.keyboard.press("Escape"); + await page.waitForSelector(".freeTextEditor.selectedEditor .overlay.enabled"); +} + +async function cancelFocusIn(page, selector) { + page.evaluate(sel => { + const el = document.querySelector(sel); + el.addEventListener( + "focusin", + evt => { + evt.preventDefault(); + evt.stopPropagation(); + }, + { capture: true, once: true } + ); + }, selector); +} + +async function createFreeTextEditor({ + page, + x, + y, + data = null, + noFocusIn = false, +}) { + const editorSelector = getEditorSelector(await getNextEditorId(page)); + const serializedCount = await countSerialized(page); + const storageEntriesCount = await countStorageEntries(page); + + await page.mouse.click(x, y); + await page.waitForSelector(editorSelector, { visible: true }); + if (data) { + await page.type(`${editorSelector} .internal`, data); + } + if (noFocusIn) { + await cancelFocusIn(page, editorSelector); + } + await commit(page); + + await waitForSelectedEditor(page, editorSelector); + await waitForStorageEntries(page, storageEntriesCount + 1); + await waitForSerialized(page, serializedCount + 1); + + return editorSelector; +} + async function mockClipboard(pages) { return Promise.all( pages.map(async ([_, page]) => { @@ -1189,10 +1236,12 @@ export { clearInput, closePages, closeSinglePage, + commit, copy, copyToClipboard, countSerialized, countStorageEntries, + createFreeTextEditor, createPromise, createPromiseWithArgs, dragAndDrop, From cef1574c5384c85174dbc6fa372ae6186a0bd6c6 Mon Sep 17 00:00:00 2001 From: LoukasPap Date: Wed, 19 Aug 2026 17:28:43 +0300 Subject: [PATCH 3/5] Replace test pdf --- test/pdfs/.gitignore | 2 +- test/pdfs/link-overlaps-editor-toolbar.pdf | Bin 40294 -> 0 bytes test/pdfs/toolbar-overlap-with-annotations.pdf | Bin 0 -> 18121 bytes test/test_manifest.json | 14 +++++++------- 4 files changed, 8 insertions(+), 8 deletions(-) delete mode 100644 test/pdfs/link-overlaps-editor-toolbar.pdf create mode 100644 test/pdfs/toolbar-overlap-with-annotations.pdf diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index c4d09e9dde859..afc428856435c 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -492,6 +492,7 @@ !issue11473.pdf !bug1001080.pdf !issue15716.pdf +!toolbar-overlap-with-annotations.pdf !bug1671312_reduced.pdf !bug1671312_ArialNarrow.pdf !issue17848.pdf @@ -939,7 +940,6 @@ !checkbox_no_appearance.pdf !opt_demo.pdf !bug1873345.pdf -!link-overlaps-editor-toolbar.pdf !cff_bluescale_small_zones.pdf !multimedia_annotations.pdf !issue17333.pdf diff --git a/test/pdfs/link-overlaps-editor-toolbar.pdf b/test/pdfs/link-overlaps-editor-toolbar.pdf deleted file mode 100644 index 740c36cc734bda940e5ed03fb05ba48035c49e04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40294 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 md@PWV{ z{H5K$Hp?%^$Nvn$EL<-M?OzMQH)+^DhzVWn$|odkj|}R}iH!7Pa9FY!iS;5HfJrI= zKZvk)aCL5k!YWI;0cLWd-NXPbD9i3N#vcA>M|#!DB;c~r9y#YrU76Iu?zpu?Xo1zf z5!w5>ubznTsjlZh^wVLp~LHr3gVQSV||N*oRnLw|TK? zqqtWok#!Dg-WWpR`|^sGqM$!2*$S!7^t1$80|2WXG@F0$!~}UI1joO8Q_Xa$kZA~O zFk~V6I_XrswbPLH z*b|yFN@`M>)u$o(6z|27I< zPKp2dnR2mnas1=UK4t)jg_Zr~6#cJ9eCUIyOE8yl?afjMjShf>TbiFmfaHfk2!e!; zed~;W900k5V1S$m5fHqY0I~5VtM8p`a^1TsZYxZlh@A468t3^HcDYQ-hlZFOw>Y;Z zsZ7%;%B;g#sVVj)xtjV_Zx#$F9;-~hq{qk33*PS>N7pOvok#5nX6WJw6wqt&X1?Vu zr6+!|bgz3_^PB1#?9`UVC=C$bPQM4%U(GKEy0=eWQw!G(eDGai-`qi2O~1epj$$2u zU$wNfvEn0Ai}S%HJ+H0vE8Ap_S=B1S2Jr32{e4%2%Y#BcZsg`9$Fxh~Fmup}(OMJo z;zGOqQ>8^+x>?($&a-_1@?gmk4rh#JFAUsmBb9)Yd)8^ z%M#}6@sDHc0jsZ`GM7J&KAPY9nB#moQ+7^%3XbhN?f7WxYtS)P&?a7DYSh7|$9QQs z{gAfJ;x25SE9H#)W#55}FyUv`q{<0&vg3p%M8B^+w?<*+JbTmC@aL0~fm;ExT$_ZW z_Qda+Xx3(EA7+6fvBPs)`=_oqUwrgB7!3>#L+V7vp4!c>3vfH0CLd&>y_hbg_78V; z^3oX3kiX@RO$}a_aSDh(RqXwJo7%Dh8R31?seX5O?GaIb?A|=o)$s& zoezC5=wTsP@#m!08jPkLr>)0nAO$XlxD`rF;GOg8e@p&M+p&#FNhrSA+Idf%>faYt z!_+T)aB}S2^;7!OAw6LnKVmgfCnk4Xkb^s2P?rD!L!@+S%qK<)raOm&>K4_@s{?|A zyIp!O_y>6IxW{nJ8n}{mm+Tl^V@&i4-9+;Y_;zlDQBQ?LC#2DiKIYNM-6ScC6bag1Fh zLFQbwPHS=5XCqhNA7t(9{ETP{Fq)>tR~5wVhsF`ZItGVKJCqZ9_#AtD8)P#=3Q|k4wRSD6!L)!8af# zO0p3u{!+=OX%VO{+nU>0_Ylz^;PoIgAh8uAXt*g1bSkt@JTOvyJ0oAon(kRD}W z_xx{&Wkj~gH;dfmABrQUnGDddZdA0VVVmsgPOwsKhz^B1>XyFX*St=`{FpbZQrg!n z^T{2~lVA)!g=?T{`_i8@oF^v3skMlRJ~U*+zuR)Ha#rQ%&dzJwLP$&IQtO`ZuN<

sxVo7FhN(0RNh^>%>#Kn&D~FJ5oDiEM26 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 diff --git a/test/pdfs/toolbar-overlap-with-annotations.pdf b/test/pdfs/toolbar-overlap-with-annotations.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4c2f9776a8c9d91d9c0045803322c0a64d9bd60c GIT binary patch literal 18121 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 Date: Wed, 19 Aug 2026 17:29:03 +0300 Subject: [PATCH 4/5] Add 2 tests covering toolbar overlapping with link and text annotations --- test/integration/highlight_editor_spec.mjs | 130 +++++++++++++++++++++ 1 file changed, 130 insertions(+) diff --git a/test/integration/highlight_editor_spec.mjs b/test/integration/highlight_editor_spec.mjs index f13ad2d8ced8e..6332a9a3282b3 100644 --- a/test/integration/highlight_editor_spec.mjs +++ b/test/integration/highlight_editor_spec.mjs @@ -16,6 +16,7 @@ import { awaitPromise, closePages, + createFreeTextEditor, getAnnotationSelector, getEditorSelector, getFirstSerialized, @@ -53,6 +54,8 @@ const selectAll = selectEditors.bind(null, "highlight"); const switchToHighlight = switchToEditor.bind(null, "Highlight"); +const switchToFreeText = switchToEditor.bind(null, "FreeText"); + describe("Highlight Editor", () => { describe("Editor must be removed without exception", () => { let pages; @@ -2931,4 +2934,131 @@ describe("Highlight Editor", () => { }); }); }); + + describe("editToolbar is rendering over annotations", () => { + let pages; + + beforeEach(async () => { + pages = await loadAndWait( + "toolbar-overlap-with-annotations.pdf", + ".annotationEditorLayer", + 120 + ); + }); + + afterEach(async () => { + await closePages(pages); + }); + + it("must check that the edit toolbar is rendered above link annotations", async () => { + await Promise.all( + pages.map(async ([browserName, page]) => { + await page.waitForSelector( + `.page[data-page-number = "1"] .textLayer .endOfContent` + ); + + const linkSelector = `a[href="https://github.com/mozilla/pdf.js"]`; + const linkRect = await getRect(page, linkSelector); + + const topElementId = await page.evaluate( + (px, py) => document.elementFromPoint(px, py)?.id || null, + linkRect.x + linkRect.width / 2, + linkRect.y + linkRect.height / 2 + ); + expect(topElementId) + .withContext(`In ${browserName}`) + .toEqual("pdfjs_internal_id_14R"); + + // Select some text to show the floating toolbar. + const firstRect = await getSpanRectFromText(page, 1, "A:"); + await page.mouse.click(firstRect.x, firstRect.y, { + count: 2, + delay: 100, + }); + + const highlightButtonSelector = `.page[data-page-number = "1"] .editToolbar button.highlightButton`; + await page.waitForSelector(highlightButtonSelector, { + visible: true, + }); + + const topElementClass = await page.evaluate( + (px, py) => document.elementFromPoint(px, py)?.className || null, + linkRect.x, + linkRect.y + ); + expect(topElementClass) + .withContext(`In ${browserName}`) + .toContain("highlightButton"); + }) + ); + }); + + fit("must check that the edit toolbar is rendered above text annotations", async () => { + await Promise.all( + pages.map(async ([browserName, page]) => { + await switchToFreeText(page); + + const myText = await getSpanRectFromText(page, 1, "My text"); + // "CHECK" is roughly 50px wide at the default font size and + // "CHECK" roughly aligned with the end of "Languages". + const editorSelector = await createFreeTextEditor({ + page, + x: myText.x + myText.width / 2, + y: myText.y + myText.height + 20, + data: "CHECK", + }); + + const freeTextRect = await getRect(page, editorSelector); + const freeTextTopElement = await page.evaluate( + (px, py) => + document.elementFromPoint(px, py)?.getAttribute("data-l10n-id") || + null, + freeTextRect.x + freeTextRect.width / 2, + freeTextRect.y + freeTextRect.height / 2 + ); + expect(freeTextTopElement) + .withContext(`In ${browserName}`) + .toEqual("pdfjs-free-text2"); + + // Close the text editor. + await switchToFreeText(page, /* disable */ true); + + // Double click on "myText" to show the floating toolbar. + await page.mouse.click( + myText.x + myText.width / 2, + myText.y + myText.height / 2, + { count: 2, delay: 100 } + ); + + const toolbarSelector = `.page[data-page-number = "1"] .editToolbar:has(button.highlightButton)`; + const highlightButtonSelector = `${toolbarSelector} button.highlightButton`; + await page.waitForSelector(highlightButtonSelector, { + visible: true, + }); + + let topElement = await page.evaluate( + (px, py) => document.elementFromPoint(px, py)?.className || null, + freeTextRect.x + freeTextRect.width / 2, + freeTextRect.y + freeTextRect.height / 2 + ); + expect(topElement) + .withContext(`In ${browserName}`) + .toContain("highlightButton"); + + // Re-open the text editor without dismissing the floating toolbar, + // so both are present on the page at the same time. + await switchToFreeText(page); + + topElement = await page.evaluate( + (px, py) => document.elementFromPoint(px, py)?.className || null, + freeTextRect.x + freeTextRect.width / 2, + freeTextRect.y + freeTextRect.height / 2 + ); + expect(topElement) + .withContext(`In ${browserName}`) + .toContain("highlightButton"); + }) + ); + }); + }); }); From 0126381cfac4dabf9bc2072e9a03bb7b9937fb3a Mon Sep 17 00:00:00 2001 From: LoukasPap Date: Fri, 21 Aug 2026 12:23:31 +0300 Subject: [PATCH 5/5] Replace fit with it in tests --- test/integration/highlight_editor_spec.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/integration/highlight_editor_spec.mjs b/test/integration/highlight_editor_spec.mjs index 6332a9a3282b3..8600b904b1234 100644 --- a/test/integration/highlight_editor_spec.mjs +++ b/test/integration/highlight_editor_spec.mjs @@ -2993,7 +2993,7 @@ describe("Highlight Editor", () => { ); }); - fit("must check that the edit toolbar is rendered above text annotations", async () => { + it("must check that the edit toolbar is rendered above text annotations", async () => { await Promise.all( pages.map(async ([browserName, page]) => { await switchToFreeText(page);