From a8602bd1a5ae7189bb87cbb863cfdfced0b87c47 Mon Sep 17 00:00:00 2001 From: purocean Date: Wed, 28 Aug 2019 18:51:46 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20eslint?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/components/Preview.vue | 1 - 1 file changed, 1 deletion(-) diff --git a/frontend/src/components/Preview.vue b/frontend/src/components/Preview.vue index 6f958e4a..a968ca63 100644 --- a/frontend/src/components/Preview.vue +++ b/frontend/src/components/Preview.vue @@ -282,7 +282,6 @@ export default { env.require && env.require('opn')(link.href) e.preventDefault() e.stopPropagation() - return } } From 666347ff49dd5757b425f9abaef0628d7b153934 Mon Sep 17 00:00:00 2001 From: purocean Date: Wed, 28 Aug 2019 21:03:58 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E7=BC=96=E8=BE=91=E5=99=A8=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=20model?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/components/Editor.vue | 21 +++- frontend/src/components/MonacoEditor.vue | 64 ++++++---- frontend/src/components/Preview.vue | 6 +- frontend/src/components/TreeNode.vue | 4 +- frontend/src/lib/extensions.js | 153 +++++++++++++++++++++++ 5 files changed, 215 insertions(+), 33 deletions(-) create mode 100644 frontend/src/lib/extensions.js diff --git a/frontend/src/components/Editor.vue b/frontend/src/components/Editor.vue index d3b98ed8..44ce6986 100644 --- a/frontend/src/components/Editor.vue +++ b/frontend/src/components/Editor.vue @@ -3,7 +3,7 @@ { + let value = model.getValue() + const eol = model.getEOL() + if (!value.endsWith(eol)) { + value += eol + model.setValue(value) + } + this.$emit('change', { uri, value }) + }) + } + + // TODO 不用 set value 保留编辑状态 + model.setValue(value) + + // TODO 缓存 model + models[uri] = model + + return model + }, recordKeys (e) { if (e.type === 'keydown') { keys[e.key] = true @@ -56,9 +75,12 @@ export default { }) }, initMonaco () { + window.supportedExtensions = window.monaco.languages.getLanguages().flatMap(x => x.extensions) + + const model = this.getModel('yank-note://system/blank.md', '') + this.editor = window.monaco.editor.create(window.document.getElementById('editor'), { - value: this.value, - language: 'markdown', + value: '', theme: 'vs-dark', fontSize: 18, wordWrap: false, @@ -73,23 +95,14 @@ export default { scrollbar: { vertical: 'hidden', verticalScrollbarSize: 0 - } + }, + model, }) this.editor.onDidChangeCursorSelection(e => { this.$emit('change-document', this.getDucumentInfo()) }) - this.editor.onDidChangeModelContent(e => { - let val = this.getValue() - const eol = this.editor.getModel().getEOL() - if (!val.endsWith(eol)) { - val += eol - this.setValue(val) - } - this.$emit('change', val) - }) - this.editor.onDidScrollChange(e => { const line = this.editor.getVisibleRanges()[0].startLineNumber const top = this.editor.getScrollTop() @@ -248,11 +261,12 @@ export default { getValue () { return this.editor.getModel().getValue(window.monaco.editor.DefaultEndOfLine.LF) }, - setValue (val) { - this.editor.getModel().setValue(val) + setModel (uri, value) { + const model = this.getModel(uri, value || '') + this.editor.setModel(model) }, replaceValue (oldValue, newValue) { - this.setValue(this.getValue().replace(oldValue, newValue)) + this.editor.getModel().setValue(this.getValue().replace(oldValue, newValue)) }, getDucumentInfo () { const selection = this.editor.getSelection() @@ -269,7 +283,7 @@ export default { const isWrapping = this.editor.getConfiguration().wrappingInfo.isViewportWrapping this.editor.updateOptions({ wordWrap: !isWrapping }) } - } + }, } diff --git a/frontend/src/components/Preview.vue b/frontend/src/components/Preview.vue index a968ca63..3a18bba3 100644 --- a/frontend/src/components/Preview.vue +++ b/frontend/src/components/Preview.vue @@ -115,7 +115,11 @@ export default { }, 1000, { leading: true }) this.render = _.debounce(() => { - this.$refs.view.innerHTML = markdown.render(this.replaceRelativeLink(this.currentContent)) + // 编辑非 markdown 文件预览直接显示代码 + const content = (this.filePath || '').endsWith('.md') + ? this.currentContent + : '```' + file.extname(this.fileName || '').replace(/^\./, '') + '\n' + this.currentContent + '```' + this.$refs.view.innerHTML = markdown.render(this.replaceRelativeLink(content)) MarkdownItECharts.update() this.runAppletScriptDebounce() this.initDrawio() diff --git a/frontend/src/components/TreeNode.vue b/frontend/src/components/TreeNode.vue index b2429268..803f9a14 100644 --- a/frontend/src/components/TreeNode.vue +++ b/frontend/src/components/TreeNode.vue @@ -43,6 +43,7 @@