aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/css/dumbymap.css2
-rw-r--r--src/dumbymap.mjs20
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) {