From e98187cf76dc45c1acae7989885dabf514eae4f1 Mon Sep 17 00:00:00 2001 From: Hongkun Peng Date: Tue, 23 Jul 2024 22:08:40 +0800 Subject: [PATCH 1/7] feat: autoSave option supports dynamic switching --- src/Repl.vue | 2 +- src/codemirror/CodeMirror.vue | 37 +++++++++++++++++++++++------------ src/monaco/Monaco.vue | 32 ++++++++++++++++++++---------- 3 files changed, 47 insertions(+), 24 deletions(-) diff --git a/src/Repl.vue b/src/Repl.vue index 30e0bc20..ed2b581b 100644 --- a/src/Repl.vue +++ b/src/Repl.vue @@ -68,7 +68,7 @@ const outputSlotName = computed(() => (props.layoutReverse ? 'left' : 'right')) provide(injectKeyStore, props.store) provide('autoresize', props.autoResize) -provide('autosave', props.autoSave) +provide('autosave', toRef(props, 'autoSave')) provide('import-map', toRef(props, 'showImportMap')) provide('tsconfig', toRef(props, 'showTsConfig')) provide('clear-console', toRef(props, 'clearConsole')) diff --git a/src/codemirror/CodeMirror.vue b/src/codemirror/CodeMirror.vue index 6dae3df7..9d8d0995 100644 --- a/src/codemirror/CodeMirror.vue +++ b/src/codemirror/CodeMirror.vue @@ -4,7 +4,7 @@ diff --git a/src/monaco/Monaco.vue b/src/monaco/Monaco.vue index 68229bca..ef48cbc2 100644 --- a/src/monaco/Monaco.vue +++ b/src/monaco/Monaco.vue @@ -142,19 +142,31 @@ onMounted(async () => { // ignore save event }) - if (autoSave) { - editorInstance.onDidChangeModelContent(() => { + const editorChangeEvent = () => { + emit('change', editorInstance.getValue()) + } + const saveKeydownEvent = (e: KeyboardEvent) => { + if (e.ctrlKey && e.key === 's') { + e.preventDefault() emit('change', editorInstance.getValue()) - }) - } else { - containerRef.value.addEventListener('keydown', (e: KeyboardEvent) => { - if (e.ctrlKey && e.key === 's') { - e.preventDefault() - emit('change', editorInstance.getValue()) - } - }) + } } + let disposable: monaco.IDisposable + watch( + autoSave, + (newVal) => { + if (newVal) { + containerRef.value!.removeEventListener('keydown', saveKeydownEvent) + disposable = editorInstance.onDidChangeModelContent(editorChangeEvent) + } else { + disposable && disposable.dispose() + containerRef.value!.addEventListener('keydown', saveKeydownEvent) + } + }, + { immediate: true }, + ) + // update theme watch(replTheme, (n) => { editorInstance.updateOptions({ From 75f5b77b008a7b2eaf6e6e2428a71cbf95c6eece Mon Sep 17 00:00:00 2001 From: Hongkun Peng Date: Wed, 24 Jul 2024 09:07:32 +0800 Subject: [PATCH 2/7] feat: improve code --- src/codemirror/CodeMirror.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/codemirror/CodeMirror.vue b/src/codemirror/CodeMirror.vue index 9d8d0995..d1634c52 100644 --- a/src/codemirror/CodeMirror.vue +++ b/src/codemirror/CodeMirror.vue @@ -4,7 +4,7 @@ diff --git a/src/monaco/Monaco.vue b/src/monaco/Monaco.vue index 68229bca..ef48cbc2 100644 --- a/src/monaco/Monaco.vue +++ b/src/monaco/Monaco.vue @@ -142,19 +142,31 @@ onMounted(async () => { // ignore save event }) - if (autoSave) { - editorInstance.onDidChangeModelContent(() => { + const editorChangeEvent = () => { + emit('change', editorInstance.getValue()) + } + const saveKeydownEvent = (e: KeyboardEvent) => { + if (e.ctrlKey && e.key === 's') { + e.preventDefault() emit('change', editorInstance.getValue()) - }) - } else { - containerRef.value.addEventListener('keydown', (e: KeyboardEvent) => { - if (e.ctrlKey && e.key === 's') { - e.preventDefault() - emit('change', editorInstance.getValue()) - } - }) + } } + let disposable: monaco.IDisposable + watch( + autoSave, + (newVal) => { + if (newVal) { + containerRef.value!.removeEventListener('keydown', saveKeydownEvent) + disposable = editorInstance.onDidChangeModelContent(editorChangeEvent) + } else { + disposable && disposable.dispose() + containerRef.value!.addEventListener('keydown', saveKeydownEvent) + } + }, + { immediate: true }, + ) + // update theme watch(replTheme, (n) => { editorInstance.updateOptions({ From 6af2697cd8e3625dc83aea40b77cf4b82d49e252 Mon Sep 17 00:00:00 2001 From: Hongkun Peng Date: Wed, 24 Jul 2024 09:07:32 +0800 Subject: [PATCH 4/7] feat: improve code --- src/codemirror/CodeMirror.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/codemirror/CodeMirror.vue b/src/codemirror/CodeMirror.vue index 9d8d0995..d1634c52 100644 --- a/src/codemirror/CodeMirror.vue +++ b/src/codemirror/CodeMirror.vue @@ -4,7 +4,7 @@