aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/dumbymap.mjs
diff options
context:
space:
mode:
authorHsieh Chin Fan <pham@topo.tw>2024-10-28 19:32:23 +0800
committerHsieh Chin Fan <pham@topo.tw>2024-10-28 20:11:22 +0800
commitce1f619b9a7a64100a0315330244a296c091bbc9 (patch)
tree0165d829a83abe6d59a2fb69fec48b31213178eb /src/dumbymap.mjs
parent92dc83240b31455b8282242fafb0471681538fbe (diff)
feat: add menu-folder for editing map options
* add dumbymap.aliases for option aliases * don't remove sub-menu when child sub-menu exists * don't add render delay for config modification by menu-item * TODO sub-menu placement
Diffstat (limited to 'src/dumbymap.mjs')
-rw-r--r--src/dumbymap.mjs29
1 files changed, 21 insertions, 8 deletions
diff --git a/src/dumbymap.mjs b/src/dumbymap.mjs
index f538d0d..1509c04 100644
--- a/src/dumbymap.mjs
+++ b/src/dumbymap.mjs
@@ -135,6 +135,7 @@ const defaultRender = mapclay.renderWith(config => ({
135 * @param {number} [options.delay=1000] mapDelay - Delay before rendering maps (in milliseconds) 135 * @param {number} [options.delay=1000] mapDelay - Delay before rendering maps (in milliseconds)
136 * @param {Function} options.render - Render function for maps 136 * @param {Function} options.render - Render function for maps
137 * @param {Function} options.renderCallback - Callback function to be called after map rendering 137 * @param {Function} options.renderCallback - Callback function to be called after map rendering
138 * @param {String | null} options.defaultApply
138 */ 139 */
139export const generateMaps = (container, { 140export const generateMaps = (container, {
140 contentSelector, 141 contentSelector,
@@ -144,6 +145,7 @@ export const generateMaps = (container, {
144 mapDelay = 1000, 145 mapDelay = 1000,
145 render = defaultRender, 146 render = defaultRender,
146 renderCallback = () => null, 147 renderCallback = () => null,
148 defaultApply = 'https://outdoorsafetylab.github.io/dumbymap/assets/default.yml',
147} = {}) => { 149} = {}) => {
148 /** Prepare: Contaner */ 150 /** Prepare: Contaner */
149 if (container.classList.contains('Dumby')) return 151 if (container.classList.contains('Dumby')) return
@@ -179,6 +181,7 @@ export const generateMaps = (container, {
179 get blocks () { return Array.from(container.querySelectorAll('.dumby-block')) }, 181 get blocks () { return Array.from(container.querySelectorAll('.dumby-block')) },
180 modal, 182 modal,
181 modalContent, 183 modalContent,
184 aliases: {},
182 utils: { 185 utils: {
183 ...utils, 186 ...utils,
184 renderedMaps: () => 187 renderedMaps: () =>
@@ -478,6 +481,7 @@ export const generateMaps = (container, {
478 */ 481 */
479 function renderMap (target) { 482 function renderMap (target) {
480 if (!target.isConnected) return 483 if (!target.isConnected) return
484 target.classList.add('map-container')
481 485
482 // Get text in code block starts with markdown text '```map' 486 // Get text in code block starts with markdown text '```map'
483 const configText = target 487 const configText = target
@@ -510,7 +514,7 @@ export const generateMaps = (container, {
510 .forEach(e => e.remove()) 514 .forEach(e => e.remove())
511 } 515 }
512 516
513 if (!target.renderMap) { 517 if (!target.renderMap || target.dataset.render === 'no-delay') {
514 target.renderMap = debounce( 518 target.renderMap = debounce(
515 (configList) => { 519 (configList) => {
516 // Render maps 520 // Render maps
@@ -522,7 +526,7 @@ export const generateMaps = (container, {
522 afterMapRendered(e.renderer) 526 afterMapRendered(e.renderer)
523 } 527 }
524 }) 528 })
525 }, mapDelay, 529 }, target.dataset.render === 'no-delay' ? 0 : mapDelay,
526 ) 530 )
527 } 531 }
528 target.renderMap(configList) 532 target.renderMap(configList)
@@ -592,12 +596,7 @@ export const generateMaps = (container, {
592 const rect = map.getBoundingClientRect() 596 const rect = map.getBoundingClientRect()
593 const [x, y] = [e.x - rect.left, e.y - rect.top] 597 const [x, y] = [e.x - rect.left, e.y - rect.top]
594 menu.appendChild(menuItem.simplePlaceholder(`MAP ID: ${map.id}`)) 598 menu.appendChild(menuItem.simplePlaceholder(`MAP ID: ${map.id}`))
595 menu.appendChild(new menuItem.Folder({ 599 menu.appendChild(menuItem.editMap(map, dumbymap))
596 text: 'Edit Map',
597 items: [
598 menuItem.editMapByRawText(map.parentElement),
599 ],
600 }))
601 menu.appendChild(menuItem.renderResults(dumbymap, map)) 600 menu.appendChild(menuItem.renderResults(dumbymap, map))
602 601
603 if (map.dataset.render === 'fulfilled') { 602 if (map.dataset.render === 'fulfilled') {
@@ -694,6 +693,20 @@ export const generateMaps = (container, {
694 } 693 }
695 } 694 }
696 695
696 /** Get default applied config */
697 if (defaultApply) {
698 fetch(defaultApply)
699 .then(res => res.text())
700 .then(rawText => {
701 const config = mapclay.parseConfigsFromYaml(rawText)?.at(0)
702 Object.entries(config.aliases)
703 .forEach(([option, aliases]) => {
704 dumbymap.aliases[option] = aliases
705 })
706 })
707 .catch(err => console.warn(`Fail to get aliases from ${defaultApply}`, err))
708 }
709
697 /** Return Object for utils */ 710 /** Return Object for utils */
698 return Object.seal(dumbymap) 711 return Object.seal(dumbymap)
699} 712}