Fix popup for highlights without popup (follow-up of #12505)
* remove 1st param of _createPopup (almost useless for a method) * prepend popup div to avoid to have them on top of some highlights (and so "disable" partially mouse events) * add a ref test for issue #12504
This commit is contained in:
parent
83658c974d
commit
611207d2c9
@ -266,7 +266,9 @@ class AnnotationElement {
|
|||||||
quadPoint[1].y,
|
quadPoint[1].y,
|
||||||
];
|
];
|
||||||
this.data.rect = rect;
|
this.data.rect = rect;
|
||||||
quadrilaterals.push(this._createContainer(ignoreBorder));
|
const quad = this._createContainer(ignoreBorder);
|
||||||
|
quad.className = "highlightAnnotation";
|
||||||
|
quadrilaterals.push(quad);
|
||||||
}
|
}
|
||||||
this.data.rect = savedRect;
|
this.data.rect = savedRect;
|
||||||
return quadrilaterals;
|
return quadrilaterals;
|
||||||
@ -278,12 +280,17 @@ class AnnotationElement {
|
|||||||
* are of a type that works with popups (such as Highlight annotations).
|
* are of a type that works with popups (such as Highlight annotations).
|
||||||
*
|
*
|
||||||
* @private
|
* @private
|
||||||
* @param {HTMLSectionElement} container
|
|
||||||
* @param {HTMLDivElement|HTMLImageElement|null} trigger
|
* @param {HTMLDivElement|HTMLImageElement|null} trigger
|
||||||
* @param {Object} data
|
* @param {Object} data
|
||||||
* @memberof AnnotationElement
|
* @memberof AnnotationElement
|
||||||
*/
|
*/
|
||||||
_createPopup(container, trigger, data) {
|
_createPopup(trigger, data) {
|
||||||
|
let container = this.container;
|
||||||
|
if (this.quadrilaterals) {
|
||||||
|
trigger = trigger || this.quadrilaterals;
|
||||||
|
container = this.quadrilaterals[0];
|
||||||
|
}
|
||||||
|
|
||||||
// If no trigger element is specified, create it.
|
// If no trigger element is specified, create it.
|
||||||
if (!trigger) {
|
if (!trigger) {
|
||||||
trigger = document.createElement("div");
|
trigger = document.createElement("div");
|
||||||
@ -437,7 +444,7 @@ class TextAnnotationElement extends AnnotationElement {
|
|||||||
image.dataset.l10nArgs = JSON.stringify({ type: this.data.name });
|
image.dataset.l10nArgs = JSON.stringify({ type: this.data.name });
|
||||||
|
|
||||||
if (!this.data.hasPopup) {
|
if (!this.data.hasPopup) {
|
||||||
this._createPopup(this.container, image, this.data);
|
this._createPopup(image, this.data);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.container.appendChild(image);
|
this.container.appendChild(image);
|
||||||
@ -1034,7 +1041,7 @@ class FreeTextAnnotationElement extends AnnotationElement {
|
|||||||
this.container.className = "freeTextAnnotation";
|
this.container.className = "freeTextAnnotation";
|
||||||
|
|
||||||
if (!this.data.hasPopup) {
|
if (!this.data.hasPopup) {
|
||||||
this._createPopup(this.container, null, this.data);
|
this._createPopup(null, this.data);
|
||||||
}
|
}
|
||||||
return this.container;
|
return this.container;
|
||||||
}
|
}
|
||||||
@ -1085,7 +1092,7 @@ class LineAnnotationElement extends AnnotationElement {
|
|||||||
|
|
||||||
// Create the popup ourselves so that we can bind it to the line instead
|
// Create the popup ourselves so that we can bind it to the line instead
|
||||||
// of to the entire container (which is the default).
|
// of to the entire container (which is the default).
|
||||||
this._createPopup(this.container, line, data);
|
this._createPopup(line, data);
|
||||||
|
|
||||||
return this.container;
|
return this.container;
|
||||||
}
|
}
|
||||||
@ -1139,7 +1146,7 @@ class SquareAnnotationElement extends AnnotationElement {
|
|||||||
|
|
||||||
// Create the popup ourselves so that we can bind it to the square instead
|
// Create the popup ourselves so that we can bind it to the square instead
|
||||||
// of to the entire container (which is the default).
|
// of to the entire container (which is the default).
|
||||||
this._createPopup(this.container, square, data);
|
this._createPopup(square, data);
|
||||||
|
|
||||||
return this.container;
|
return this.container;
|
||||||
}
|
}
|
||||||
@ -1193,7 +1200,7 @@ class CircleAnnotationElement extends AnnotationElement {
|
|||||||
|
|
||||||
// Create the popup ourselves so that we can bind it to the circle instead
|
// Create the popup ourselves so that we can bind it to the circle instead
|
||||||
// of to the entire container (which is the default).
|
// of to the entire container (which is the default).
|
||||||
this._createPopup(this.container, circle, data);
|
this._createPopup(circle, data);
|
||||||
|
|
||||||
return this.container;
|
return this.container;
|
||||||
}
|
}
|
||||||
@ -1255,7 +1262,7 @@ class PolylineAnnotationElement extends AnnotationElement {
|
|||||||
|
|
||||||
// Create the popup ourselves so that we can bind it to the polyline
|
// Create the popup ourselves so that we can bind it to the polyline
|
||||||
// instead of to the entire container (which is the default).
|
// instead of to the entire container (which is the default).
|
||||||
this._createPopup(this.container, polyline, data);
|
this._createPopup(polyline, data);
|
||||||
|
|
||||||
return this.container;
|
return this.container;
|
||||||
}
|
}
|
||||||
@ -1292,7 +1299,7 @@ class CaretAnnotationElement extends AnnotationElement {
|
|||||||
this.container.className = "caretAnnotation";
|
this.container.className = "caretAnnotation";
|
||||||
|
|
||||||
if (!this.data.hasPopup) {
|
if (!this.data.hasPopup) {
|
||||||
this._createPopup(this.container, null, this.data);
|
this._createPopup(null, this.data);
|
||||||
}
|
}
|
||||||
return this.container;
|
return this.container;
|
||||||
}
|
}
|
||||||
@ -1354,7 +1361,7 @@ class InkAnnotationElement extends AnnotationElement {
|
|||||||
|
|
||||||
// Create the popup ourselves so that we can bind it to the polyline
|
// Create the popup ourselves so that we can bind it to the polyline
|
||||||
// instead of to the entire container (which is the default).
|
// instead of to the entire container (which is the default).
|
||||||
this._createPopup(this.container, polyline, data);
|
this._createPopup(polyline, data);
|
||||||
|
|
||||||
svg.appendChild(polyline);
|
svg.appendChild(polyline);
|
||||||
}
|
}
|
||||||
@ -1386,7 +1393,7 @@ class HighlightAnnotationElement extends AnnotationElement {
|
|||||||
this.container.className = "highlightAnnotation";
|
this.container.className = "highlightAnnotation";
|
||||||
|
|
||||||
if (!this.data.hasPopup) {
|
if (!this.data.hasPopup) {
|
||||||
this._createPopup(this.container, null, this.data);
|
this._createPopup(null, this.data);
|
||||||
}
|
}
|
||||||
return this.quadrilaterals || this.container;
|
return this.quadrilaterals || this.container;
|
||||||
}
|
}
|
||||||
@ -1413,7 +1420,7 @@ class UnderlineAnnotationElement extends AnnotationElement {
|
|||||||
this.container.className = "underlineAnnotation";
|
this.container.className = "underlineAnnotation";
|
||||||
|
|
||||||
if (!this.data.hasPopup) {
|
if (!this.data.hasPopup) {
|
||||||
this._createPopup(this.container, null, this.data);
|
this._createPopup(null, this.data);
|
||||||
}
|
}
|
||||||
return this.container;
|
return this.container;
|
||||||
}
|
}
|
||||||
@ -1440,7 +1447,7 @@ class SquigglyAnnotationElement extends AnnotationElement {
|
|||||||
this.container.className = "squigglyAnnotation";
|
this.container.className = "squigglyAnnotation";
|
||||||
|
|
||||||
if (!this.data.hasPopup) {
|
if (!this.data.hasPopup) {
|
||||||
this._createPopup(this.container, null, this.data);
|
this._createPopup(null, this.data);
|
||||||
}
|
}
|
||||||
return this.container;
|
return this.container;
|
||||||
}
|
}
|
||||||
@ -1467,7 +1474,7 @@ class StrikeOutAnnotationElement extends AnnotationElement {
|
|||||||
this.container.className = "strikeoutAnnotation";
|
this.container.className = "strikeoutAnnotation";
|
||||||
|
|
||||||
if (!this.data.hasPopup) {
|
if (!this.data.hasPopup) {
|
||||||
this._createPopup(this.container, null, this.data);
|
this._createPopup(null, this.data);
|
||||||
}
|
}
|
||||||
return this.container;
|
return this.container;
|
||||||
}
|
}
|
||||||
@ -1494,7 +1501,7 @@ class StampAnnotationElement extends AnnotationElement {
|
|||||||
this.container.className = "stampAnnotation";
|
this.container.className = "stampAnnotation";
|
||||||
|
|
||||||
if (!this.data.hasPopup) {
|
if (!this.data.hasPopup) {
|
||||||
this._createPopup(this.container, null, this.data);
|
this._createPopup(null, this.data);
|
||||||
}
|
}
|
||||||
return this.container;
|
return this.container;
|
||||||
}
|
}
|
||||||
@ -1535,7 +1542,7 @@ class FileAttachmentAnnotationElement extends AnnotationElement {
|
|||||||
trigger.addEventListener("dblclick", this._download.bind(this));
|
trigger.addEventListener("dblclick", this._download.bind(this));
|
||||||
|
|
||||||
if (!this.data.hasPopup && (this.data.title || this.data.contents)) {
|
if (!this.data.hasPopup && (this.data.title || this.data.contents)) {
|
||||||
this._createPopup(this.container, trigger, this.data);
|
this._createPopup(trigger, this.data);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.container.appendChild(trigger);
|
this.container.appendChild(trigger);
|
||||||
@ -1627,7 +1634,13 @@ class AnnotationLayer {
|
|||||||
parameters.div.appendChild(renderedElement);
|
parameters.div.appendChild(renderedElement);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
parameters.div.appendChild(rendered);
|
if (element instanceof PopupAnnotationElement) {
|
||||||
|
// Popup annotation elements should not be on top of other
|
||||||
|
// annotation elements to prevent interfering with mouse events.
|
||||||
|
parameters.div.prepend(rendered);
|
||||||
|
} else {
|
||||||
|
parameters.div.appendChild(rendered);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
1
test/pdfs/.gitignore
vendored
1
test/pdfs/.gitignore
vendored
@ -290,6 +290,7 @@
|
|||||||
!noembed-identity.pdf
|
!noembed-identity.pdf
|
||||||
!noembed-identity-2.pdf
|
!noembed-identity-2.pdf
|
||||||
!noembed-jis7.pdf
|
!noembed-jis7.pdf
|
||||||
|
!issue12504.pdf
|
||||||
!noembed-eucjp.pdf
|
!noembed-eucjp.pdf
|
||||||
!noembed-sjis.pdf
|
!noembed-sjis.pdf
|
||||||
!vertical.pdf
|
!vertical.pdf
|
||||||
|
BIN
test/pdfs/issue12504.pdf
Normal file
BIN
test/pdfs/issue12504.pdf
Normal file
Binary file not shown.
@ -1427,6 +1427,13 @@
|
|||||||
"type": "eq",
|
"type": "eq",
|
||||||
"about": "Type3 fonts with image resources; both pages need to be tested, otherwise the bug won't manifest."
|
"about": "Type3 fonts with image resources; both pages need to be tested, otherwise the bug won't manifest."
|
||||||
},
|
},
|
||||||
|
{ "id": "issue12504",
|
||||||
|
"file": "pdfs/issue12504.pdf",
|
||||||
|
"md5": "04fcc87f3e7e9e925e3ef83cf0bf49f4",
|
||||||
|
"rounds": 1,
|
||||||
|
"type": "eq",
|
||||||
|
"annotations": true
|
||||||
|
},
|
||||||
{ "id": "close-path-bug",
|
{ "id": "close-path-bug",
|
||||||
"file": "pdfs/close-path-bug.pdf",
|
"file": "pdfs/close-path-bug.pdf",
|
||||||
"md5": "48dd17ef58393857d2d038d33699cac5",
|
"md5": "48dd17ef58393857d2d038d33699cac5",
|
||||||
|
Loading…
Reference in New Issue
Block a user