Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix popup for highlights without popup (follow-up of #12505) #12585

Merged
merged 1 commit into from
Nov 10, 2020
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
49 changes: 31 additions & 18 deletions src/display/annotation_layer.js
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,9 @@ class AnnotationElement {
quadPoint[1].y,
];
this.data.rect = rect;
quadrilaterals.push(this._createContainer(ignoreBorder));
const quad = this._createContainer(ignoreBorder);
quad.className = "highlightAnnotation";
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The _createQuadrilaterals method is generic since multiple annotation types can use quadrilaterals, so this class name should not be set here. Fortunately, it can simply be fixed locally in the HighlightAnnotationElement class below.

Hence I'd suggest to revert all changes in this method and instead simply change the render method in the HighlightAnntationElement class to the following (untested):

  render() {
    if (!this.data.hasPopup) {
      this._createPopup(null, this.data);
    }

    if (this.quadrilaterals) {
      this.quadrilaterals.forEach(quadrilateral => {
        quadrilateral.className = "highlightAnnotation";
      });
      return this.quadrilaterals;
    }

    this.container.className = "highlightAnnotation";
    return this.container;
  }

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@calixteman Hm, it looks like this comment was forgotten to be addressed. Would you mind following this up in a new PR to move this specific class name setting out of the generic function?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry misread the comment, thought it had been addressed. Filed #12585

quadrilaterals.push(quad);
}
this.data.rect = savedRect;
return quadrilaterals;
Expand All @@ -278,12 +280,17 @@ class AnnotationElement {
* are of a type that works with popups (such as Highlight annotations).
*
* @private
* @param {HTMLSectionElement} container
* @param {HTMLDivElement|HTMLImageElement|null} trigger
* @param {Object} data
* @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 (!trigger) {
trigger = document.createElement("div");
Expand Down Expand Up @@ -437,7 +444,7 @@ class TextAnnotationElement extends AnnotationElement {
image.dataset.l10nArgs = JSON.stringify({ type: this.data.name });

if (!this.data.hasPopup) {
this._createPopup(this.container, image, this.data);
this._createPopup(image, this.data);
}

this.container.appendChild(image);
Expand Down Expand Up @@ -1034,7 +1041,7 @@ class FreeTextAnnotationElement extends AnnotationElement {
this.container.className = "freeTextAnnotation";

if (!this.data.hasPopup) {
this._createPopup(this.container, null, this.data);
this._createPopup(null, this.data);
}
return this.container;
}
Expand Down Expand Up @@ -1085,7 +1092,7 @@ class LineAnnotationElement extends AnnotationElement {

// Create the popup ourselves so that we can bind it to the line instead
// of to the entire container (which is the default).
this._createPopup(this.container, line, data);
this._createPopup(line, data);

return this.container;
}
Expand Down Expand Up @@ -1139,7 +1146,7 @@ class SquareAnnotationElement extends AnnotationElement {

// Create the popup ourselves so that we can bind it to the square instead
// of to the entire container (which is the default).
this._createPopup(this.container, square, data);
this._createPopup(square, data);

return this.container;
}
Expand Down Expand Up @@ -1193,7 +1200,7 @@ class CircleAnnotationElement extends AnnotationElement {

// Create the popup ourselves so that we can bind it to the circle instead
// of to the entire container (which is the default).
this._createPopup(this.container, circle, data);
this._createPopup(circle, data);

return this.container;
}
Expand Down Expand Up @@ -1255,7 +1262,7 @@ class PolylineAnnotationElement extends AnnotationElement {

// Create the popup ourselves so that we can bind it to the polyline
// instead of to the entire container (which is the default).
this._createPopup(this.container, polyline, data);
this._createPopup(polyline, data);

return this.container;
}
Expand Down Expand Up @@ -1292,7 +1299,7 @@ class CaretAnnotationElement extends AnnotationElement {
this.container.className = "caretAnnotation";

if (!this.data.hasPopup) {
this._createPopup(this.container, null, this.data);
this._createPopup(null, this.data);
}
return this.container;
}
Expand Down Expand Up @@ -1354,7 +1361,7 @@ class InkAnnotationElement extends AnnotationElement {

// Create the popup ourselves so that we can bind it to the polyline
// instead of to the entire container (which is the default).
this._createPopup(this.container, polyline, data);
this._createPopup(polyline, data);

svg.appendChild(polyline);
}
Expand Down Expand Up @@ -1386,7 +1393,7 @@ class HighlightAnnotationElement extends AnnotationElement {
this.container.className = "highlightAnnotation";

if (!this.data.hasPopup) {
this._createPopup(this.container, null, this.data);
this._createPopup(null, this.data);
}
return this.quadrilaterals || this.container;
}
Expand All @@ -1413,7 +1420,7 @@ class UnderlineAnnotationElement extends AnnotationElement {
this.container.className = "underlineAnnotation";

if (!this.data.hasPopup) {
this._createPopup(this.container, null, this.data);
this._createPopup(null, this.data);
}
return this.container;
}
Expand All @@ -1440,7 +1447,7 @@ class SquigglyAnnotationElement extends AnnotationElement {
this.container.className = "squigglyAnnotation";

if (!this.data.hasPopup) {
this._createPopup(this.container, null, this.data);
this._createPopup(null, this.data);
}
return this.container;
}
Expand All @@ -1467,7 +1474,7 @@ class StrikeOutAnnotationElement extends AnnotationElement {
this.container.className = "strikeoutAnnotation";

if (!this.data.hasPopup) {
this._createPopup(this.container, null, this.data);
this._createPopup(null, this.data);
}
return this.container;
}
Expand All @@ -1494,7 +1501,7 @@ class StampAnnotationElement extends AnnotationElement {
this.container.className = "stampAnnotation";

if (!this.data.hasPopup) {
this._createPopup(this.container, null, this.data);
this._createPopup(null, this.data);
}
return this.container;
}
Expand Down Expand Up @@ -1535,7 +1542,7 @@ class FileAttachmentAnnotationElement extends AnnotationElement {
trigger.addEventListener("dblclick", this._download.bind(this));

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);
Expand Down Expand Up @@ -1627,7 +1634,13 @@ class AnnotationLayer {
parameters.div.appendChild(renderedElement);
}
} 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);
}
}
}
}
Expand Down
1 change: 1 addition & 0 deletions test/pdfs/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,7 @@
!noembed-identity.pdf
!noembed-identity-2.pdf
!noembed-jis7.pdf
!issue12504.pdf
!noembed-eucjp.pdf
!noembed-sjis.pdf
!vertical.pdf
Expand Down
Binary file added test/pdfs/issue12504.pdf
Binary file not shown.
7 changes: 7 additions & 0 deletions test/test_manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -1427,6 +1427,13 @@
"type": "eq",
"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",
"file": "pdfs/close-path-bug.pdf",
"md5": "48dd17ef58393857d2d038d33699cac5",
Expand Down