From 6d7da75bdcca544ac40ad1d93e8da1a4fee8d4f2 Mon Sep 17 00:00:00 2001 From: Hsieh Chin Fan Date: Thu, 24 Oct 2024 10:38:30 +0800 Subject: feat: add menu item for deleting GeoLink from raw text --- src/dumbyUtils.mjs | 9 +++++++-- src/dumbymap.mjs | 14 +++++++++++++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/dumbyUtils.mjs b/src/dumbyUtils.mjs index 214e44f..42a51bc 100644 --- a/src/dumbyUtils.mjs +++ b/src/dumbyUtils.mjs @@ -385,7 +385,7 @@ export const dragForAnchor = (container, range, endOfLeaderLine) => { container.classList.add('dragging-geolink') const geoLink = document.createElement('a') geoLink.textContent = range.toString() - geoLink.classList.add('with-leader-line', 'geolink', 'drag') + geoLink.classList.add('with-leader-line', 'geolink', 'drag', 'from-text') // Replace current content with link const originContent = range.cloneContents() @@ -439,6 +439,11 @@ export const dragForAnchor = (container, range, endOfLeaderLine) => { } } +/** + * addGeoSchemeByText. + * + * @param {Node} node + */ export const addGeoSchemeByText = async (node) => { const digit = '[\\d\\uFF10-\\uFF19]' const decimal = '[.\\uFF0E]' @@ -451,7 +456,7 @@ export const addGeoSchemeByText = async (node) => { if (Date.parse(match.at(0) + ' 1990')) return null const a = document.createElement('a') - a.className = 'not-geolink' + a.className = 'not-geolink from-text' a.href = `geo:0,0?xy=${x},${y}` a.textContent = match.at(0) return a diff --git a/src/dumbymap.mjs b/src/dumbymap.mjs index 2f2b67f..6e5bc38 100644 --- a/src/dumbymap.mjs +++ b/src/dumbymap.mjs @@ -530,7 +530,8 @@ export const generateMaps = (container, { container.querySelectorAll('.dumby-menu').forEach(m => m.remove()) const map = e.target.closest('.mapclay') const block = e.target.closest('.dumby-block') - if (!block && !map) return + const geoLink = e.target.closest('.geolink') + if (!block && !map && !geoLink) return e.preventDefault() // Add menu element @@ -549,6 +550,17 @@ export const generateMaps = (container, { }).observe(menu, { childList: true }) menu.timer = setTimeout(() => menu.remove(), 100) + // Menu Items for GeoLink + if (geoLink) { + if (geoLink.classList.contains('from-text')) { + menu.appendChild(new menuItem.Item({ + text: 'Delete', + onclick: () => geoLink.replaceWith(document.createTextNode(geoLink.textContent)), + })) + } + return + } + // Menu Items for map if (map?.renderer?.results) { const rect = map.getBoundingClientRect() -- cgit v1.2.3-70-g09d2