diff options
author | Hsieh Chin Fan <pham@topo.tw> | 2024-10-06 20:05:19 +0800 |
---|---|---|
committer | Hsieh Chin Fan <pham@topo.tw> | 2024-10-07 16:15:56 +0800 |
commit | ee7f8fa6c770e6063a0dcedcaadd0e9635b0298e (patch) | |
tree | a06e683a3a0f1a8e61c93affe5a61007f7f59877 /src/editor.mjs | |
parent | 31cc063c23df57832779b004a22d85cd6cf5caf0 (diff) |
feat: use dumbymap.utils to expose contenxtmenu
Diffstat (limited to 'src/editor.mjs')
-rw-r--r-- | src/editor.mjs | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/editor.mjs b/src/editor.mjs index 46d91af..1b31535 100644 --- a/src/editor.mjs +++ b/src/editor.mjs | |||
@@ -12,6 +12,7 @@ const context = document.querySelector('[data-mode]') | |||
12 | const dumbyContainer = document.querySelector('.DumbyMap') | 12 | const dumbyContainer = document.querySelector('.DumbyMap') |
13 | const textArea = document.querySelector('.editor textarea') | 13 | const textArea = document.querySelector('.editor textarea') |
14 | let dumbymap | 14 | let dumbymap |
15 | let refLinks = [] | ||
15 | 16 | ||
16 | /** | 17 | /** |
17 | * Watch for changes of editing mode | 18 | * Watch for changes of editing mode |
@@ -191,6 +192,17 @@ const editor = new EasyMDE({ | |||
191 | 192 | ||
192 | const cm = editor.codemirror | 193 | const cm = editor.codemirror |
193 | 194 | ||
195 | |||
196 | const getRefLinks = () => editor.value() | ||
197 | .split('\n') | ||
198 | .map(line => { | ||
199 | const [, ref, link] = line.match(/\[([^\[\]]+)\]:\s+(.+)/) ?? [] | ||
200 | return { ref, link } | ||
201 | }) | ||
202 | .filter(({ ref, link }) => ref && link) | ||
203 | |||
204 | refLinks = getRefLinks() | ||
205 | |||
194 | /** | 206 | /** |
195 | * get state of website from hash string | 207 | * get state of website from hash string |
196 | * | 208 | * |
@@ -385,6 +397,26 @@ const completeForCodeBlock = change => { | |||
385 | // })() | 397 | // })() |
386 | 398 | ||
387 | /** | 399 | /** |
400 | * menuForEditor. | ||
401 | * | ||
402 | * @param {Event} event -- Event for context menu | ||
403 | * @param {HTMLElement} menu -- menu of dumbymap | ||
404 | */ | ||
405 | const menuForEditor = (event, menu) => { | ||
406 | if (context.dataset.mode !== 'editing') { | ||
407 | const switchToEditingMode = new Item({ | ||
408 | innerHTML: '<strong>EDIT</strong>', | ||
409 | onclick: () => context.dataset.mode = 'editing' | ||
410 | }) | ||
411 | menu.appendChild(switchToEditingMode) | ||
412 | } | ||
413 | |||
414 | // Prevent menu appears outside of window | ||
415 | menu.style.transform = '' | ||
416 | shiftByWindow(menu) | ||
417 | } | ||
418 | |||
419 | /** | ||
388 | * update content of HTML about Dumbymap | 420 | * update content of HTML about Dumbymap |
389 | */ | 421 | */ |
390 | const updateDumbyMap = () => { | 422 | const updateDumbyMap = () => { |
@@ -411,6 +443,8 @@ const updateDumbyMap = () => { | |||
411 | menu.style.transform = '' | 443 | menu.style.transform = '' |
412 | shiftByWindow(menu) | 444 | shiftByWindow(menu) |
413 | } | 445 | } |
446 | // Set oncontextmenu callback | ||
447 | dumbymap.utils.setContextMenu(menuForEditor) | ||
414 | } | 448 | } |
415 | updateDumbyMap() | 449 | updateDumbyMap() |
416 | 450 | ||
@@ -782,6 +816,8 @@ cm.on('cursorActivity', _ => { | |||
782 | } | 816 | } |
783 | }) | 817 | }) |
784 | cm.on('blur', () => { | 818 | cm.on('blur', () => { |
819 | refLinks = getRefLinks() | ||
820 | |||
785 | if (menu.checkVisibility()) { | 821 | if (menu.checkVisibility()) { |
786 | cm.focus() | 822 | cm.focus() |
787 | } else { | 823 | } else { |