From 6d8400e11ac5ebb05b43a12367384e686f834d7c Mon Sep 17 00:00:00 2001 From: Hsieh Chin Fan Date: Mon, 28 Oct 2024 12:23:25 +0800 Subject: feat: add menu-item for edit map without editor --- src/MenuItem.mjs | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'src/MenuItem.mjs') 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 = ({ callback?.(marker) }, }) + +/** + * editByRawText. + * + * @param {HTMLElement} ele + */ +export const editMapByRawText = (ele) => new Item({ + text: 'Edit by Raw Text', + onclick: () => { + const maps = Array.from(ele.querySelectorAll('.mapclay')) + if (!maps) return false + + const rect = ele.getBoundingClientRect() + const textArea = document.createElement('textarea') + textArea.className = 'edit-map' + textArea.style.cssText = `width: ${rect.width}px; height: ${rect.height}px;` + textArea.value = maps.map(map => map.dataset.mapclay ?? '') + .join('---') + .replaceAll(',', '\n') + .replaceAll(/["{}]/g, '') + .replaceAll(/:(\w)/g, ': $1') + + textArea.addEventListener('focusout', () => { + const code = document.createElement('code') + code.className = 'map' + code.textContent = textArea.value + textArea.replaceWith(code) + }) + ele.replaceChildren(textArea) + + return true + }, +}) -- cgit v1.2.3-70-g09d2