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/dumbymap.mjs | 7 +++++++ src/editor.mjs | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) (limited to 'src') diff --git a/src/dumbymap.mjs b/src/dumbymap.mjs index a31274e..dde0b00 100644 --- a/src/dumbymap.mjs +++ b/src/dumbymap.mjs @@ -135,6 +135,13 @@ export const generateMaps = (container, { delay } = {}) => { Array.from( container.querySelectorAll('.mapclay[data-render=fulfilled]') ).sort((a, b) => a.style.order > b.style.order), + setContextMenu: (menuCallback) => { + const originalCallback = container.oncontextmenu + container.oncontextmenu = (e) => { + const menu = originalCallback(e) + menuCallback(e, menu) + } + }, focusNextMap: throttle(utils.focusNextMap, utils.focusDelay), switchToNextLayout: throttle(utils.switchToNextLayout, 300) } 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