diff options
Diffstat (limited to 'src/dumbymap.mjs')
-rw-r--r-- | src/dumbymap.mjs | 41 |
1 files changed, 31 insertions, 10 deletions
diff --git a/src/dumbymap.mjs b/src/dumbymap.mjs index 8b9a2a6..4d6657f 100644 --- a/src/dumbymap.mjs +++ b/src/dumbymap.mjs | |||
@@ -527,25 +527,46 @@ 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 | const geoLink = e.target.closest('.geolink') |
534 | if (!block && !map && !geoLink) return | ||
533 | e.preventDefault() | 535 | e.preventDefault() |
534 | 536 | ||
535 | /** MENU: Prepare Context Menu */ | 537 | // Add menu element |
536 | const menu = document.createElement('div') | 538 | const menu = document.createElement('div') |
537 | menu.classList.add('menu', 'dumby-menu') | 539 | menu.classList.add('menu', 'dumby-menu') |
538 | menu.onclick = (e) => { | 540 | menu.onclick = (e) => { |
539 | const keepMenu = e.target.closest('.keep-menu') || e.target.classList.contains('.keep-menu') | 541 | if (e.target.closest('.keep-menu')) return |
540 | if (keepMenu) return | ||
541 | |||
542 | menu.remove() | 542 | menu.remove() |
543 | } | 543 | } |
544 | container.body.appendChild(menu) | 544 | container.appendChild(menu) |
545 | 545 | new MutationObserver(() => { | |
546 | menu.replaceChildren() | 546 | menu.style.display = 'block' |
547 | menu.style.display = 'block' | 547 | 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;` | 548 | menu.style.top = (e.clientY - menu.offsetParent.offsetTop + 5) + 'px' |
549 | clearTimeout(menu.timer) | ||
550 | }).observe(menu, { childList: true }) | ||
551 | menu.timer = setTimeout(() => menu.remove(), 100) | ||
552 | |||
553 | // Menu Items for GeoLink | ||
554 | if (geoLink) { | ||
555 | if (geoLink.classList.contains('from-text')) { | ||
556 | menu.appendChild(new menuItem.Item({ | ||
557 | text: 'Delete', | ||
558 | onclick: () => { | ||
559 | utils.getMarkersFromMaps(geoLink) | ||
560 | .forEach(m => m.remove()) | ||
561 | geoLink.replaceWith( | ||
562 | document.createTextNode(geoLink.textContent), | ||
563 | ) | ||
564 | }, | ||
565 | })) | ||
566 | } | ||
567 | menu.appendChild(menuItem.setGeoLinkType(geoLink)) | ||
568 | return | ||
569 | } | ||
549 | 570 | ||
550 | // Menu Items for map | 571 | // Menu Items for map |
551 | if (map?.renderer?.results) { | 572 | if (map?.renderer?.results) { |