Skip to content

Commit d90f566

Browse files
committed
Don't set multiple event listeners
Refs #469
1 parent b737c51 commit d90f566

File tree

1 file changed

+12
-5
lines changed

1 file changed

+12
-5
lines changed

src/linkpreviews.js

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,11 @@ function setupTooltip(el, doctoolname, doctoolversion, selector) {
2929
const anchorElement = el;
3030
let relatedTooltip;
3131

32-
el.addEventListener("mouseenter", delayShowTooltip);
33-
el.addEventListener("mouseleave", delayHideTooltip);
32+
if (!el.hasEventListener) {
33+
el.addEventListener("mouseenter", delayShowTooltip);
34+
el.addEventListener("mouseleave", delayHideTooltip);
35+
el.hasEventListener = true;
36+
}
3437

3538
let showTooltipTimeoutId = null;
3639
let hideTooltipTimeoutId = null;
@@ -153,7 +156,8 @@ function setupTooltip(el, doctoolname, doctoolversion, selector) {
153156
return relatedTooltip;
154157
}
155158

156-
const existingTooltip = anchorElement.parentElement.querySelector(
159+
// Check if there is already a tooltip for this url
160+
const existingTooltip = document.querySelector(
157161
`div[${TOOLTIP_DATA_HREF}="${anchorElement.href}"]`,
158162
);
159163
if (existingTooltip) {
@@ -171,8 +175,11 @@ function setupTooltip(el, doctoolname, doctoolversion, selector) {
171175
anchorElement.insertAdjacentElement("afterend", newTooltip);
172176
// Let's add event listeners on the tooltip as well, to prevent hiding, when
173177
// mouse moves away from the anchor element
174-
newTooltip.addEventListener("mouseenter", cancelHideDelay);
175-
newTooltip.addEventListener("mouseleave", delayHideTooltip);
178+
if (!newTooltip.hasEventListener) {
179+
newTooltip.addEventListener("mouseenter", cancelHideDelay);
180+
newTooltip.addEventListener("mouseleave", delayHideTooltip);
181+
newTooltip.hasEventListener = true;
182+
}
176183
relatedTooltip = newTooltip;
177184
return newTooltip;
178185
}

0 commit comments

Comments
 (0)