From 7beb564dd63624dce148401b2644dafa278af837 Mon Sep 17 00:00:00 2001 From: Hsieh Chin Fan Date: Mon, 7 Oct 2024 17:46:19 +0800 Subject: feat: add menu item for append ref style link on selection --- src/MenuItem.mjs | 22 ++++++++++++++++++++++ src/editor.mjs | 13 +++++++++++++ 2 files changed, 35 insertions(+) diff --git a/src/MenuItem.mjs b/src/MenuItem.mjs index 9218b45..f5dfb5b 100644 --- a/src/MenuItem.mjs +++ b/src/MenuItem.mjs @@ -366,3 +366,25 @@ export const restoreCamera = map => text: 'Restore Camera', onclick: () => map.renderer.restoreCamera() }) + +/** + * addRefLink. replace selected text into markdown link by reference style links + * + * @param {CodeMirror} cm + * @param {Object[]} refLinks -- object for { ref, link } + */ +export const addRefLink = (cm, refLinks) => + new Folder({ + text: 'Add Link', + items: refLinks.map(refLink => new Item({ + text: refLink.ref, + onclick: () => { + const selection = cm.getSelection() + if (selection === refLink.ref) { + cm.replaceSelection(`[${selection}]`) + } else { + cm.replaceSelection(`[${selection}][${refLink.ref}]`) + } + } + })) + }) diff --git a/src/editor.mjs b/src/editor.mjs index d75d1ec..c73809f 100644 --- a/src/editor.mjs +++ b/src/editor.mjs @@ -991,4 +991,17 @@ const addMapRandomlyByPreset = () => { ) } +cm.getWrapperElement().oncontextmenu = e => { + if (insideCodeblockForMap(cm.getCursor())) return + e.preventDefault() + + if (cm.getSelection() && refLinks.length > 0) { + menu.appendChild(menuItem.addRefLink(cm, refLinks)) + } + + if (menu.children.length > 0) { + menu.style.cssText = `display: block; transform: translate(${e.x}px, ${e.y}px); overflow: visible;` + } +} + // vim: sw=2 ts=2 foldmethod=marker foldmarker={{{,}}} -- cgit v1.2.3-70-g09d2