diff --git a/frame.js b/frame.js index 452a7a30..49e9667e 100644 --- a/frame.js +++ b/frame.js @@ -529,9 +529,9 @@ Volcanos("onlayout", {help: "页面布局", list: [], _init: function(can) { {type: "td", list: [ {type: "tr", list: [{type: "tr", list: [ {view: ["content", "td"], list: [{view: ["content"]}]}, - {view: ["profile", "td"], list: [{view: ["profile"]}]}, + {view: ["profile", "td"], list: [{view: ["profile"], style: {display: "none"}}]}, ]}]}, - {view: ["display", "tr"], list: [{view: ["display"]}]} + {view: ["display", "tr"], list: [{view: ["display"], style: {display: "none"}}]} ]} ] }]) }, @@ -548,7 +548,7 @@ Volcanos("onlayout", {help: "页面布局", list: [], _init: function(can) { display: function(can, target) { target = target || can._target return can.page.Appends(can, target, [{view: ["layout", "table"], list: [ {type: "tr", list: [{view: "content"}]}, - {type: "tr", list: [{view: "display"}]}, + {type: "tr", list: [{view: "display", style: {display: "none"}}]}, ]}]) }, }) diff --git a/page/index.css b/page/index.css index 36d143e9..d4375528 100644 --- a/page/index.css +++ b/page/index.css @@ -210,17 +210,17 @@ fieldset>form.option>div.item.textarea { clear:both; } -fieldset>div.action>div.item { +fieldset div.action>div.item { float:left; margin-right:3px; height:25px; vertical-align:middle; } -fieldset>div.action>div.item.space { +fieldset div.action>div.item.space { width:10px; } -fieldset>div.action>div.item label { +fieldset div.action>div.item label { display:none; } -fieldset>div.action>div.item select { +fieldset div.action>div.item select { height:25px; font-size:14px; } @@ -231,6 +231,9 @@ fieldset>div.status>div.item>label { font-size:10px; color:gray; } +fieldset div.output { + clear:both; +} fieldset>div.output td.project { background-color:#435f8c8c; } diff --git a/pane/Action.js b/pane/Action.js index 049eaf5c..0a8a78a1 100644 --- a/pane/Action.js +++ b/pane/Action.js @@ -12,9 +12,11 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg) }) }, _plugin: function(can, river, storm, sub, item) { + sub.run = function(event, cmds, cb) { var msg = sub.request(event) + var toast = msg.Option("_toast") && can.user.toast(can, msg.Option("_toast"), "", 1000000) return can.run(event, (can.onengine[cmds[0]]? []: [river, storm, item.id||item.index||item.key+"."+item.name]).concat(cmds), function(msg) { - typeof cb == "function" && cb(msg) + toast && toast.Close(), typeof cb == "function" && cb(msg) }) }, can._plugins = (can._plugins||[]).concat([sub]) diff --git a/plugin/local/code/inner.js b/plugin/local/code/inner.js index b82eb610..54d338eb 100644 --- a/plugin/local/code/inner.js +++ b/plugin/local/code/inner.js @@ -6,13 +6,25 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb, can.page.Modify(can, can.ui.content, {style: {"min-width": can.Conf("width")-170}}) can.page.Modify(can, can.ui.display, {style: {display: "none"}}) + var ui = can.page.Append(can, can.ui.display, [ + {view: "action"}, {view: "output"}, + ]); can.ui.output = ui.output + can.onappend._action(can, ["关闭", "清空", "运行"], ui.action, { + "关闭": function(event) { can.onmotion.hidden(can, can.ui.display) }, + "清空": function(event) { can.onmotion.clear(can, can.ui.output) }, + "运行": function(event) { can.onaction["运行"](event, can) }, + }) + msg.Option({path: can.Option("path"), file: can.Option("file"), line: can.Option("line")||1}) can.tabview = can.tabview || {}, can.tabview[can.Option("path")+can.Option("file")] = msg can.onimport.tabview(can, msg.Option("path"), msg.Option("file"), msg.Option("line")||1) can.onimport.project(can, msg.Option("path")) typeof cb == "function" && cb(msg) - + can.onimport._search(can, target) + can.onimport._favor(can, target) + }, + _search: function(can, target) { var ui = can.page.Append(can, target, [ {view: "search", style: {display: "none"}, list: [ {view: "action", list: [ @@ -21,15 +33,27 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb, }], value: "main", onfocus: function(event) { event.target.setSelectionRange(0, -1) }}, {button: ["搜索", function(event) { can.onaction.searchLine(event, can, ui.word.value) }]}, {button: ["返回", function(event) { can.onaction["返回"](event, can) }]}, - {button: ["关闭", function(event) { can.onaction.searchShow(event, can) }]}, + {button: ["关闭", function(event) { can.onaction["搜索"](event, can) }]}, ]}, {view: "tags", style: {"max-height": 160}}, ]}, ]); can.core.Copy(can.ui, ui, "search", "word", "tags") }, + _favor: function(can, target) { + can.onappend.plugin(can, {index: "web.code.favor"}, function(sub) { + sub.run = function(event, cmds, cb) { + can.run(event, ["action", "favor"].concat(cmds), cb, true) + }, can.ui.favor = sub + + sub.Select = function(line) { + line.path == can.Option("path") && can.onimport.tabview(can, line.path, line.file, line.line) + } + can.onmotion.hidden(sub, sub._target) + }, target) + }, project: function(can, path) { can.Option({path: path}) var msg = can.request({}, {dir_root: path, dir_deep: true}) - can.run(msg._event, ["action", "dir", "./"], function(msg) { + can.run(msg._event, ["./"], function(msg) { can.onmotion.clear(can, can.ui.project) can.onappend.tree(can, msg.Table(), "path", "/", function(event, item) { can.onimport.tabview(can, path, item.path) @@ -42,10 +66,11 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb, can._msg = can.tabview[path+file] can.Option({path: path, file: file, line: line||parseInt(can._msg.Option("line"))||1}) + can._msg.Option("line", can.Option("line")) return can.onsyntax._init(can, can._msg), typeof cb == "function" && cb() } - can.run({}, ["action", "render", can.base.Ext(file||path), file, path], function(msg) { + can.run({}, [path, file], function(msg) { msg.Option({path: path, file: file, line: line||1}) can.tabview[path+file] = msg @@ -62,7 +87,7 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb, }, ["/plugin/local/code/inner.css"]) Volcanos("onsyntax", {help: "语法高亮", list: ["keyword", "prefix", "line"], _init: function(can, msg) { // caches save - can.file && can.core.List(["content", "profile", "display"], function(item) { can.page.Cache(can.file, can.ui[item], { + can.file && can.core.List(["content", "profile", "output"], function(item) { can.page.Cache(can.file, can.ui[item], { scrollTop: can.ui.content.scrollTop, current: can.current, max: can.max, }) }) @@ -72,9 +97,9 @@ Volcanos("onsyntax", {help: "语法高亮", list: ["keyword", "prefix", "line"], // caches load can.onmotion.select(can, can._action, "div.file", msg._tab) - var cache = false; can.core.List(["content", "profile", "display"], function(item) { + var cache = false; can.core.List(["content", "profile", "output"], function(item) { var p = can.page.Cache(can.file, can.ui[item]); if (p != undefined && !cache) { cache = true - can.onaction.selectLine(can, p.current.line) + can.onaction.selectLine(can, parseInt(msg.Option("line"))) can.ui.content.scrollTo(0, p.scrollTop) can.max = p.max } @@ -116,14 +141,23 @@ Volcanos("onsyntax", {help: "语法高亮", list: ["keyword", "prefix", "line"], return p.line? p.line(can, line): line }, }) -Volcanos("onaction", {help: "控件交互", list: [], +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.onmotion.toggle(can, can.ui.project) }, - searchShow: function(event, can) { can.onmotion.toggle(can, can.ui.search) }, + "运行": function(event, can) { + var msg = can.request(event, {_toast: "运行中..."}) + can.run(event, ["action", "engine", can.parse, can.Option("file"), can.Option("path")], function(msg) { + can.onappend.table(can, msg, function(value, key, index) { return {text: [value, "td"]} }, can.ui.output||can.ui.display) + can.onappend.board(can, msg.Result(), can.ui.output||can.ui.display) + can.page.Modify(can, can.ui.display, {style: {display: "block"}}) + }, true) + }, + "项目": function(event, can) { can.onmotion.toggle(can, can.ui.project) }, + "搜索": function(event, can) { can.onmotion.toggle(can, can.ui.search) }, + "收藏": function(event, can) { can.onmotion.toggle(can, can.ui.favor._target) }, appendLine: function(can, value) { var ui = can.page.Append(can, can.ui.content, [{type: "tr", list: [ @@ -201,8 +235,8 @@ 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) - can.run(event, ["action", "search", can.parse, value, can.Option("path")], function(msg) { toast.Close() + var msg = can.request(event, {_toast: "搜索中..."}) + can.run(event, ["action", "search", can.parse, value, can.Option("path")], function(msg) { can.onmotion.clear(can, can.ui.tags) can.onappend.table(can, msg, function(value, key, index, line) { @@ -247,7 +281,8 @@ Volcanos("onaction", {help: "控件交互", list: [], {_input: "text", name: "name", value: "@key"}, ], function(event, button, meta, list) { can.run(event, [ - "favor", "topic", meta.topic||"some", + "action", "favor", + "action", "insert", "topic", meta.topic||"some", "type", can.parse, "name", meta.name||"some", "text", value, "path", can.Option("path"), "file", can.Option("file"), "line", can.Option("line"), ], function(msg) { diff --git a/plugin/local/code/vimer.js b/plugin/local/code/vimer.js index 91d75b1a..7e4b31c9 100644 --- a/plugin/local/code/vimer.js +++ b/plugin/local/code/vimer.js @@ -28,12 +28,13 @@ Volcanos("onimport", {help: "导入数据", list: [], _merge: function(can, sub) }}, ]); can.core.Copy(can.ui, ui, "current", "command") - var ui = can.page.Append(can, can.ui.display, [ + var ui = can.page.Appends(can, can.ui.display, [ {view: "action", list: [ {input: ["cmd", function(event) { can.onkeymap.parse(event, can, "command") }], value: "", onfocus: function(event) { event.target.setSelectionRange(0, -1) + can.onkeymap._command(can) }}, {button: ["执行", function(event) { can.onkeymap.command.Enter(event, can, can.ui.cmd.value) @@ -86,8 +87,8 @@ Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert" }, _engine: { e: function(event, can, line, ls) { can.onimport.tabview(can, can.Option("path"), ls[1]) }, - p: function(event, can) { can.onaction.project(event, can) }, - q: function(event, can) { can.onaction.display(event, can) }, + p: function(event, can) { can.onaction["项目"](event, can) }, + q: function(event, can) { can.onmotion.hidden(can, can.ui.display) }, w: function(event, can) { can.onaction.save(event, can) }, }, @@ -121,17 +122,19 @@ Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert" Escape: function(event, can) { can.onkeymap._normal(can) }, Enter: function(event, can) { can.onmotion.hidden(can, can.ui.command) can.page.Modify(can, can.ui.display, {style: {display: "block"}}) + var line = can.ui.command.value || can.ui.cmd.value can.ui.cmd.value = line, can.ui.cmd.focus() can.ui.cmd.setSelectionRange(0, -1) + can.ui.command.value = "" can.onmotion.clear(can, can.ui.output) - var line = can.ui.command.value || can.ui.cmd.value ; var ls = can.core.Split(line, " ", ",") + var ls = can.core.Split(line, " ", ",") var cb = can.onkeymap._engine[ls[0]]; if (typeof cb == "function") { can.onmotion.hidden(can, can.ui.display) can.onkeymap._normal(can) cb(event, can, line, ls) } else { - can.onkeymap._remote(event, can, line, ["action", "command"].concat(ls)) + can.onkeymap._remote(event, can, line, ["action", "command", "run"].concat(ls)) } }, jk: function(event, can) { can.keylist = can.keylist.slice(0, -1) @@ -162,15 +165,9 @@ Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert" }, j: function(event, can) { can.onaction.selectLine(can, can.current.next()) - // var pos = can.current.offset()+can.current.window()-can.ui.current.offsetTop; if (pos < 5*can.current.height()) { - // can.current.scroll(0, can.current.height()) - // } }, k: function(event, can) { can.onaction.selectLine(can, can.current.prev()) - // var pos = can.ui.current.offsetTop-can.current.offset(); if (pos < can.current.height()*5) { - // can.current.scroll(0, -can.current.height()) - // } }, gg: function(event, can, count) { count = count || 1 @@ -291,14 +288,11 @@ Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert" can.onaction.rerankLine(can) }, }) -Volcanos("onaction", {help: "控件交互", list: [], - display: function(event, can) { can.onmotion.toggle(can, can.ui.display) }, - - save: function(event, can) { - var msg = can.request(event); msg.Option("content", can.onexport.content(can)) +Volcanos("onaction", {help: "控件交互", list: ["项目", "搜索", "收藏"], + save: function(event, can) { var msg = can.request(event, {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) }, }) -Volcanos("onexport", {help: "导出数据", list: ["文件数", "模式", "按键", "解析器", "文件名", "当前行", "跳转数", "标签数"]}) +Volcanos("onexport", {help: "导出数据", list: ["文件数", "模式", "按键", "解析器", "文件名", "当前行", "跳转数"]}) diff --git a/plugin/state.js b/plugin/state.js index 3fb9a67e..9f4647b5 100644 --- a/plugin/state.js +++ b/plugin/state.js @@ -47,9 +47,10 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf, Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, list, cb, target) { }, change: function(event, can, name, value, cb) { - can.page.Select(can, can._option, "input.args", function(input) { + return can.page.Select(can, can._option, "input.args", function(input) { if (input.name == name && value != input.value) { input.value = value var data = input.dataset || {}; data.action == "auto" && can.run(event, can.Pack(), cb) + return input } }) }, diff --git a/plugin/table.js b/plugin/table.js index d2d3a143..454b32ef 100644 --- a/plugin/table.js +++ b/plugin/table.js @@ -20,7 +20,10 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, key == "value"? can.core.List(array, function(item, index) { msg.Option(item.key, item.value) }): msg.Option(line) return can.run(event, ["action", target.name], function(msg) { can.run() }, true) } - can.sup.onaction.change(event, can.sup, key, value, function(msg) { can.onimport._init(can, msg) }) + + if (can.sup.onaction.change(event, can.sup, key, value, function(msg) { can.onimport._init(can, msg) }).length > 0) { return } + + can.sup.Select && can.sup.Select(line) }, ondblclick: function(event) { can.onmotion.modify(can, event.target, function(event, value, old) {