From 6ac30f3b8b13e8e1c67f1a819d660658e084e4c5 Mon Sep 17 00:00:00 2001 From: shaoying Date: Tue, 20 Oct 2020 21:26:22 +0800 Subject: [PATCH] opt vimer --- chrome/spided.js | 4 +- frame.js | 8 +-- lib/page.js | 2 +- pane/Search.js | 12 ++-- plugin/input/city.js | 2 +- plugin/input/key.js | 2 +- plugin/local/code/inner.css | 43 +++++-------- plugin/local/code/inner.js | 82 ++++++++++++------------ plugin/local/code/vimer.css | 31 ++++++--- plugin/local/code/vimer.js | 123 +++++++++++++++++++----------------- plugin/local/wiki/data.js | 2 +- plugin/local/wiki/draw.js | 8 +-- plugin/local/wiki/feel.js | 2 +- plugin/local/wiki/walk.js | 2 +- plugin/local/wiki/word.js | 2 +- plugin/story/paste.js | 4 +- plugin/story/spide.js | 2 +- plugin/story/trend.js | 4 +- plugin/table.js | 6 +- proto.js | 10 ++- 20 files changed, 187 insertions(+), 164 deletions(-) diff --git a/chrome/spided.js b/chrome/spided.js index c89ccc89..a9925655 100644 --- a/chrome/spided.js +++ b/chrome/spided.js @@ -2,8 +2,8 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, can.ui = can.page.Append(can, can._target, [ {view: ["content", "div"]}, {view: ["display", "pre"]}, ]) - can.onappend.table(can, can.ui.content, "table", msg) - can.onappend.board(can, can.ui.display, "board", msg) + can.onappend.table(can, msg, can.ui.content, "table") + can.onappend.board(can, msg,can.ui.display, "board") var refresh = msg.Option("_refresh") || can.Conf("feature")["_refresh"] refresh && can.Timer(refresh, function() { can.run({}) diff --git a/frame.js b/frame.js index db7edda3..1d499c21 100644 --- a/frame.js +++ b/frame.js @@ -158,7 +158,7 @@ Volcanos("onengine", {help: "解析引擎", list: [], _init: function(can, meta, "studio": {name: "研发 studio", action: [ {name: "route", help: "路由器", index: "web.route"}, {name: "tmux", help: "命令行", index: "web.code.tmux.session"}, - {name: "vimer", help: "编辑器", index: "web.code.inner", args: ["src/", "main.go"]}, + {name: "vimer", help: "编辑器", index: "web.code.vimer", args: ["src/", "main.go"]}, {name: "repos", help: "代码库", index: "web.code.git.status"}, {name: "total", help: "统计量", index: "web.code.git.total"}, {name: "plan", help: "任务表", index: "web.team.plan"}, @@ -489,10 +489,10 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, item.type == "select" && item.value && (target.value = item.value) return target }, - table: function(can, target, type, msg, cb) { - return can.page.AppendTable(can, target, msg, msg.append, cb) + table: function(can, msg, target, type, cb) { + return can.page.AppendTable(can, msg, target, msg.append, cb) }, - board: function(can, target, type, msg, text) { text = text || can.page.Display(msg.Result()) + board: function(can, msg, target, type, text) { text = text || can.page.Display(msg.Result()) return text && can.page.Append(can, target, [{view: ["code", "div", text]}]).code }, diff --git a/lib/page.js b/lib/page.js index 9d1ff97c..92fb1c8c 100644 --- a/lib/page.js +++ b/lib/page.js @@ -192,7 +192,7 @@ var page = Volcanos("page", {help: "网页模块", return status }, - AppendTable: shy("添加表格", function(can, target, msg, list, cb) { + AppendTable: shy("添加表格", function(can, msg, target, list, cb) { if (!msg.append || msg.append.length == 0) {return} var table = can.page.Append(can, target, "table"); diff --git a/pane/Search.js b/pane/Search.js index eb92a227..d12f4ea8 100644 --- a/pane/Search.js +++ b/pane/Search.js @@ -12,21 +12,21 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, meta, can.run(msg._event, ["search", "River.onexport.key"]) can.run(msg._event, cmd, function(msg) { - can.onappend.table(can, can.ui.content, "table", msg, function(value, key, index, line) { + can.onappend.table(can, msg, can.ui.content, "table", function(value, key, index, line) { return {text: [value, "td"], onclick: function(event) { can.Status("index", index) can.Status("value", value) can.run(event, ["render", line.type, line.name, line.text], function(msg) { can.ui.display.innerHTML = "" - can.onappend.table(can, can.ui.display, "table", msg) - can.onappend.board(can, can.ui.display, "board", msg) + can.onappend.table(can, msg, can.ui.display, "table") + can.onappend.board(can, msg, can.ui.display, "board") }) }} ca.run(event, [""]) }) can.Status("count", msg.append && msg.append[0] && msg[msg.append[0]].length || 0) - can.onappend.board(can, can.ui.content, "board", msg) + can.onappend.board(can, msg, can.ui.content, "board") }) }, @@ -34,7 +34,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, meta, function search(word) { cmd[1] = word || "" var ev = {}; var res = can.request(ev); res.Copy(msg) can.run(ev, cmd, function(res) { can.ui.content.innerHTML = "" - can.onappend.table(can, can.ui.content, "table", res, function(value, key, index, line) { + can.onappend.table(can, res, can.ui.content, "table", function(value, key, index, line) { can.Status("count", index+1) return {text: [value, "td"], onclick: function(event) { typeof cb == "function" && cb(line) @@ -60,7 +60,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, meta, select: function(can, msg, cmd, cb) { can._output.innerHTML = "" function search(word, cb) { cmd[1] = word can.run({}, cmd, function(msg) { can.ui.content.innerHTML = "" - can.onappend.table(can, can.ui.content, "table", msg, function(value, key, index, line) { + can.onappend.table(can, msg, can.ui.content, "table", function(value, key, index, line) { can.Status("count", index+1) return {text: [value, "td"], onclick: function(event) { can.Status("index", index) diff --git a/plugin/input/city.js b/plugin/input/city.js index 0201fccf..c21db1e3 100644 --- a/plugin/input/city.js +++ b/plugin/input/city.js @@ -2,7 +2,7 @@ Volcanos("onfigure", {help: "控件详情", list: [], city: {click: function(event, can, value, cmd, target, figure) { function run() {figure.output.innerHTML = "" can.Run(event, ["action", "input", can.item.name, target.value], function(msg) { - can.page.AppendTable(can, figure.output, msg, msg.append, function(event, value, key, index, tr, td) { + can.page.AppendTable(can, msg, figure.output, msg.append, function(event, value, key, index, tr, td) { target.value = value; msg.Option("_refresh") && run() }) }, true) diff --git a/plugin/input/key.js b/plugin/input/key.js index ee215191..cbe753b4 100644 --- a/plugin/input/key.js +++ b/plugin/input/key.js @@ -23,7 +23,7 @@ Volcanos("onfigure", {help: "控件详情", list: [], _init: function(can, item, {button: ["关闭", function(event) { can.page.Remove(can, can._figure.fieldset) }]}, ]) - can.page.AppendTable(can, can._figure.output, msg, msg.append, function(value, key, index, line) { + can.page.AppendTable(can, msg, can._figure.output, msg.append, function(value, key, index, line) { return {type: "td", inner: value, onclick: function() { target.value = value; msg.Option("_refresh") && run() can.page.Remove(can, can._figure.fieldset) diff --git a/plugin/local/code/inner.css b/plugin/local/code/inner.css index 892d4732..57a42799 100644 --- a/plugin/local/code/inner.css +++ b/plugin/local/code/inner.css @@ -1,3 +1,6 @@ +fieldset.editor>form.option div.item input.args[name=line] { + width:40px; +} fieldset.editor>div.action>div.file { border:solid 2px red; padding:2px; float:left; margin:2px 0; @@ -7,19 +10,9 @@ fieldset.editor>div.action>div.file.over { background-color:blue; } fieldset.editor>div.action>div.file.select { - background-color:green; - color:white; -} -fieldset.editor>form.option div.item input.args[name=line] { - width:40px; + background-color:green; color:white; } -body.white fieldset.editor div.output table { - background:#0b2c5400; -} -body.white fieldset.editor div.output table tr { - background:#0b2c5400; -} fieldset.editor { background:#0b2c54ab; } @@ -52,18 +45,13 @@ fieldset.editor>div.output div.project div.item:hover { fieldset.editor>div.output div.project div.list { padding-left:10px; } - fieldset.editor>div.output div.profile { padding:0; margin:0; position:relative; } + fieldset.editor>div.output table.content { font-size:16px; font-family:monospace; - padding:0; margin:0; -} -fieldset.editor>div.output table.content tr { - padding:0; margin:0; - /* background-color:#06062700; */ } fieldset.editor>div.output table.content tr.select td.line { background-color:red; @@ -104,26 +92,25 @@ fieldset.editor>div.output table.content td.text span.string { color:magenta; } -fieldset.editor>div.output div.display div.output { - overflow:auto; - color:white; -} - fieldset.editor>div.output div.search { background-color:#060627ab; color:white; padding:6px; border:solid 1px red; - clear:both; - color:white; -} -fieldset.editor>div.output div.search table { color:white; } fieldset.editor>div.output div.search div.tags { - height:220px; overflow:auto; - text-align:left; + text-align:left; overflow:auto; } fieldset.editor>div.output div.search td>div { max-height:100px; overflow:hidden; } +body.white fieldset.editor div.output table { + background:#0b2c5400; color:white; +} +body.white fieldset.editor div.output table tr { + background:#0b2c5400; +} +body.white fieldset.editor div.output div.search table { + background:#0b2c5400; color:white; +} diff --git a/plugin/local/code/inner.js b/plugin/local/code/inner.js index 60372ff2..9e7ac344 100644 --- a/plugin/local/code/inner.js +++ b/plugin/local/code/inner.js @@ -1,13 +1,11 @@ -Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb, target) { +Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb, target) { if (!msg.cmds) { return } can.ui = can.page.Appends(can, target, [ {type: "table", list: [{type: "tr", list: [ - {type: "td", list: [{view: "project", style: {"max-height": window.innerHeight-300, display: "none"}} ]}, - {type: "td", list: [{view: "profile", style: {"max-height": window.innerHeight-300}, list: [ - {view: ["content", "table"]}, - ]} ], style: {"min-width": parseInt(can.Conf("width"))-100, "max-width": parseInt(can.Conf("width"))-60}, - }, - ]}, - ]}, + {type: "td", list: [{view: "project", style: {"max-height": window.innerHeight-480, display: "none"}} ]}, + {type: "td", list: [{view: "profile", style: {"max-height": window.innerHeight-480}, list: [ + {view: ["content", "table"]}, + ]}], style: {"min-width": parseInt(can.Conf("width"))-120, "max-width": parseInt(can.Conf("width"))-60}}, + ]}, ]}, {view: "search", style: {display: "none"}, list: [{view: "action", list: [ {input: ["word", function(event) { if (event.key == "Enter") { @@ -27,20 +25,19 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb, can.page.Modify(can, can.ui.search, {style: {display: "none"}}) }]}, ]}, - {view: "tags"}, + {view: "tags", style: {"max-height": 160}}, ]}, ]) + typeof cb == "function" && cb(msg) can.history = can.history || [] + can.tabview = {}, can.tabview[can.Option("path")+can.Option("file")] = msg msg.Option({path: can.Option("path"), file: can.Option("file"), line: can.Option("line")||1}) can.onimport.tabview(can, can.Option("path"), can.Option("file"), can.Option("line")||1) - return typeof cb == "function" && cb(msg) + can.onimport.project(can, can.Option("path")) }, tabview: function(can, path, file, line, cb) { - var push = {path: path, file: file, line: line} - can.core.Eq(can.history[can.history.length-1], push) || can.history.push(push) - function show() { can._msg && can._msg.Option("line", can.Option("line")) can._msg = can.tabview[path+file] @@ -91,7 +88,7 @@ Volcanos("onsyntax", {help: "语法高亮", list: ["keyword", "prefix", "line"], var cache = false; can.core.List(["content"], function(item) { var p = can.Cache(can.file+item, can.ui[item]); if (p != undefined) { cache = true can.ui.profile.parentNode.scrollTo(0, p.scrollTop) - can.onaction.selectLine(can, p.current.target) + can.onaction.selectLine(can, p.current.line) can.max = p.max } }); if (cache) { return } @@ -136,10 +133,11 @@ Volcanos("onaction", {help: "控件交互", list: [], "返回": function(event, can) { var last = can.history.pop(); last = can.history.pop() last && can.onimport.tabview(can, last.path, last.file, last.line) + can.Status("跳转数", can.history.length) }, project: function(event, can) { can.page.Toggle(can, can.ui.project, function() { - can.onimport.project(can, can.Option("path")) + // can.onimport.project(can, can.Option("path")) }) }, search: function(event, can) { @@ -149,8 +147,8 @@ Volcanos("onaction", {help: "控件交互", list: [], }, appendLine: function(can, value) { var index = ++can.max - var line = can.page.Append(can, can.ui.content, [{type: "tr", list: [{view: ["line", "td", index], onclick: function(event) { - can.onaction.selectLine(can, line) + var ui = can.page.Append(can, can.ui.content, [{type: "tr", list: [{view: ["line", "td", index], onclick: function(event) { + can.onaction.selectLine(can, ui.tr) }, ondblclick: function(event) { can.user.input(event, can, [ @@ -171,18 +169,19 @@ Volcanos("onaction", {help: "控件交互", list: [], typeof p == "object"? can.page.Appends(can, td, [p]): td.innerHTML = p }, onclick: function(event) { - can.onaction.selectLine(can, line) + can.onkeymap && can.onkeymap._mode(can, "insert") + can.onaction.selectLine(can, ui.tr) }, ondblclick: function(event) { - return - var s = document.getSelection() - var str = s.baseNode.data - var begin = str.indexOf(s.toString()) - var end = begin+s.toString().length - s = s.toString() + var str = ui.text.innerText + var s = document.getSelection().toString() + var begin = str.indexOf(s) + var end = begin+s.length + for (var i = begin; i >= 0; i--) { - if (!str[i].match(/[a-zA-Z0-9.]/)) { - s = str.slice(i+1, end) + if (str[i].match(/[a-zA-Z0-9_.]/)) { + s = str.slice(i, end) + } else { break } } @@ -194,8 +193,8 @@ Volcanos("onaction", {help: "控件交互", list: [], } can.onaction.searchLine(event, can, s) - }} ] }]).tr - return line + }} ] }]) + return ui.tr }, rerankLine: function(can, value) { can.max = 0 can.page.Select(can, can.ui.content, "tr", function(item, index) { @@ -218,30 +217,34 @@ Volcanos("onaction", {help: "控件交互", list: [], can.page.Select(can, can.ui.content, "tr", function(item, index) { can.page.ClassList.del(can, item, "select") if (item != line && index+1 != line) { return } + can.page.ClassList.add(can, item, "select") + line = item + can.Option("line", index+1) can.Status("文件名", can.file) can.Status("解析器", can.parse) can.Status("当前行", can.onexport.position(can, index+1)) - can.page.ClassList.add(can, item, "select") - can.Option("line", index+1) - line = item }) - can.page.Select(can, line, "td.text", function(item) { + typeof line == "object" && can.page.Select(can, line, "td.text", function(item) { can.current = { scroll: function(x, y) { return can.ui.profile.parentNode.scrollBy(x, y) }, offset: function() { return can.ui.profile.parentNode.scrollTop }, window: function() { return can.ui.profile.parentNode.offsetHeight }, height: function() { return line.offsetHeight }, + prev: function() { return line.previousSibling }, next: function() { return line.nextSibling }, - text: function(text) { + line: line, text: function(text) { text != undefined && can.onaction.modifyLine(can, line, text) return item.innerText }, - target: line, } + var push = {path: can.Option("path"), file: can.Option("file"), line: can.Option("line")} + can.core.Eq({path: push.path, file: push.file}, can.history[can.history.length-1]) || can.history.push(push) + can.Status("跳转数", can.history.length) + can.onkeymap && can.onkeymap.selectLine(can, line, item) }) }, @@ -249,15 +252,16 @@ Volcanos("onaction", {help: "控件交互", list: [], can.page.Modify(can, can.ui.search, {style: {display: ""}}) value = can.ui.word.value = value || can.ui.word.value || "main" - var toast = can.user.toast(can, value, "搜索中...", 1000000) - value && can.run(event, ["action", "search", can.parse, value, can.Option("path")], function(msg) { can.ui.tags.innerHTML = "" + var toast = can.user.toast(can, "搜索中...", value, 1000000) + can.run(event, ["action", "search", can.parse, value, can.Option("path")], function(msg) { toast.Close() - can.onappend.table(can, can.ui.tags, "table", msg, function(value, key, index, line) { can.Status("标签数", index+1) + can.ui.tags.innerHTML = "" + can.onappend.table(can, msg, can.ui.tags, "table", function(value, key, index, line) { can.Status("标签数", index+1) value = value.replace("<", "<").replace(">", ">"), value = value.replace("./", "") return {text: ["", "td"], list: [{text: [value, "div"]}], onclick: function(event) { line.line && can.onimport.tabview(can, can.Option("path"), line.file.replace("./", ""), parseInt(line.line), function() { - var pos = can.current.offset()-can.current.target.offsetTop + var pos = can.current.offset()-can.current.line.offsetTop can.current.scroll(0, -pos) }) }} @@ -265,7 +269,7 @@ Volcanos("onaction", {help: "控件交互", list: [], }, true) }, }) -Volcanos("onexport", {help: "导出数据", list: ["模式", "按键", "文件名", "解析器", "当前行", "标签数"], +Volcanos("onexport", {help: "导出数据", list: ["解析器", "文件名", "当前行", "跳转数", "标签数"], position: function(can, index, total) { total = total || can.max return (parseInt(index))+"/"+parseInt(total)+" = "+parseInt((index)*100/total)+"%" }, diff --git a/plugin/local/code/vimer.css b/plugin/local/code/vimer.css index 23860394..23ed69bc 100644 --- a/plugin/local/code/vimer.css +++ b/plugin/local/code/vimer.css @@ -20,20 +20,16 @@ fieldset.editor>div.output input.editor.normal { fieldset.editor>div.output input.editor.command { display:none; } -fieldset.editor>div.output input.command { - clear:both; - padding:0; margin:0; - font-size:16px; font-family:monospace; - padding-left:12px; +fieldset.editor>div.output input.command { + margin:0; padding:0 12px; + font-size:16px; font-family:monospace; background-color:black; color:white; caret-color:red; + min-width:480px; border:solid 1px red; border-left:solid 3px green; - z-index:200; - min-width:480px; - display:block; } fieldset.editor>div.output input.command.normal { display:none; @@ -41,3 +37,22 @@ fieldset.editor>div.output input.command.normal { fieldset.editor>div.output input.command.insert { display:none; } + +fieldset.editor>div.output div.display { + border:solid 2px greenyellow; + padding:6px; +} +fieldset.editor>div.output div.display div.action { + padding-left:6px; +} +fieldset.editor>div.output div.display div.output { + padding:0; border:0; overflow:auto; + color:white; +} +fieldset.editor>div.output div.display input.cmd { + font-size:16px; font-family:monospace; + background-color:black; color:white; + min-width:480px; +} + + diff --git a/plugin/local/code/vimer.js b/plugin/local/code/vimer.js index 8be893f1..c2264fc1 100644 --- a/plugin/local/code/vimer.js +++ b/plugin/local/code/vimer.js @@ -1,6 +1,8 @@ -Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { +Volcanos("onimport", {help: "导入数据", list: [], _merge: function(can, sub) { + can.onimport.inner_init = sub._init + }, _init: function(can, msg, list, cb, target) { can.require(["/plugin/local/code/inner.js"], function(can) { - can.onimport._init(can, msg, list, function() { + can.onimport.inner_init(can, msg, list, function() { var ui = can.page.Append(can, can.ui.profile, [ {view: ["editor", "input"], onkeydown: function(event) { can.onkeymap.parse(event, can, "insert") @@ -17,51 +19,47 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, {view: ["command", "input"], onkeydown: function(event) { can.onkeymap.parse(event, can, "command") }}, - ]); can.core.Copy(can.ui, ui, "editor", "command"), can.onkeymap._init(can, "insert") + ]); can.core.Copy(can.ui, ui, "editor", "command") var ui = can.page.Append(can, target, [ - {view: "display", style: {display: "none"}, list: [{view: "action", list: [ - {button: ["关闭", function(event) { - can.page.Modify(can, can.ui.display, {style: {display: "none"}}) - } ]}, - ]}, - {view: "output", style: {"max-height": "200"}}, + {view: "display", style: {display: "none"}, list: [ + {view: "action", list: [ + {input: ["cmd", function(event) { + can.onkeymap.parse(event, can, "command") + }], value: "", onfocus: function(event) { + event.target.setSelectionRange(0, -1) + }}, + {button: ["执行", function(event) { + can.onkeymap.command.Enter(event, can, can.ui.cmd.value) + }]}, + {button: ["关闭", function(event) { + can.page.Modify(can, can.ui.display, {style: {display: "none"}}) + } ]}, + ]}, + {view: "output", style: {"max-height": 160}}, ]}, - ]); can.core.Copy(can.ui, ui, "display", "output") + ]); can.core.Copy(can.ui, ui, "display", "output", "cmd") typeof cb == "function" && cb() + can.keylist = [], can.onkeymap._init(can, "insert") }, target) }) }, }, ["/plugin/local/code/vimer.css"]) Volcanos("onaction", {help: "控件交互", list: [], - _merge: function(can, sub) { for (var k in sub) { - can.onaction.hasOwnProperty(k) || (can.onaction[k] = sub[k]) - }; return true }, - save: function(event, can) { var msg = can.request(event); msg.Option("content", can.onexport.content(can)) can.run(event, ["action", "save", can.parse, can.Option("file"), can.Option("path")], function(msg) { can.user.toast(can, "保存成功") }, true) }, - "编辑": function(event, can) { can.onkeymap && can.onkeymap._insert(can) }, - "刷新": function(event, can) { - can.run(event, [can.Option("path"), can.Option("file")]) + display: function(event, can) { + can.page.Toggle(can, can.ui.display, function() { + // can.onimport.project(can, can.Option("path")) + }) }, - "运行": function(event, can) { - can.page.Modify(can, can.ui.display, {innerHTML: "", style: {display: "none"}}) - can.run(event, ["action", "engine", can.parse, can.Option("file"), can.Option("path")], function(msg) { - (msg.Result() || msg.append && msg.append.length > 0) && can.page.Modify(can, can.ui.display, {innerHTML: "", style: {display: "block"}}) - can.onappend.table(can, can.ui.display, "table", msg) - can.onappend.board(can, can.ui.display, "board", msg) - }, true) - }, - - }) Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert"], _init: function(can, mode) { - can.history = [] can.core.List(can.onkeymap.list, function(item) { var engine = {} can.core.Item(can.onkeymap[item], function(key, cb) { var map = engine for (var i = key.length-1; i > -1; i--) { @@ -77,10 +75,14 @@ Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert" return value }, _command: function(can) { can.onkeymap._mode(can, "command") - can.page.Modify(can, can.ui.command, {style: { - position: "absolute", top: can.current.offset()+can.current.window()-can.current.height(), - }}) - can.ui.command.focus() + if (can.ui.display.style.display == "none") { + can.page.Modify(can, can.ui.command, {style: { + display: "", position: "absolute", top: can.current.offset()+can.current.window()-can.current.height(), + }}) + can.ui.command.focus() + } else { + can.ui.cmd.focus() + } }, _normal: function(can) { can.onkeymap._mode(can, "normal") can.ui.editor.focus() @@ -90,37 +92,38 @@ Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert" }, _remote: function(event, can, key, arg, cb) { - can.page.Modify(can, can.ui.display, {style: {display: "none"}}) + var toast = can.user.toast(can, "执行中...", key, 1000000) var msg = can.request(event); msg.Option("content", can.onexport.content(can)) can.run(event, arg||["action", key, can.parse, can.Option("file"), can.Option("path")], cb||function(msg) { - can.page.Modify(can, can.ui.display, {style: {display: "block"}}) + toast.Close() can.ui.output.innerHTML = "" - can.onappend.table(can, can.ui.output, "table", msg, function(value, key, index) { + can.onappend.table(can, msg, can.ui.output, "table", function(value, key, index) { return {text: [value, "td"]} }) - can.onappend.board(can, can.ui.output, "board", msg) + can.onappend.board(can, msg, can.ui.output, "board") }, true) }, _engine: { e: function(event, can, line, ls) { can.onimport.tabview(can, can.Option("path"), ls[1]) }, - w: function(event, can) { can.onaction["save"](event, can, "save") }, - r: function(event, can) { can.onaction["运行"](event, can, "运行") }, + p: function(event, can) { can.onaction.project(event, can) }, + q: function(event, can) { can.onaction.display(event, can) }, + w: function(event, can) { can.onaction.save(event, can) }, }, parse: function(event, can, mode) { - event.key.length == 1 && can.history.push(event.key); if (can.mode != mode) { + event.key.length == 1 && can.keylist.push(event.key); if (can.mode != mode) { event.stopPropagation(), event.preventDefault() - }; can.mode != "command" && can.Status("按键", can.history.join("")) + }; can.mode != "command" && can.Status("按键", can.keylist.join("")) - for (var pre = 0; pre < can.history.length; pre++) { - if ("0" <= can.history[pre] && can.history[pre] <= "9") { continue } break - }; can.count = parseInt(can.history.slice(0, pre).join(""))||1 + for (var pre = 0; pre < can.keylist.length; pre++) { + if ("0" <= can.keylist[pre] && can.keylist[pre] <= "9") { continue } break + }; can.count = parseInt(can.keylist.slice(0, pre).join(""))||1 function repeat(cb, count) { for (var i = 1; i <= count; i++) { if (cb(event, can, count)) { break } } - can.history.length > 0 && (can.lastcmd = can.history), can.history = [] - can.Status("按键", can.history.join("")) + can.keylist.length > 0 && (can.lastcmd = can.keylist), can.keylist = [] + can.Status("按键", can.keylist.join("")) } var p = can.onsyntax[can.parse] @@ -128,22 +131,28 @@ Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert" return repeat(cb, can.count) } - var map = can.onkeymap[can.mode]._engine; for (var i = can.history.length-1; i > pre-1; i--) { - var cb = map[can.history[i]]; if (typeof cb == "function") { + var map = can.onkeymap[can.mode]._engine; for (var i = can.keylist.length-1; i > pre-1; i--) { + var cb = map[can.keylist[i]]; if (typeof cb == "function") { return repeat(cb, can.count) }; if (typeof cb == "object") { map = cb; continue }; break } }, command: { Escape: function(event, can) { + can.page.Modify(can, can.ui.command, {style: {display: "none"}, value: ""}) can.onkeymap._normal(can) }, - Enter: function(event, can) { var line = can.ui.command.value; var ls = can.core.Split(line, " ", ",", {simple: true}) + Enter: function(event, can) { var line = can.ui.command.value || can.ui.cmd.value ; var ls = can.core.Split(line, " ", ",", {simple: true}) var cb = can.onkeymap._engine[ls[0]]; typeof cb == "function"? cb(event, can, line, ls): can.onkeymap._remote(event, can, line, ["action", "command"].concat(ls)) - can.onkeymap.command.Escape(event, can) + + can.page.Modify(can, can.ui.command, {style: {display: "none"}, value: ""}) + can.page.Modify(can, can.ui.display, {style: {display: ""}}) + can.ui.cmd.value = line, can.ui.cmd.focus() + can.ui.cmd.setSelectionRange(0, -1) + can.ui.output.innerHTML = "" }, - jk: function(event, can) { can.history = can.history.slice(0, -1) + jk: function(event, can) { can.keylist = can.keylist.slice(0, -1) can.onkeymap.command.Enter(event, can) }, }, @@ -153,7 +162,7 @@ Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert" can.onkeymap._command(can) }, ".": function(event, can) { - can.history = can.lastcmd + can.keylist = can.lastcmd can.onkeymap.parse({key: ""}, can, "normal") }, @@ -224,20 +233,20 @@ Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert" can.onaction.selectLine(can, can.onkeymap.insertLine(can, "", can.current.next())) }, O: function(event, can) { can.onkeymap._insert(can) - can.onaction.selectLine(can, can.onkeymap.insertLine(can, "", can.current.target)) + can.onaction.selectLine(can, can.onkeymap.insertLine(can, "", can.current.line)) }, yy: function(event, can) { can.last = can.current.text() }, dd: function(event, can) { can.last = can.current.text() var next = can.current.next() - can.onkeymap.deleteLine(can, can.current.target) + can.onkeymap.deleteLine(can, can.current.line) can.onaction.selectLine(can, next) }, p: function(event, can) { can.onkeymap.insertLine(can, can.last, can.current.next()) }, P: function(event, can) { - can.onkeymap.insertLine(can, can.last, can.current.target) + can.onkeymap.insertLine(can, can.last, can.current.line) }, }, insert: { @@ -293,8 +302,7 @@ Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert" }}) can.ui.editor.focus() - can.ui.editor.setSelectionRange(0, 0) - can.onkeymap._mode(can, "insert") + // can.ui.editor.setSelectionRange(0, 0) // can.ui.editor.setSelectionRange(event.offsetX/10, event.offsetX/10) }, insertLine: function(can, value, before) { @@ -308,4 +316,5 @@ Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert" can.onaction.rerankLine(can) }, }) - +Volcanos("onexport", {help: "导出数据", list: ["模式", "按键", "解析器", "文件名", "当前行", "跳转数", "标签数"], +}) diff --git a/plugin/local/wiki/data.js b/plugin/local/wiki/data.js index c137c3d5..de432400 100644 --- a/plugin/local/wiki/data.js +++ b/plugin/local/wiki/data.js @@ -1,7 +1,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb) { can.ui = can.page.Appends(can, can._target, [{view: "content"}, {view: "display"}]) - can.table = can.onappend.table(can, can.ui.content, "table", msg, function(value, key, index, line) { + can.table = can.onappend.table(can, msg, can.ui.content, "table", function(value, key, index, line) { return {text: [value, "td"], oncontextmenu: function(event) { can.user.carte(can, can.ondetail, can.ondetail.list, function(ev, cmd, meta) { var cb = meta[cmd]; cb && cb(event, can, cmd, value, key, index, line) diff --git a/plugin/local/wiki/draw.js b/plugin/local/wiki/draw.js index 13de0661..1fbd7485 100644 --- a/plugin/local/wiki/draw.js +++ b/plugin/local/wiki/draw.js @@ -1,5 +1,5 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { can._output.innerHTML = "" - can.onappend.table(can, target, "table", msg), can.ui = can.page.Append(can, target, [ + can.onappend.table(can, msg, target, "table"), can.ui = can.page.Append(can, target, [ {view: "project", style: {display: "none"}}, {view: "content", onmouseenter: function(event) { can.onkeypop.action = can @@ -14,7 +14,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, can.current = null // 加载绘图 - var code = can.onappend.board(can, can.ui.content, "board", msg, msg.Result()||can.onexport.content(can)) + var code = can.onappend.board(can, msg, can.ui.content, "board", msg.Result()||can.onexport.content(can)) can.page.Select(can, can.ui.content, "svg", function(svg) { can.svg = can.group = svg can.onimport.block(can, svg), can.onimport.group(can, svg).click() can.page.Select(can, svg, "*", function(item, index) { @@ -603,8 +603,8 @@ Volcanos("onaction", {help: "组件菜单", list: [ _mode: { run: function(event, can) { var target = event.target event.type == "click" && target.Value("type") && can.run(event, ["action", "run", target.Value("zone"), target.Value("type"), target.Value("name"), target.Value("text")], function(msg) { - can.onappend.table(can, can.ui.display, "table", msg) - can.onappend.board(can, can.ui.display, "board", msg) + can.onappend.table(can, msg, can.ui.display, "table") + can.onappend.board(can, msg, can.ui.display, "board") }, true) }, translate: function(event, can, point) { diff --git a/plugin/local/wiki/feel.js b/plugin/local/wiki/feel.js index de220e3c..f7b22e52 100644 --- a/plugin/local/wiki/feel.js +++ b/plugin/local/wiki/feel.js @@ -8,7 +8,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, value.path.endsWith("/")? can.path.Push(value): can.list.push(value) }) - can.onappend.table(can, can.ui.project, "table", can.path, function(value, key, index, line, array) { + can.onappend.table(can, can.path, can.ui.project, "table", function(value, key, index, line, array) { return {type: "td", inner: value, click: function(event) { can.sup.onaction.change(event, can.sup, key, value, function(msg) { can.run(event) diff --git a/plugin/local/wiki/walk.js b/plugin/local/wiki/walk.js index be01be5e..31705e12 100644 --- a/plugin/local/wiki/walk.js +++ b/plugin/local/wiki/walk.js @@ -1,7 +1,7 @@ Volcanos("onimport", {help: "导入数据", list: [], init: function(can, msg, cb, output, action, option) {output.innerHTML = ""; if (!msg.result || msg.result.length == 0) { - var table = can.page.AppendTable(can, output, msg, msg.append); + var table = can.page.AppendTable(can, msg, output, msg.append); table.onclick = function(event) {switch (event.target.tagName) { case "TD": can.onimport.which(event, table, msg.append, function(index, key) { diff --git a/plugin/local/wiki/word.js b/plugin/local/wiki/word.js index b6191819..24105b0c 100644 --- a/plugin/local/wiki/word.js +++ b/plugin/local/wiki/word.js @@ -1,6 +1,6 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { target.innerHTML = "" if (msg.Option("_display") == "table") { - return can.onappend.table(can, target, "table", msg) + return can.onappend.table(can, msg, target, "table") } target.innerHTML = msg.Result() can.page.Select(can, target, ".story", function(item) { var data = item.dataset diff --git a/plugin/story/paste.js b/plugin/story/paste.js index 7186af4b..2bcb7fd1 100644 --- a/plugin/story/paste.js +++ b/plugin/story/paste.js @@ -2,8 +2,8 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, can.ui = can.page.Append(can, can._target, [ {view: ["content", "div"]}, {view: ["display", "pre"]}, ]) - can.onappend.table(can, can.ui.content, "table", msg) - can.onappend.board(can, can.ui.display, "board", msg) + can.onappend.table(can, msg, can.ui.content, "table") + can.onappend.board(can, msg, can.ui.display, "board") return typeof cb == "function" && cb(msg) }, }) diff --git a/plugin/story/spide.js b/plugin/story/spide.js index a36a5593..d60b98ef 100644 --- a/plugin/story/spide.js +++ b/plugin/story/spide.js @@ -1,7 +1,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { can._output.innerHTML = "" if (msg.Option("_display") == "table") { - can.onappend.table(can, can._target, "table", msg) + can.onappend.table(can, msg, can._target, "table") return typeof cb == "function" && cb(msg) } can.ui = can.page.Append(can, can._output, [{view: "content"}, {view: "display"}]) diff --git a/plugin/story/trend.js b/plugin/story/trend.js index 79387391..e6988f67 100644 --- a/plugin/story/trend.js +++ b/plugin/story/trend.js @@ -1,7 +1,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { can._output.innerHTML = "" if (msg.Option("_display") == "table") { - can.onappend.table(can, can._target, "table", msg) + can.onappend.table(can, msg, can._target, "table") return typeof cb == "function" && cb(msg) } can.ui = can.page.Append(can, can._output, [{view: "content"}, {view: "display"}]) @@ -183,7 +183,7 @@ Volcanos("onaction", {help: "组件菜单", list: ["编辑", "清空", ["view", }, "数据源": function(event, can) { can.ui.display.innerHTML = "" - can.onappend.table(can, can.ui.display, "table", can._msg) + can.onappend.table(can, can._msg, can.ui.display, "table") }, }) Volcanos("onexport", {help: "导出数据", list: ["from", "commit", "total", "date", "begin", "add", "del", "close", "note"]}) diff --git a/plugin/table.js b/plugin/table.js index 9b04498c..8af4b839 100644 --- a/plugin/table.js +++ b/plugin/table.js @@ -8,7 +8,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, ])) var cmd = "", arg = "" - can.onappend.table(can, can.ui.content, "table", msg, function(value, key, index, line, array) { + can.onappend.table(can, msg, can.ui.content, "table", function(value, key, index, line, array) { if (key == "key") { switch (value) { case "extra.cmd": cmd += line.value; break @@ -33,7 +33,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }, can.ui.display) - can.onappend.board(can, can.ui.display, "board", msg) + can.onappend.board(can, msg, can.ui.display, "board") can.onimport._board(can, msg) return typeof cb == "function" && cb(msg) }, @@ -167,7 +167,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, return true }, _inner: function(can, msg) { - can.onappend.board(can, can.ui.display, "board", msg) + can.onappend.board(can, msg, can.ui.display, "board") can.onimport._board(can, msg) return true }, diff --git a/proto.js b/proto.js index c8a02e22..3cf64f59 100644 --- a/proto.js +++ b/proto.js @@ -42,7 +42,15 @@ var Volcanos = shy("火山架", {libs: [], pack: {}, order: 1, cache: {}, index: for (var i = 0; i < cache.length; i++) { if (can[cache[i]._name] && can[cache[i]._name]._merge && can[cache[i]._name]._merge(can, cache[i])) { continue } if (typeof cb == "function" && cb(can, name, cache[i])) { continue} - can[cache[i]._name] = cache[i] + if (can[cache[i]._name]) { + for (var k in cache[i]) { + can[cache[i]._name].hasOwnProperty(k) || (can[cache[i]._name][k] = cache[i][k]) + } + } else { + can[cache[i]._name] = cache[i] + } + + // 加载索引 } meta.cache[name] = cache