From cba0af96f63a2ac63b1a708679f747514b2a39d1 Mon Sep 17 00:00:00 2001 From: Yohan Boniface Date: Sat, 5 Oct 2024 08:55:56 +0200 Subject: [PATCH] fix: fix contextmenu positionning when map is not full screen --- umap/static/umap/js/modules/ui/base.js | 10 ++++++---- umap/static/umap/js/modules/ui/contextmenu.js | 5 +++-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/umap/static/umap/js/modules/ui/base.js b/umap/static/umap/js/modules/ui/base.js index 725e3c9b..7fa21748 100644 --- a/umap/static/umap/js/modules/ui/base.js +++ b/umap/static/umap/js/modules/ui/base.js @@ -63,16 +63,18 @@ export class Positioned { else this.container.style.bottom = 'initial' } - computePosition([x, y]) { + computePosition([x, y], parent) { let left let top - if (x < window.innerWidth / 2) { + x = x - parent.getBoundingClientRect().left + y = y - parent.getBoundingClientRect().top + if (x < parent.offsetWidth / 2) { left = x } else { left = x - this.container.offsetWidth } - if (y < window.innerHeight / 2) { - top = Math.min(y, window.innerHeight - this.container.offsetHeight) + if (y < parent.offsetHeight / 2) { + top = Math.min(y, parent.offsetHeight - this.container.offsetHeight) } else { top = Math.max(0, y - this.container.offsetHeight) } diff --git a/umap/static/umap/js/modules/ui/contextmenu.js b/umap/static/umap/js/modules/ui/contextmenu.js index fd61c84a..305daea1 100644 --- a/umap/static/umap/js/modules/ui/contextmenu.js +++ b/umap/static/umap/js/modules/ui/contextmenu.js @@ -36,11 +36,12 @@ export default class ContextMenu extends Positioned { this.container.appendChild(li) } } - document.body.appendChild(this.container) + const parent = document.elementFromPoint(left, top).closest('.leaflet-container') + parent.appendChild(this.container) if (this.options.fixed) { this.setPosition({ left, top }) } else { - this.computePosition([left, top]) + this.computePosition([left, top], parent) } this.container.querySelector('li > *').focus() this.container.addEventListener(