From ee7f8fa6c770e6063a0dcedcaadd0e9635b0298e Mon Sep 17 00:00:00 2001 From: Hsieh Chin Fan Date: Sun, 6 Oct 2024 20:05:19 +0800 Subject: feat: use dumbymap.utils to expose contenxtmenu --- src/editor.mjs | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'src/editor.mjs') 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]') const dumbyContainer = document.querySelector('.DumbyMap') const textArea = document.querySelector('.editor textarea') let dumbymap +let refLinks = [] /** * Watch for changes of editing mode @@ -191,6 +192,17 @@ const editor = new EasyMDE({ const cm = editor.codemirror + +const getRefLinks = () => editor.value() + .split('\n') + .map(line => { + const [, ref, link] = line.match(/\[([^\[\]]+)\]:\s+(.+)/) ?? [] + return { ref, link } + }) + .filter(({ ref, link }) => ref && link) + +refLinks = getRefLinks() + /** * get state of website from hash string * @@ -384,6 +396,26 @@ const completeForCodeBlock = change => { // } // })() +/** + * menuForEditor. + * + * @param {Event} event -- Event for context menu + * @param {HTMLElement} menu -- menu of dumbymap + */ +const menuForEditor = (event, menu) => { + if (context.dataset.mode !== 'editing') { + const switchToEditingMode = new Item({ + innerHTML: 'EDIT', + onclick: () => context.dataset.mode = 'editing' + }) + menu.appendChild(switchToEditingMode) + } + + // Prevent menu appears outside of window + menu.style.transform = '' + shiftByWindow(menu) +} + /** * update content of HTML about Dumbymap */ @@ -411,6 +443,8 @@ const updateDumbyMap = () => { menu.style.transform = '' shiftByWindow(menu) } + // Set oncontextmenu callback + dumbymap.utils.setContextMenu(menuForEditor) } updateDumbyMap() @@ -782,6 +816,8 @@ cm.on('cursorActivity', _ => { } }) cm.on('blur', () => { + refLinks = getRefLinks() + if (menu.checkVisibility()) { cm.focus() } else { -- cgit v1.2.3-70-g09d2