aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorHsieh Chin Fan <pham@topo.tw>2024-09-14 10:57:45 +0800
committerHsieh Chin Fan <pham@topo.tw>2024-09-15 00:27:48 +0800
commit901ad1a83ae08c259f75c69e5cc957a72e18f762 (patch)
tree37390d67b068fbf28df5114b5507a917efeb952e /src
parent7ef54be57586847c679b9a72b5bb4c546ca61b14 (diff)
feat: Add markers by API after map created
Diffstat (limited to 'src')
-rw-r--r--src/dumbymap.mjs36
1 files changed, 17 insertions, 19 deletions
diff --git a/src/dumbymap.mjs b/src/dumbymap.mjs
index a34998f..8222c80 100644
--- a/src/dumbymap.mjs
+++ b/src/dumbymap.mjs
@@ -217,9 +217,6 @@ export const generateMaps = async (container) => {
217 // Render Maps {{{ 217 // Render Maps {{{
218 218
219 const afterEachMapLoaded = (mapContainer) => { 219 const afterEachMapLoaded = (mapContainer) => {
220 mapContainer.querySelectorAll('.marker')
221 .forEach(marker => htmlHolder.anchors.push(marker))
222
223 const focusClickedMap = () => { 220 const focusClickedMap = () => {
224 if (container.getAttribute('data-layout') !== 'none') return 221 if (container.getAttribute('data-layout') !== 'none') return
225 222
@@ -244,16 +241,9 @@ export const generateMaps = async (container) => {
244 config.id = mapId 241 config.id = mapId
245 } 242 }
246 mapIdList.push(mapId) 243 mapIdList.push(mapId)
244 return config
247 } 245 }
248 246
249 // FIXME Create markers after maps are created
250 const markerOptions = geoLinks.map(link => ({
251 targets: link.targets,
252 xy: link.xy,
253 title: link.url.pathname
254 }))
255
256
257 // Render each code block with "language-map" class 247 // Render each code block with "language-map" class
258 const renderTargets = Array.from(container.querySelectorAll('pre:has(.language-map)')) 248 const renderTargets = Array.from(container.querySelectorAll('pre:has(.language-map)'))
259 const renderAllTargets = renderTargets.map(async (target) => { 249 const renderAllTargets = renderTargets.map(async (target) => {
@@ -266,14 +256,7 @@ export const generateMaps = async (container) => {
266 256
267 let configList = [] 257 let configList = []
268 try { 258 try {
269 configList = parseConfigsFromYaml(configText).map(result => { 259 configList = parseConfigsFromYaml(configText).map(assignMapId)
270 assignMapId(result)
271 const markersFromLinks = markerOptions.filter(marker =>
272 !marker.targets || marker.targets.includes(result.id)
273 )
274 Object.assign(result, { markers: markersFromLinks })
275 return result
276 })
277 } catch (_) { 260 } catch (_) {
278 console.warn('Fail to parse yaml config for element', target) 261 console.warn('Fail to parse yaml config for element', target)
279 } 262 }
@@ -292,6 +275,21 @@ export const generateMaps = async (container) => {
292 }) 275 })
293 }) 276 })
294 const renderInfo = await Promise.all(renderAllTargets).then(() => 'Finish Rendering') 277 const renderInfo = await Promise.all(renderAllTargets).then(() => 'Finish Rendering')
278 const maps = htmlHolder.querySelectorAll('.map-container') ?? []
279 Array.from(maps)
280 .forEach(ele => {
281 const markers = geoLinks
282 .filter(link => !link.targets || link.targets.include(ele.id))
283 .map(link => ({
284 xy: link.xy,
285 title: link.url.pathname
286 }))
287 ele?.renderer?.addMarkers(markers)
288 })
289
290 htmlHolder.querySelectorAll('.marker')
291 .forEach(marker => htmlHolder.anchors.push(marker))
292
295 console.info(renderInfo) 293 console.info(renderInfo)
296 294
297 //}}} 295 //}}}