From 7ee1ad61627f9a2af04f080cfa95a30f3c8e4525 Mon Sep 17 00:00:00 2001 From: Hsieh Chin Fan Date: Thu, 31 Oct 2024 11:27:20 +0800 Subject: feat: add menu-item for Geocoding * Use nominatim for API calls * Create multiple GeoLinks for each results in response * Also add menu-item DELETE to remove duplicated GeoLinks from one Geocoding --- src/dumbymap.mjs | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) (limited to 'src/dumbymap.mjs') diff --git a/src/dumbymap.mjs b/src/dumbymap.mjs index 4562612..9bc1da7 100644 --- a/src/dumbymap.mjs +++ b/src/dumbymap.mjs @@ -540,7 +540,8 @@ export const generateMaps = (container, { const map = e.target.closest('.mapclay') const block = e.target.closest('.dumby-block') const linkWithLine = e.target.closest('.with-leader-line') - if (!block && !map && !linkWithLine) return + const rangeSelected = document.getSelection().type === 'Range' + if (!block && !map && !linkWithLine && !rangeSelected) return e.preventDefault() /** Add HTMLElement for menu */ @@ -560,6 +561,12 @@ export const generateMaps = (container, { }).observe(menu, { childList: true }) menu.timer = setTimeout(() => menu.remove(), 100) + /** Menu Item for Geocoding */ + if (rangeSelected) { + // TODO check click is inside selection + const range = document.getSelection().getRangeAt(0) + menu.appendChild(menuItem.addLinkbyNominatim(range)) + } /** Menu Item for editing map */ const mapEditor = e.target.closest('.edit-map') if (mapEditor) { @@ -584,6 +591,30 @@ export const generateMaps = (container, { ) }, })) + } else if (geoLink.classList.contains('from-geocoding')) { + menu.appendChild(menuItem.Item({ + innerHTML: 'DELETE', + onclick: () => { + getMarkersFromMaps(geoLink) + .forEach(m => m.remove()) + + const sibling = [ + geoLink.previousElementSibling, + geoLink.nextElementSibling, + ] + .find(a => + a.classList.contains('from-geocoding') && a.textContent === geoLink.textContent, + ) + + if (sibling) { + geoLink.remove() + } else { + geoLink.replaceWith( + document.createTextNode(geoLink.textContent), + ) + } + }, + })) } menu.appendChild(menuItem.setGeoLinkType(geoLink)) } -- cgit v1.2.3-70-g09d2