From ce1f619b9a7a64100a0315330244a296c091bbc9 Mon Sep 17 00:00:00 2001 From: Hsieh Chin Fan Date: Mon, 28 Oct 2024 19:32:23 +0800 Subject: 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 --- src/dumbymap.mjs | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) (limited to 'src/dumbymap.mjs') 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 => ({ * @param {number} [options.delay=1000] mapDelay - Delay before rendering maps (in milliseconds) * @param {Function} options.render - Render function for maps * @param {Function} options.renderCallback - Callback function to be called after map rendering + * @param {String | null} options.defaultApply */ export const generateMaps = (container, { contentSelector, @@ -144,6 +145,7 @@ export const generateMaps = (container, { mapDelay = 1000, render = defaultRender, renderCallback = () => null, + defaultApply = 'https://outdoorsafetylab.github.io/dumbymap/assets/default.yml', } = {}) => { /** Prepare: Contaner */ if (container.classList.contains('Dumby')) return @@ -179,6 +181,7 @@ export const generateMaps = (container, { get blocks () { return Array.from(container.querySelectorAll('.dumby-block')) }, modal, modalContent, + aliases: {}, utils: { ...utils, renderedMaps: () => @@ -478,6 +481,7 @@ export const generateMaps = (container, { */ function renderMap (target) { if (!target.isConnected) return + target.classList.add('map-container') // Get text in code block starts with markdown text '```map' const configText = target @@ -510,7 +514,7 @@ export const generateMaps = (container, { .forEach(e => e.remove()) } - if (!target.renderMap) { + if (!target.renderMap || target.dataset.render === 'no-delay') { target.renderMap = debounce( (configList) => { // Render maps @@ -522,7 +526,7 @@ export const generateMaps = (container, { afterMapRendered(e.renderer) } }) - }, mapDelay, + }, target.dataset.render === 'no-delay' ? 0 : mapDelay, ) } target.renderMap(configList) @@ -592,12 +596,7 @@ export const generateMaps = (container, { const rect = map.getBoundingClientRect() const [x, y] = [e.x - rect.left, e.y - rect.top] menu.appendChild(menuItem.simplePlaceholder(`MAP ID: ${map.id}`)) - menu.appendChild(new menuItem.Folder({ - text: 'Edit Map', - items: [ - menuItem.editMapByRawText(map.parentElement), - ], - })) + menu.appendChild(menuItem.editMap(map, dumbymap)) menu.appendChild(menuItem.renderResults(dumbymap, map)) if (map.dataset.render === 'fulfilled') { @@ -694,6 +693,20 @@ export const generateMaps = (container, { } } + /** Get default applied config */ + if (defaultApply) { + fetch(defaultApply) + .then(res => res.text()) + .then(rawText => { + const config = mapclay.parseConfigsFromYaml(rawText)?.at(0) + Object.entries(config.aliases) + .forEach(([option, aliases]) => { + dumbymap.aliases[option] = aliases + }) + }) + .catch(err => console.warn(`Fail to get aliases from ${defaultApply}`, err)) + } + /** Return Object for utils */ return Object.seal(dumbymap) } -- cgit v1.2.3-70-g09d2