diff options
-rw-r--r-- | src/css/dumbymap.css | 2 | ||||
-rw-r--r-- | src/dumbymap.mjs | 20 |
2 files changed, 12 insertions, 10 deletions
diff --git a/src/css/dumbymap.css b/src/css/dumbymap.css index 8dfe90d..8ba0887 100644 --- a/src/css/dumbymap.css +++ b/src/css/dumbymap.css | |||
@@ -171,7 +171,7 @@ pre:has(.mapclay) { | |||
171 | } | 171 | } |
172 | 172 | ||
173 | .menu { | 173 | .menu { |
174 | display: block; | 174 | display: none; |
175 | overflow: visible; | 175 | overflow: visible; |
176 | width: fit-content; | 176 | width: fit-content; |
177 | min-width: 10rem; | 177 | min-width: 10rem; |
diff --git a/src/dumbymap.mjs b/src/dumbymap.mjs index 8b9a2a6..2f2b67f 100644 --- a/src/dumbymap.mjs +++ b/src/dumbymap.mjs | |||
@@ -527,25 +527,27 @@ export const generateMaps = (container, { | |||
527 | 527 | ||
528 | /** MENU: Menu Items for Context Menu */ | 528 | /** MENU: Menu Items for Context Menu */ |
529 | container.oncontextmenu = e => { | 529 | container.oncontextmenu = e => { |
530 | container.querySelectorAll('.dumby-menu').forEach(m => m.remove()) | ||
530 | const map = e.target.closest('.mapclay') | 531 | const map = e.target.closest('.mapclay') |
531 | const block = e.target.closest('.dumby-block') | 532 | const block = e.target.closest('.dumby-block') |
532 | if (!block && !map) return | 533 | if (!block && !map) return |
533 | e.preventDefault() | 534 | e.preventDefault() |
534 | 535 | ||
535 | /** MENU: Prepare Context Menu */ | 536 | // Add menu element |
536 | const menu = document.createElement('div') | 537 | const menu = document.createElement('div') |
537 | menu.classList.add('menu', 'dumby-menu') | 538 | menu.classList.add('menu', 'dumby-menu') |
538 | menu.onclick = (e) => { | 539 | menu.onclick = (e) => { |
539 | const keepMenu = e.target.closest('.keep-menu') || e.target.classList.contains('.keep-menu') | 540 | if (e.target.closest('.keep-menu')) return |
540 | if (keepMenu) return | ||
541 | |||
542 | menu.remove() | 541 | menu.remove() |
543 | } | 542 | } |
544 | container.body.appendChild(menu) | 543 | container.appendChild(menu) |
545 | 544 | new MutationObserver(() => { | |
546 | menu.replaceChildren() | 545 | menu.style.display = 'block' |
547 | menu.style.display = 'block' | 546 | menu.style.left = (e.clientX - menu.offsetParent.offsetLeft + 10) + 'px' |
548 | menu.style.cssText = `left: ${e.clientX - menu.offsetParent.offsetLeft + 10}px; top: ${e.clientY - menu.offsetParent.offsetTop + 5}px;` | 547 | menu.style.top = (e.clientY - menu.offsetParent.offsetTop + 5) + 'px' |
548 | clearTimeout(menu.timer) | ||
549 | }).observe(menu, { childList: true }) | ||
550 | menu.timer = setTimeout(() => menu.remove(), 100) | ||
549 | 551 | ||
550 | // Menu Items for map | 552 | // Menu Items for map |
551 | if (map?.renderer?.results) { | 553 | if (map?.renderer?.results) { |