From 898eaa1029293cc9f3a33a8bfd4f5707802a7510 Mon Sep 17 00:00:00 2001 From: Shigma <1700011071@pku.edu.cn> Date: Mon, 22 Oct 2018 15:25:11 +0800 Subject: [PATCH 01/47] fix pretty print --- packages/cli/commands/parse.js | 79 +++++++++++++++------------------- 1 file changed, 35 insertions(+), 44 deletions(-) diff --git a/packages/cli/commands/parse.js b/packages/cli/commands/parse.js index c182286..27020e1 100644 --- a/packages/cli/commands/parse.js +++ b/packages/cli/commands/parse.js @@ -4,46 +4,42 @@ const yaml = require('js-yaml') const chalk = require('chalk') const parser = require('@marklet/parser') -function printNode(node, indent = 2, back = 1) { - const space = ' '.repeat(indent - 2 * back) - const prefix = '- '.repeat(back) - if (typeof node === 'string') { - return console.log(prefix + chalk.yellow(node)) +function isObject(node) { + return node === null || typeof node !== 'object' +} + +function prettyPrint(node, indent = 0) { + const space = ' '.repeat(indent) + if (isObject(node)) { + if (typeof node === 'string') { + console.log(chalk.yellowBright(node)) + } else { + console.log(chalk.cyanBright(node)) + } } else if (node instanceof Array) { - return node.forEach((node, index) => { - if (node instanceof Array) { - printNode(node, indent + 2, back + 1) - } else { - process.stdout.write(space + ' '.repeat(index ? back : 1)) - printNode(node, indent + 2, index ? 1 : back) - } + node.forEach((node, index) => { + if (index) process.stdout.write(space) + process.stdout.write('- ') + prettyPrint(node, indent + 1) }) - } - let firstLine = !node.type - if (node.type) { - console.log(chalk.greenBright('# ' + node.type)) - } - for (const key in node) { - if (key === 'type') continue - if (firstLine) { - process.stdout.write(prefix) - firstLine = false - } else { - process.stdout.write(space + ' ') + } else { + let firstLine = !node.type + if (node.type) { + console.log(chalk.redBright('\b\b# ' + node.type)) } - process.stdout.write(chalk`{cyanBright ${key}}: `) - if (typeof node[key] === 'string') { - console.log(chalk.yellow(node[key])) - } else if (typeof node[key] !== 'object') { - console.log(chalk.magentaBright(node[key])) - } else { - process.stdout.write('\n') - if (node[key] instanceof Array) { - printNode(node[key], indent + 2 * back, 1) + for (const key in node) { + if (key === 'type') continue + if (!firstLine) { + process.stdout.write(space) } else { - process.stdout.write(space + ' ') - printNode(node[key], indent + 2 * back - 2, 0) + firstLine = false } + process.stdout.write(chalk.magentaBright(key) + ': ') + if (!isObject(node[key])) { + process.stdout.write('\n' + space) + if (node[key] instanceof Array) process.stdout.write(' ') + } + prettyPrint(node[key], indent + 1) } } } @@ -69,17 +65,12 @@ module.exports = program => program }, }) if (this.pretty) { - result.forEach(node => printNode(node)) - return - } - switch (this.format || 'json') { - case 'json': + prettyPrint(result) + } else if (this.format === 'json' || !this.format) { console.log(JSON.stringify(result, null, indent)) - break - case 'yaml': + } else if (this.format === 'yaml') { console.log(yaml.safeDump(result, { indent })) - break - default: + } else { util.handleError(this.format + ' is not a supported format.') } }) From 82300b12fd568cd8d2cbce9fb4a3fb8e1de57ac8 Mon Sep 17 00:00:00 2001 From: Shigma <1700011071@pku.edu.cn> Date: Mon, 22 Oct 2018 15:47:30 +0800 Subject: [PATCH 02/47] add some bindings --- packages/dev-server/comp/menu/command.json | 3 +++ packages/dev-server/comp/menu/menu-item.vue | 10 ++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/dev-server/comp/menu/command.json b/packages/dev-server/comp/menu/command.json index 04bf83c..7b3d065 100644 --- a/packages/dev-server/comp/menu/command.json +++ b/packages/dev-server/comp/menu/command.json @@ -24,6 +24,7 @@ "arguments": "explorer", "key": "trigger-explorer", "name": "资源管理器", + "bind": "ctrl+k ctrl+r", "checked": "$display.explorer.show" }, { @@ -31,6 +32,7 @@ "arguments": "editor", "key": "trigger-editor", "name": "编辑器视图", + "bind": "ctrl+k ctrl+e", "checked": "$display.editor.show" }, { @@ -38,6 +40,7 @@ "arguments": "document", "key": "trigger-document", "name": "预览视图", + "bind": "ctrl+k ctrl+d", "checked": "$display.document.show" }, { diff --git a/packages/dev-server/comp/menu/menu-item.vue b/packages/dev-server/comp/menu/menu-item.vue index 2305989..1479015 100644 --- a/packages/dev-server/comp/menu/menu-item.vue +++ b/packages/dev-server/comp/menu/menu-item.vue @@ -31,20 +31,22 @@ module.exports = { diff --git a/packages/dev-server/comp/menu/menus.json b/packages/dev-server/comp/menu/menus.json index f27d715..766412e 100644 --- a/packages/dev-server/comp/menu/menus.json +++ b/packages/dev-server/comp/menu/menus.json @@ -2,51 +2,51 @@ "menubar": [ { "key": "file", - "name": "文件", - "bind": "F", + "caption": "文件", + "mnemonic": "F", "content": [ - "open-file", + { "command": "open-file", "mnemonic": "O" }, "@separator", - "save", - "save-as", - "save-all" + { "command": "save", "mnemonic": "S" }, + { "command": "save-as", "mnemonic": "" }, + { "command": "save-all", "mnemonic": "" } ] }, { "key": "edit", - "name": "编辑", - "bind": "E", + "caption": "编辑", + "mnemonic": "E", "content": [ - "undo", - "redo", + { "command": "undo", "mnemonic": "" }, + { "command": "redo", "mnemonic": "" }, "@separator", - "cut", - "copy", - "paste", + { "command": "cut", "mnemonic": "" }, + { "command": "copy", "mnemonic": "" }, + { "command": "paste", "mnemonic": "" }, "@separator", - "find", - "find-next", - "find-previous" + { "command": "find", "mnemonic": "" }, + { "command": "find-next", "mnemonic": "" }, + { "command": "find-previous", "mnemonic": "" } ] }, { "key": "view", - "name": "视图", - "bind": "V", + "caption": "视图", + "mnemonic": "V", "content": [ - "trigger-explorer", - "trigger-editor", - "trigger-document", + { "command": "trigger-explorer", "mnemonic": "" }, + { "command": "trigger-editor", "mnemonic": "" }, + { "command": "trigger-document", "mnemonic": "" }, "@separator", "@themes" ] }, { "key": "link", - "name": "链接", - "bind": "L", + "caption": "链接", + "mnemonic": "L", "content": [ - "open-repository" + { "command": "open-repository", "mnemonic": "" } ] } ] diff --git a/packages/dev-server/src/server.ts b/packages/dev-server/src/server.ts index 2701b36..f5ebdb7 100644 --- a/packages/dev-server/src/server.ts +++ b/packages/dev-server/src/server.ts @@ -44,8 +44,8 @@ class MarkletServer { constructor(type: T, options: ServerOptions = {}) { this.type = type - this.filepath = options.filepath this.config = options.config || {} + this.filepath = options.filepath || '' this.port = options.port || DEFAULT_PORT this.sourceType = options.sourceType || 'file' From c271c7e35f748d12b0425b26e3de1365c0a96051 Mon Sep 17 00:00:00 2001 From: Shigma <1700011071@pku.edu.cn> Date: Wed, 24 Oct 2018 16:14:30 +0800 Subject: [PATCH 12/47] structure change to menus.json --- packages/dev-server/comp/app.vue | 4 +- packages/dev-server/comp/menu/index.js | 33 +++++------ .../dev-server/comp/menu/menu-manager.vue | 2 +- packages/dev-server/comp/menu/menu-view.vue | 10 +--- packages/dev-server/comp/menu/menus.json | 55 ++++++++++--------- 5 files changed, 50 insertions(+), 54 deletions(-) diff --git a/packages/dev-server/comp/app.vue b/packages/dev-server/comp/app.vue index 337d710..d57a4e5 100644 --- a/packages/dev-server/comp/app.vue +++ b/packages/dev-server/comp/app.vue @@ -229,9 +229,9 @@ module.exports = {
diff --git a/packages/dev-server/comp/menu/index.js b/packages/dev-server/comp/menu/index.js index 0424e19..a6e9153 100644 --- a/packages/dev-server/comp/menu/index.js +++ b/packages/dev-server/comp/menu/index.js @@ -14,16 +14,15 @@ for (const command of require('./command.json')) { commands[key] = command } -const menus = require('./menus.json') const menuData = {} -const menuKeys = Object.keys(menus) -for (const key of menuKeys) { - menuData[key] = { - show: false, - content: menus[key], - embed: new Array(menus[key].length).fill(false) +require('./menus.json').forEach(function traverse(menu) { + if (menu.children) { + menuData[menu.key] = menu + menuData[menu.key].show = false + menuData[menu.key].current = null } -} +}) +const menuKeys = Object.keys(menuData) module.exports = { components: { @@ -57,9 +56,9 @@ module.exports = { }) } this.menuReference = {} - for (let index = 0; index < menuKeys.length; index++) { - this.menuReference[menuKeys[index]] = this.$refs.menus.$el.children[index] - } + menuKeys.forEach((key, index) => { + this.menuReference[key] = this.$refs.menus.$el.children[index] + }) }, methods: { @@ -92,9 +91,7 @@ module.exports = { this.menubarActive = false for (const key in this.menuData) { this.menuData[key].show = false - for (let index = 0; index < this.menuData[key].embed.length; index++) { - this.menuData[key].embed.splice(index, 1, false) - } + this.menuData[key].current = null } }, showContextMenu(key, event) { @@ -118,7 +115,7 @@ module.exports = { } }, hoverMenu(index, event) { - if (this.menubarActive && !this.menuData.menubar.embed[index]) { + if (this.menubarActive && this.menuData.menubar.current !== index) { this.showMenu(index, event) } }, @@ -130,11 +127,11 @@ module.exports = { }, showMenu(index, event) { const style = this.menuReference.menubar.style - const last = this.menuData.menubar.embed.indexOf(true) + const last = this.menuData.menubar.current if (last === index) { this.menubarActive = false this.menuData.menubar.show = false - this.menuData.menubar.embed.splice(index, 1, false) + this.menuData.menubar.current = null return } else if (last === -1) { this.menubarMove = 0 @@ -145,7 +142,7 @@ module.exports = { this.locateMenuAtButton(event, style) this.menubarActive = true this.menuData.menubar.show = true - this.menuData.menubar.embed.splice(index, 1, true) + this.menuData.menubar.current = index }, locateMenuAtButton(event, style) { const rect = event.currentTarget.getBoundingClientRect() diff --git a/packages/dev-server/comp/menu/menu-manager.vue b/packages/dev-server/comp/menu/menu-manager.vue index 0d3c409..432e38a 100644 --- a/packages/dev-server/comp/menu/menu-manager.vue +++ b/packages/dev-server/comp/menu/menu-manager.vue @@ -14,7 +14,7 @@ module.exports = {
+ :data="data[key].children" :current="data[key].current"/>
diff --git a/packages/dev-server/comp/menu/menu-view.vue b/packages/dev-server/comp/menu/menu-view.vue index 5f87ae8..8056b45 100644 --- a/packages/dev-server/comp/menu/menu-view.vue +++ b/packages/dev-server/comp/menu/menu-view.vue @@ -3,15 +3,11 @@ module.exports = { name: 'marklet-menu-view', inject: ['commands', '$menu'], - props: ['data', 'embed'], + props: ['data', 'current'], components: { MarkletMenuList: require('./menu-list.vue'), MarkletMenuItem: require('./menu-item.vue'), }, - - created() { - console.log(this.data) - } } @@ -20,8 +16,8 @@ module.exports = {