aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/dumbymap.mjs
diff options
context:
space:
mode:
authorHsieh Chin Fan <pham@topo.tw>2024-10-24 17:41:30 +0800
committerHsieh Chin Fan <pham@topo.tw>2024-10-24 17:41:30 +0800
commitc4bd8786595ba97771a9b7a39b28f103984764d4 (patch)
tree262da8196ebd9f6f7d2a724ea9b306ee226fe770 /src/dumbymap.mjs
parent12c749d246c1f5759ec2e462e09d022cb1233efd (diff)
parent14f13987693ff3733bf6167fbfc3c70f1b6864bf (diff)
Merge branch 'menu'
Diffstat (limited to 'src/dumbymap.mjs')
-rw-r--r--src/dumbymap.mjs41
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) {