diff options
-rw-r--r-- | src/dumbymap.mjs | 14 | ||||
-rw-r--r-- | src/editor.mjs | 35 |
2 files changed, 32 insertions, 17 deletions
diff --git a/src/dumbymap.mjs b/src/dumbymap.mjs index f4e3d83..e5dd2cd 100644 --- a/src/dumbymap.mjs +++ b/src/dumbymap.mjs | |||
@@ -348,16 +348,20 @@ export const generateMaps = (container, { | |||
348 | const mapElement = renderer.target | 348 | const mapElement = renderer.target |
349 | // FIXME | 349 | // FIXME |
350 | mapElement.renderer = renderer | 350 | mapElement.renderer = renderer |
351 | // Make map not focusable by tab key | ||
351 | mapElement.tabindex = -1 | 352 | mapElement.tabindex = -1 |
353 | |||
354 | // Cache if render is fulfilled | ||
352 | if (mapElement.dataset.render === 'fulfilled') { | 355 | if (mapElement.dataset.render === 'fulfilled') { |
353 | mapCache[mapElement.id] = renderer | 356 | mapCache[mapElement.id] = renderer |
354 | } else { | 357 | } else { |
355 | return | 358 | return |
356 | } | 359 | } |
357 | 360 | ||
361 | // Simple callback by caller | ||
358 | renderCallback?.(renderer) | 362 | renderCallback?.(renderer) |
359 | 363 | ||
360 | // Work with Mutation Observer | 364 | // Watch change of class |
361 | const observer = mapClassObserver() | 365 | const observer = mapClassObserver() |
362 | observer.observe(mapElement, { | 366 | observer.observe(mapElement, { |
363 | attributes: true, | 367 | attributes: true, |
@@ -367,6 +371,14 @@ export const generateMaps = (container, { | |||
367 | onRemove(dumbymap.htmlHolder, () => { | 371 | onRemove(dumbymap.htmlHolder, () => { |
368 | observer.disconnect() | 372 | observer.disconnect() |
369 | }) | 373 | }) |
374 | |||
375 | // Focus current map is no map is focused | ||
376 | if ( | ||
377 | !dumbymap.utils.renderedMaps().find(map => map.classList.contains('focus')) || | ||
378 | container.querySelectorAll('.mapclay.focus').length === 0 | ||
379 | ) { | ||
380 | mapElement.classList.add('focus') | ||
381 | } | ||
370 | } | 382 | } |
371 | 383 | ||
372 | // Set unique ID for map container | 384 | // Set unique ID for map container |
diff --git a/src/editor.mjs b/src/editor.mjs index ecf3735..fd18f78 100644 --- a/src/editor.mjs +++ b/src/editor.mjs | |||
@@ -20,12 +20,25 @@ import * as tutorial from './tutorial' | |||
20 | const url = new URL(window.location) | 20 | const url = new URL(window.location) |
21 | const pageParams = url.searchParams | 21 | const pageParams = url.searchParams |
22 | const crs = pageParams.get('crs') ?? 'EPSG:4326' | 22 | const crs = pageParams.get('crs') ?? 'EPSG:4326' |
23 | const initialLayout = pageParams.get('layout') | ||
23 | 24 | ||
24 | /** Variables: dumbymap and editor **/ | 25 | /** Variables: dumbymap and editor **/ |
25 | const context = document.querySelector('[data-mode]') | 26 | const context = document.querySelector('[data-mode]') |
27 | const textArea = document.querySelector('.editor textarea') | ||
26 | const dumbyContainer = document.querySelector('.DumbyMap') | 28 | const dumbyContainer = document.querySelector('.DumbyMap') |
27 | dumbyContainer.dataset.scrollLine = '' | 29 | dumbyContainer.dataset.scrollLine = '' |
28 | const textArea = document.querySelector('.editor textarea') | 30 | /** Watch: Layout of DumbyMap */ |
31 | new window.MutationObserver(mutaions => { | ||
32 | const mutation = mutaions.at(-1) | ||
33 | const layout = dumbyContainer.dataset.layout | ||
34 | if (layout !== 'normal' || mutation.oldValue === 'normal') { | ||
35 | delete context.dataset.mode | ||
36 | } | ||
37 | }).observe(dumbyContainer, { | ||
38 | attributes: true, | ||
39 | attributeFilter: ['data-layout'], | ||
40 | attributeOldValue: true, | ||
41 | }) | ||
29 | let dumbymap | 42 | let dumbymap |
30 | 43 | ||
31 | /** Variables: Reference Style Links in Markdown */ | 44 | /** Variables: Reference Style Links in Markdown */ |
@@ -472,7 +485,11 @@ const updateDumbyMap = (callback = null) => { | |||
472 | 485 | ||
473 | callback?.(dumbymap) | 486 | callback?.(dumbymap) |
474 | } | 487 | } |
475 | updateDumbyMap() | 488 | updateDumbyMap(() => { |
489 | if (initialLayout) { | ||
490 | dumbyContainer.dataset.layout = initialLayout | ||
491 | } | ||
492 | }) | ||
476 | 493 | ||
477 | // Re-render HTML by editor content | 494 | // Re-render HTML by editor content |
478 | cm.on('change', (_, change) => { | 495 | cm.on('change', (_, change) => { |
@@ -931,20 +948,6 @@ document.onkeydown = e => { | |||
931 | 948 | ||
932 | // }}} | 949 | // }}} |
933 | // }}} | 950 | // }}} |
934 | // Layout Switch {{{ | ||
935 | new window.MutationObserver(mutaions => { | ||
936 | const mutation = mutaions.at(-1) | ||
937 | const layout = dumbyContainer.dataset.layout | ||
938 | if (layout !== 'normal' || mutation.oldValue === 'normal') { | ||
939 | delete context.dataset.mode | ||
940 | } | ||
941 | }).observe(dumbyContainer, { | ||
942 | attributes: true, | ||
943 | attributeFilter: ['data-layout'], | ||
944 | attributeOldValue: true, | ||
945 | }) | ||
946 | // }}} | ||
947 | |||
948 | /** | 951 | /** |
949 | * addMapRandomlyByPreset. insert random text of valid mapclay yaml into editor | 952 | * addMapRandomlyByPreset. insert random text of valid mapclay yaml into editor |
950 | */ | 953 | */ |