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={{{,}}} |