Skip to content

Commit c6475c0

Browse files
authored
fix: prevent browser scroll while scrolling over the tooltip (#5414)
* fix: prevent browser scroll while scrolling over the tooltip * fix: lint * fix page scroll if tooltip scroll reaches to end * move logic to preventParentScroll util function
1 parent aac600d commit c6475c0

File tree

4 files changed

+15
-3
lines changed

4 files changed

+15
-3
lines changed

src/autocomplete.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ var dom = require("./lib/dom");
1414
var snippetManager = require("./snippets").snippetManager;
1515
var config = require("./config");
1616
var event = require("./lib/event");
17+
var preventParentScroll = require("./lib/scroll").preventParentScroll;
1718

1819
/**
1920
* @typedef BaseCompletion
@@ -622,13 +623,14 @@ class Autocomplete {
622623
this.tooltipNode = dom.createElement("div");
623624
this.tooltipNode.style.margin = "0";
624625
this.tooltipNode.style.pointerEvents = "auto";
626+
this.tooltipNode.style.overscrollBehavior = "contain";
625627
this.tooltipNode.tabIndex = -1;
626628
this.tooltipNode.onblur = this.blurListener.bind(this);
627629
this.tooltipNode.onclick = this.onTooltipClick.bind(this);
628630
this.tooltipNode.id = "doc-tooltip";
629631
this.tooltipNode.setAttribute("role", "tooltip");
630632
// prevent editor scroll if tooltip is inside an editor
631-
this.tooltipNode.addEventListener("wheel", event.stopPropagation);
633+
this.tooltipNode.addEventListener("wheel", preventParentScroll);
632634
}
633635
var theme = this.editor.renderer.theme;
634636
this.tooltipNode.className = "ace_tooltip ace_doc-tooltip " +

src/css/editor-css.js

+1
Original file line numberDiff line numberDiff line change
@@ -457,6 +457,7 @@ module.exports = `
457457
pointer-events: none;
458458
overflow: auto;
459459
max-width: min(60em, 66vw);
460+
overscroll-behavior: contain;
460461
}
461462
.ace_tooltip pre {
462463
white-space: pre-wrap;

src/lib/scroll.js

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
exports.preventParentScroll = function preventParentScroll(event) {
2+
event.stopPropagation();
3+
var target = event.currentTarget;
4+
var contentOverflows = target.scrollHeight > target.clientHeight;
5+
if (!contentOverflows) {
6+
event.preventDefault();
7+
}
8+
};

src/tooltip.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
var dom = require("./lib/dom");
99
var event = require("./lib/event");
1010
var Range = require("./range").Range;
11+
var preventParentScroll = require("./lib/scroll").preventParentScroll;
1112

1213
var CLASSNAME = "ace_tooltip";
1314

@@ -211,8 +212,8 @@ class HoverTooltip extends Tooltip {
211212
el.addEventListener("blur", function() {
212213
if (!el.contains(document.activeElement)) this.hide();
213214
}.bind(this));
214-
215-
el.addEventListener("wheel", event.stopPropagation);
215+
216+
el.addEventListener("wheel", preventParentScroll);
216217
}
217218

218219
/**

0 commit comments

Comments
 (0)