aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/MenuItem.mjs
diff options
context:
space:
mode:
authorHsieh Chin Fan <pham@topo.tw>2024-10-28 12:23:25 +0800
committerHsieh Chin Fan <pham@topo.tw>2024-10-28 19:44:05 +0800
commit6d8400e11ac5ebb05b43a12367384e686f834d7c (patch)
treeb82e4d38d71921943dcb9882ee4333d0d0cb94c9 /src/MenuItem.mjs
parent65680175fc04e71b362458745727974af73f711c (diff)
feat: add menu-item for edit map without editor
Diffstat (limited to 'src/MenuItem.mjs')
-rw-r--r--src/MenuItem.mjs33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/MenuItem.mjs b/src/MenuItem.mjs
index d9645f7..eb683ea 100644
--- a/src/MenuItem.mjs
+++ b/src/MenuItem.mjs
@@ -523,3 +523,36 @@ export const addMarker = ({
523 callback?.(marker) 523 callback?.(marker)
524 }, 524 },
525}) 525})
526
527/**
528 * editByRawText.
529 *
530 * @param {HTMLElement} ele
531 */
532export const editMapByRawText = (ele) => new Item({
533 text: 'Edit by Raw Text',
534 onclick: () => {
535 const maps = Array.from(ele.querySelectorAll('.mapclay'))
536 if (!maps) return false
537
538 const rect = ele.getBoundingClientRect()
539 const textArea = document.createElement('textarea')
540 textArea.className = 'edit-map'
541 textArea.style.cssText = `width: ${rect.width}px; height: ${rect.height}px;`
542 textArea.value = maps.map(map => map.dataset.mapclay ?? '')
543 .join('---')
544 .replaceAll(',', '\n')
545 .replaceAll(/["{}]/g, '')
546 .replaceAll(/:(\w)/g, ': $1')
547
548 textArea.addEventListener('focusout', () => {
549 const code = document.createElement('code')
550 code.className = 'map'
551 code.textContent = textArea.value
552 textArea.replaceWith(code)
553 })
554 ele.replaceChildren(textArea)
555
556 return true
557 },
558})