aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/dumbymap.mjs7
-rw-r--r--src/editor.mjs36
2 files changed, 43 insertions, 0 deletions
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 } = {}) => {
135 Array.from( 135 Array.from(
136 container.querySelectorAll('.mapclay[data-render=fulfilled]') 136 container.querySelectorAll('.mapclay[data-render=fulfilled]')
137 ).sort((a, b) => a.style.order > b.style.order), 137 ).sort((a, b) => a.style.order > b.style.order),
138 setContextMenu: (menuCallback) => {
139 const originalCallback = container.oncontextmenu
140 container.oncontextmenu = (e) => {
141 const menu = originalCallback(e)
142 menuCallback(e, menu)
143 }
144 },
138 focusNextMap: throttle(utils.focusNextMap, utils.focusDelay), 145 focusNextMap: throttle(utils.focusNextMap, utils.focusDelay),
139 switchToNextLayout: throttle(utils.switchToNextLayout, 300) 146 switchToNextLayout: throttle(utils.switchToNextLayout, 300)
140 } 147 }
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]')
12const dumbyContainer = document.querySelector('.DumbyMap') 12const dumbyContainer = document.querySelector('.DumbyMap')
13const textArea = document.querySelector('.editor textarea') 13const textArea = document.querySelector('.editor textarea')
14let dumbymap 14let dumbymap
15let 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
192const cm = editor.codemirror 193const cm = editor.codemirror
193 194
195
196const 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
204refLinks = 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 */
405const 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 */
390const updateDumbyMap = () => { 422const 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}
415updateDumbyMap() 449updateDumbyMap()
416 450
@@ -782,6 +816,8 @@ cm.on('cursorActivity', _ => {
782 } 816 }
783}) 817})
784cm.on('blur', () => { 818cm.on('blur', () => {
819 refLinks = getRefLinks()
820
785 if (menu.checkVisibility()) { 821 if (menu.checkVisibility()) {
786 cm.focus() 822 cm.focus()
787 } else { 823 } else {