diff options
author | Hsieh Chin Fan <pham@topo.tw> | 2024-10-07 17:46:19 +0800 |
---|---|---|
committer | Hsieh Chin Fan <pham@topo.tw> | 2024-10-08 10:28:47 +0800 |
commit | 7beb564dd63624dce148401b2644dafa278af837 (patch) | |
tree | ee0d2c304d31aa33aba60f758178e46c4a38968f | |
parent | 2caa6eba91f9c810bda3087d521771b0b9e013f2 (diff) |
feat: add menu item for append ref style link on selection
-rw-r--r-- | src/MenuItem.mjs | 22 | ||||
-rw-r--r-- | src/editor.mjs | 13 |
2 files changed, 35 insertions, 0 deletions
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 => | |||
366 | text: 'Restore Camera', | 366 | text: 'Restore Camera', |
367 | onclick: () => map.renderer.restoreCamera() | 367 | onclick: () => map.renderer.restoreCamera() |
368 | }) | 368 | }) |
369 | |||
370 | /** | ||
371 | * addRefLink. replace selected text into markdown link by reference style links | ||
372 | * | ||
373 | * @param {CodeMirror} cm | ||
374 | * @param {Object[]} refLinks -- object for { ref, link } | ||
375 | */ | ||
376 | export const addRefLink = (cm, refLinks) => | ||
377 | new Folder({ | ||
378 | text: 'Add Link', | ||
379 | items: refLinks.map(refLink => new Item({ | ||
380 | text: refLink.ref, | ||
381 | onclick: () => { | ||
382 | const selection = cm.getSelection() | ||
383 | if (selection === refLink.ref) { | ||
384 | cm.replaceSelection(`[${selection}]`) | ||
385 | } else { | ||
386 | cm.replaceSelection(`[${selection}][${refLink.ref}]`) | ||
387 | } | ||
388 | } | ||
389 | })) | ||
390 | }) | ||
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 = () => { | |||
991 | ) | 991 | ) |
992 | } | 992 | } |
993 | 993 | ||
994 | cm.getWrapperElement().oncontextmenu = e => { | ||
995 | if (insideCodeblockForMap(cm.getCursor())) return | ||
996 | e.preventDefault() | ||
997 | |||
998 | if (cm.getSelection() && refLinks.length > 0) { | ||
999 | menu.appendChild(menuItem.addRefLink(cm, refLinks)) | ||
1000 | } | ||
1001 | |||
1002 | if (menu.children.length > 0) { | ||
1003 | menu.style.cssText = `display: block; transform: translate(${e.x}px, ${e.y}px); overflow: visible;` | ||
1004 | } | ||
1005 | } | ||
1006 | |||
994 | // vim: sw=2 ts=2 foldmethod=marker foldmarker={{{,}}} | 1007 | // vim: sw=2 ts=2 foldmethod=marker foldmarker={{{,}}} |