Slight refactor and fixes to mouseActions

This commit is contained in:
brahim 2024-09-21 19:31:09 +02:00
parent b2361ea3cc
commit 5a9d14b2c2

View file

@ -78,11 +78,11 @@ var gZenCompactModeManager = {
return [ return [
{ {
element: this.sidebar, element: this.sidebar,
getScreenEdge: () => this.sidebarIsOnRight ? "right" : "left", screenEdge: this.sidebarIsOnRight ? "right" : "left",
}, },
{ {
element: document.getElementById('zen-appcontent-navbar-container'), element: document.getElementById('zen-appcontent-navbar-container'),
getScreenEdge: () => "top", screenEdge:"top",
} }
]; ];
}, },
@ -125,28 +125,25 @@ var gZenCompactModeManager = {
if (this.hoverableElements[i].keepHoverDuration) { if (this.hoverableElements[i].keepHoverDuration) {
target.addEventListener('mouseleave', (event) => { target.addEventListener('mouseleave', (event) => {
this.flashSidebar(target, keepHoverDuration, target.id, 'hover-timeout'); this.flashElement(target, keepHoverDuration, target.id, 'hover-timeout');
}); });
} }
} }
document.body.addEventListener('mouseleave', (event) => { document.body.addEventListener('mouseleave', (event) => {
for (let i = 0; i < this.hoverableElements.length; i++) { for (let entry of this.hoverableElements) {
const target = this.hoverableElements[i].element; if (!entry.screenEdge) return;
const edge = this.hoverableElements[i].getScreenEdge(); const target = entry.element;
if (!edge) return; const notAxis = (edge === "left" || edge === "right" ? "y" : "x");
const orient = (edge === "left" || edge === "right" ? "vertical" : "horizontal"); if (this._getNearestEdge(document.body, event.pageX, event.pageY) !== entry.screenEdge
if ( || this._positionInBounds(notAxis, target, event.pageX, event.pageY, 7)) {
this._getNearestEdge(document.body, event.pageX, event.pageY) === edge return;
&& this._positionIsAligned(orient, target, event.pageX, event.pageY, 7)
) {
this.flashElement(target, this.hideAfterHoverDuration, target.id);
document.addEventListener('mousemove', () => {
target.removeAttribute('flash-popup');
this.clearFlashTimeout(target.id);
}, {once: true});
} }
this.flashElement(target, this.hideAfterHoverDuration, target.id);
document.addEventListener('mousemove', () => {
target.removeAttribute('flash-popup');
this.clearFlashTimeout(target.id);
}, {once: true});
} }
}); });
}, },
@ -155,20 +152,20 @@ var gZenCompactModeManager = {
const targetBox = element.getBoundingClientRect(); const targetBox = element.getBoundingClientRect();
let smallestDistance = Infinity; let smallestDistance = Infinity;
let closestEdge = ""; let closestEdge = "";
for (let edge of ["top", "bottom", "left", "right"]) { const edges = ["top", "bottom", "left", "right"];
const onXAxis = edge === "left" || edge === "right"; for (let i = 0; i < edges.length; i++) {
const distance = Math.abs( (onXAxis ? posX : posY) - targetBox[edge]); const distance = Math.abs( (i < 2 ? posY : posX) - targetBox[edges[i]]);
if (smallestDistance > distance) { if (smallestDistance > distance) {
smallestDistance = distance; smallestDistance = distance;
closestEdge = edge; closestEdge = edges[i];
} }
} }
return closestEdge; return closestEdge;
}, },
_positionIsAligned(axis = "x", element, x, y, error = 0) { _positionInBounds(axis = "x", element, x, y, error = 0) {
const bBox = element.getBoundingClientRect(); const bBox = element.getBoundingClientRect();
if (axis === "x") return bBox.top - error < y && y < bBox.bottom + error; if (axis === "y") return bBox.top - error < y && y < bBox.bottom + error;
else return bBox.left - error < x && x < bBox.right + error; else return bBox.left - error < x && x < bBox.right + error;
}, },