From bb3ab5598afece2e57e75480d31c0c9321d384ac Mon Sep 17 00:00:00 2001 From: purocean Date: Fri, 3 May 2019 20:56:41 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20vue=20cli=203=20?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/package.json | 1 + frontend/vue.config.js | 7 +++++++ frontend/yarn.lock | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/frontend/package.json b/frontend/package.json index 3e28c930..668c60f6 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -24,6 +24,7 @@ "markdown-it-multimd-table": "^3.1.3", "markdown-it-task-lists": "^2.1.1", "mime-types": "^2.1.24", + "monaco-editor": "^0.16.2", "normalize.css": "^8.0.1", "socket.io-client": "^2.2.0", "vue": "^2.6.10", diff --git a/frontend/vue.config.js b/frontend/vue.config.js index ad8b72de..ebb07ceb 100644 --- a/frontend/vue.config.js +++ b/frontend/vue.config.js @@ -9,5 +9,12 @@ module.exports = { ws: true } } + }, + chainWebpack: config => { + config.plugin('copy').tap(args => { + args[0][0].from = 'node_modules/monaco-editor/min/vs' + args[0][0].to = 'vs' + return args + }) } } diff --git a/frontend/yarn.lock b/frontend/yarn.lock index ca8d416e..9fb78c95 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -4677,6 +4677,10 @@ mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@ dependencies: minimist "0.0.8" +monaco-editor@^0.16.2: + version "0.16.2" + resolved "https://registry.npm.taobao.org/monaco-editor/download/monaco-editor-0.16.2.tgz#950084ed82eeaef1c8c9d3c1bcab849fe11b2415" + move-concurrently@^1.0.1: version "1.0.1" resolved "http://registry.npm.taobao.org/move-concurrently/download/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" From 58f0b1b62efa0983295b9f786b9e1b817e9b008c Mon Sep 17 00:00:00 2001 From: purocean Date: Fri, 3 May 2019 20:57:38 +0800 Subject: [PATCH 2/8] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=9B=BF=E6=8D=A2?= =?UTF-8?q?=E5=9B=BE=E7=89=87=E9=93=BE=E6=8E=A5=E8=BD=AC=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/components/View.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/components/View.vue b/frontend/src/components/View.vue index caf52c75..738437ea 100644 --- a/frontend/src/components/View.vue +++ b/frontend/src/components/View.vue @@ -215,7 +215,7 @@ export default { const imgFile = new File([blob], 'file.' + mime.extension(r.headers.get('content-type'))) file.upload(this.fileRepo, this.filePath, imgFile, result => { this.$bus.emit('tree-refresh') - this.$bus.emit('editor-replace-value', img.src, result.relativePath) + this.$bus.emit('editor-replace-value', img.src, encodeURI(result.relativePath)) }) }) }) From 5a7324654548e72cb251ef9ea22059f44970a2ac Mon Sep 17 00:00:00 2001 From: purocean Date: Fri, 3 May 2019 20:58:35 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8F=92=E5=85=A5?= =?UTF-8?q?=E6=96=87=E6=A1=A3=E9=93=BE=E6=8E=A5=E5=BF=AB=E6=8D=B7=E9=94=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/components/Editor.vue | 2 ++ frontend/src/components/Filter.vue | 1 - frontend/src/components/Tree.vue | 19 ++++++++++++++++--- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/frontend/src/components/Editor.vue b/frontend/src/components/Editor.vue index 13357dd0..a8ebeecd 100644 --- a/frontend/src/components/Editor.vue +++ b/frontend/src/components/Editor.vue @@ -27,12 +27,14 @@ export default { this.onGotAmdLoader() } window.addEventListener('resize', this.resize) + this.$bus.on('editor-insert-value', this.insert) this.$bus.on('editor-replace-value', this.replaceValue) this.$bus.on('editor-toggle-wrap', this.toggleWrap) }, beforeDestroy () { window.removeEventListener('paste', this.paste) window.removeEventListener('resize', this.resize) + this.$bus.off('editor-insert-value', this.insert) this.$bus.off('editor-replace-value', this.replaceValue) this.$bus.off('editor-toggle-wrap', this.toggleWrap) }, diff --git a/frontend/src/components/Filter.vue b/frontend/src/components/Filter.vue index dba3c425..87313082 100644 --- a/frontend/src/components/Filter.vue +++ b/frontend/src/components/Filter.vue @@ -168,7 +168,6 @@ export default { const file = item || this.selected if (file) { this.$emit('choose-file', file) - this.$bus.emit('choose-file', file) } }, switchTab (tab = null) { diff --git a/frontend/src/components/Tree.vue b/frontend/src/components/Tree.vue index a61378f6..6a6d3cca 100644 --- a/frontend/src/components/Tree.vue +++ b/frontend/src/components/Tree.vue @@ -13,7 +13,7 @@ @delete="onDelete" />
- +
@@ -105,8 +105,21 @@ export default { this.init(null, path) }, keydownHandler (e) { - if (e.key === 'p' && e.ctrlKey) { - this.showFilter = true + if (e.key === 'i' && e.ctrlKey && e.altKey) { + this.showFilter = f => { + if (this.file) { + const relativePath = f.path.replace(this.file.path.substr(0, this.file.path.lastIndexOf('/')), '.') + this.$bus.emit('editor-insert-value', `[${f.name.replace(/\.[^.]$/, '')}](${encodeURI(relativePath)})`) + } + this.showFilter = false + } + e.preventDefault() + e.stopPropagation() + } else if (e.key === 'p' && e.ctrlKey) { + this.showFilter = f => { + this.$bus.emit('choose-file', f) + this.showFilter = false + } e.preventDefault() e.stopPropagation() } else if (e.key === 'Escape' && this.showFilter) { From b9dd34f6728918c27a70f1f6adc4c92669c4b507 Mon Sep 17 00:00:00 2001 From: purocean Date: Fri, 3 May 2019 21:00:35 +0800 Subject: [PATCH 4/8] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 94ba54e6..4781398e 100644 --- a/README.md +++ b/README.md @@ -67,6 +67,7 @@ + `Ctrl + Alt + D` 插入当前日期 + `Ctrl + Alt + T` 插入当前时间 + `Ctrl + Alt + F` 插入文件附件 + + `Ctrl + Alt + I` 插入文档链接 + `Ctrl + J` 连接行 join lines + `Ctrl + K, Ctrl + U` 转换大写 + `Ctrl + K, Ctrl + L` 转换小写 From 37702d06be30251c4a0308fcd30de18e340690f8 Mon Sep 17 00:00:00 2001 From: purocean Date: Fri, 3 May 2019 22:34:05 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E6=90=9C=E7=B4=A2=E5=BF=BD=E7=95=A5=20node?= =?UTF-8?q?=5Fmodules?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/file.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/file.js b/backend/file.js index 33f85339..22930dfc 100644 --- a/backend/file.js +++ b/backend/file.js @@ -187,7 +187,7 @@ exports.search = (repo, str) => { return } - const list = fs.readdirSync(location).filter(x => !x.startsWith('.')) + const list = fs.readdirSync(location).filter(x => !x.startsWith('.') && !ignorePath.test(x)) list.forEach(x => { const p = path.join(location, x) From 17bf26d4790f19d09343550b20bf3234df862678 Mon Sep 17 00:00:00 2001 From: purocean Date: Fri, 3 May 2019 22:34:44 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E7=9B=AE=E5=BD=95=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/package.json | 3 +- frontend/src/components/Filter.vue | 1 + frontend/src/file.js | 5 +++- frontend/yarn.lock | 45 +++++++++++++++++++++++++++--- 4 files changed, 48 insertions(+), 6 deletions(-) diff --git a/frontend/package.json b/frontend/package.json index 668c60f6..e0d66127 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -24,9 +24,10 @@ "markdown-it-multimd-table": "^3.1.3", "markdown-it-task-lists": "^2.1.1", "mime-types": "^2.1.24", - "monaco-editor": "^0.16.2", + "monaco-editor": "^0.13.1", "normalize.css": "^8.0.1", "socket.io-client": "^2.2.0", + "transliteration": "^2.1.3", "vue": "^2.6.10", "vue-bus": "^1.2.1", "vue-router": "^3.0.3", diff --git a/frontend/src/components/Filter.vue b/frontend/src/components/Filter.vue index 87313082..ca7ac41f 100644 --- a/frontend/src/components/Filter.vue +++ b/frontend/src/components/Filter.vue @@ -235,6 +235,7 @@ export default { margin: 0; border: 0; font-size: 18px; + line-height: 1.4em; padding: 6px; box-sizing: border-box; background: #333030; diff --git a/frontend/src/file.js b/frontend/src/file.js index 85846c90..52e41f6a 100644 --- a/frontend/src/file.js +++ b/frontend/src/file.js @@ -1,4 +1,5 @@ import CryptoJS from 'crypto-js' +import { slugify } from 'transliteration' const getCryptKey = () => { const password = window.prompt('请输入密码:') @@ -160,7 +161,9 @@ export default { file.name.substr(file.name.lastIndexOf('.')) const formData = new FormData() - const path = belongPath.replace(/\/([^/]*)$/, '/FILES/$1/' + filename) + const path = belongPath.replace(/\/([^/]*)$/, (match, capture) => { + return `/FILES/${slugify(capture)}/` + filename + }) formData.append('repo', repo) formData.append('path', path) formData.append('attachment', file) diff --git a/frontend/yarn.lock b/frontend/yarn.lock index 9fb78c95..2592e2ff 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -3316,6 +3316,10 @@ get-caller-file@^1.0.1: version "1.0.3" resolved "http://registry.npm.taobao.org/get-caller-file/download/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + get-stream@^3.0.0: version "3.0.0" resolved "http://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" @@ -4677,9 +4681,9 @@ mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@ dependencies: minimist "0.0.8" -monaco-editor@^0.16.2: - version "0.16.2" - resolved "https://registry.npm.taobao.org/monaco-editor/download/monaco-editor-0.16.2.tgz#950084ed82eeaef1c8c9d3c1bcab849fe11b2415" +monaco-editor@^0.13.1: + version "0.13.1" + resolved "https://registry.npm.taobao.org/monaco-editor/download/monaco-editor-0.13.1.tgz#6b9ce20e4d1c945042d256825eb133cb23315a52" move-concurrently@^1.0.1: version "1.0.1" @@ -5053,7 +5057,7 @@ os-homedir@^1.0.0: version "1.0.2" resolved "http://registry.npm.taobao.org/os-homedir/download/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" -os-locale@^3.0.0: +os-locale@^3.0.0, os-locale@^3.1.0: version "3.1.0" resolved "http://registry.npm.taobao.org/os-locale/download/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" dependencies: @@ -5985,6 +5989,10 @@ require-main-filename@^1.0.1: version "1.0.1" resolved "http://registry.npm.taobao.org/require-main-filename/download/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + require-uncached@^1.0.3: version "1.0.3" resolved "http://registry.npm.taobao.org/require-uncached/download/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" @@ -6805,6 +6813,12 @@ tough-cookie@~2.4.3: psl "^1.1.24" punycode "^1.4.1" +transliteration@^2.1.3: + version "2.1.3" + resolved "https://registry.npm.taobao.org/transliteration/download/transliteration-2.1.3.tgz#1406f3d3038723c4720493f3c63ff0d85a8b9db7" + dependencies: + yargs "^13.1.0" + trim-right@^1.0.1: version "1.0.1" resolved "http://registry.npm.taobao.org/trim-right/download/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" @@ -7353,6 +7367,13 @@ yargs-parser@^11.1.1: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^13.0.0: + version "13.0.0" + resolved "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-13.0.0.tgz#3fc44f3e76a8bdb1cc3602e860108602e5ccde8b" + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + yargs@12.0.5: version "12.0.5" resolved "http://registry.npm.taobao.org/yargs/download/yargs-12.0.5.tgz?cache=0&other_urls=http%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" @@ -7370,6 +7391,22 @@ yargs@12.0.5: y18n "^3.2.1 || ^4.0.0" yargs-parser "^11.1.1" +yargs@^13.1.0: + version "13.2.2" + resolved "https://registry.npm.taobao.org/yargs/download/yargs-13.2.2.tgz#0c101f580ae95cea7f39d927e7770e3fdc97f993" + dependencies: + cliui "^4.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + os-locale "^3.1.0" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.0.0" + yeast@0.1.2: version "0.1.2" resolved "http://registry.npm.taobao.org/yeast/download/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" From 68c7edaf5166e331850fb88bc28bf9599bb3ff71 Mon Sep 17 00:00:00 2001 From: purocean Date: Mon, 20 May 2019 13:06:45 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=B2=98=E8=B4=B4?= =?UTF-8?q?=E5=AF=8C=E6=96=87=E6=9C=AC=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + frontend/package.json | 1 + frontend/src/components/Editor.vue | 36 +++++- frontend/yarn.lock | 193 +++++++++++++++++++++++++++-- 4 files changed, 219 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 4781398e..477ad31a 100644 --- a/README.md +++ b/README.md @@ -72,6 +72,7 @@ + `Ctrl + K, Ctrl + U` 转换大写 + `Ctrl + K, Ctrl + L` 转换小写 + `Ctrl + Alt + R` 在内置终端里面运行选中内容 + + `Ctrl + B + V` 粘贴 html 富文本 ## 特色功能 + 同步预览滚动,实现得较粗糙 diff --git a/frontend/package.json b/frontend/package.json index e0d66127..53ab43e3 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -28,6 +28,7 @@ "normalize.css": "^8.0.1", "socket.io-client": "^2.2.0", "transliteration": "^2.1.3", + "turndown": "^5.0.3", "vue": "^2.6.10", "vue-bus": "^1.2.1", "vue-router": "^3.0.3", diff --git a/frontend/src/components/Editor.vue b/frontend/src/components/Editor.vue index a8ebeecd..f562c5ad 100644 --- a/frontend/src/components/Editor.vue +++ b/frontend/src/components/Editor.vue @@ -5,6 +5,9 @@