1
0
Fork 0
mirror of https://github.com/mozilla/pdf.js.git synced 2025-04-22 16:18:08 +02:00

Merge pull request #18481 from nicolo-ribaudo/fix-selection-with-links

Disable link annotations during text selection
This commit is contained in:
Tim van der Meij 2024-07-28 12:08:38 +02:00 committed by GitHub
commit 6f9fc70926
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 289 additions and 101 deletions

View file

@ -126,6 +126,10 @@
}
}
.textLayer.selecting ~ & section {
pointer-events: none;
}
:is(.linkAnnotation, .buttonWidgetAnnotation.pushButton) > a {
position: absolute;
font-size: 1em;

View file

@ -118,9 +118,9 @@
z-index: 0;
cursor: default;
user-select: none;
}
&.active {
top: 0;
}
&.selecting .endOfContent {
top: 0;
}
}

View file

@ -150,8 +150,8 @@ class TextLayerBuilder {
#bindMouse(end) {
const { div } = this;
div.addEventListener("mousedown", evt => {
end.classList.add("active");
div.addEventListener("mousedown", () => {
div.classList.add("selecting");
});
div.addEventListener("copy", event => {
@ -193,16 +193,42 @@ class TextLayerBuilder {
end.style.width = "";
end.style.height = "";
}
end.classList.remove("active");
textLayer.classList.remove("selecting");
};
let isPointerDown = false;
document.addEventListener(
"pointerdown",
() => {
isPointerDown = true;
},
{ signal }
);
document.addEventListener(
"pointerup",
() => {
isPointerDown = false;
this.#textLayers.forEach(reset);
},
{ signal }
);
window.addEventListener(
"blur",
() => {
isPointerDown = false;
this.#textLayers.forEach(reset);
},
{ signal }
);
document.addEventListener(
"keyup",
() => {
if (!isPointerDown) {
this.#textLayers.forEach(reset);
}
},
{ signal }
);
if (typeof PDFJSDev === "undefined" || !PDFJSDev.test("MOZCENTRAL")) {
// eslint-disable-next-line no-var
@ -237,7 +263,7 @@ class TextLayerBuilder {
for (const [textLayerDiv, endDiv] of this.#textLayers) {
if (activeTextLayers.has(textLayerDiv)) {
endDiv.classList.add("active");
textLayerDiv.classList.add("selecting");
} else {
reset(endDiv, textLayerDiv);
}