Files
swingmusic-extended/src/composables/normalizeContextMenu.ts
T
2022-06-16 15:24:56 +03:00

45 lines
1.3 KiB
TypeScript

import { getElem } from "./perks";
export default (mouseX: number, mouseY: number) => {
const scope = getElem("app", "id");
const contextMenu = getElem("context-menu", "class");
// ? compute what is the mouse position relative to the container element
// (scope)
let { left: scopeOffsetX, top: scopeOffsetY } = scope.getBoundingClientRect();
scopeOffsetX = scopeOffsetX < 0 ? 0 : scopeOffsetX;
scopeOffsetY = scopeOffsetY < 0 ? 0 : scopeOffsetY;
const scopeX = mouseX - scopeOffsetX;
const scopeY = mouseY - scopeOffsetY;
// ? check if the element will go out of bounds
const outOfBoundsOnX = scopeX + contextMenu.clientWidth > scope.clientWidth;
const outOfBoundsOnY = scopeY + contextMenu.clientHeight > scope.clientHeight;
let normalX = mouseX;
let normalY = mouseY;
let normalizedX = false;
let normalizedY = false;
if (window.innerWidth - normalX < 375) {
normalizedX = true;
}
// ? normalize on X
if (outOfBoundsOnX) {
normalX = scopeOffsetX + scope.clientWidth - contextMenu.clientWidth;
normalX -= 10;
}
// ? normalize on Y
if (outOfBoundsOnY) {
normalY = scopeOffsetY + scope.clientHeight - contextMenu.clientHeight;
normalY -= 10;
normalizedY = true;
}
return { normalX, normalY, normalizedX, normalizedY };
};