diff --git a/frame.js b/frame.js index f74d8bf7..688c79af 100644 --- a/frame.js +++ b/frame.js @@ -328,25 +328,26 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, }) }) }, - plugin: function(can, meta, cb, target) { meta = meta||{} + plugin: function(can, meta, cb, target) { meta = meta||{}, meta.index = meta.index||can.core.Keys(meta.ctx, meta.cmd) meta.inputs && meta.inputs.length > 0? can.onappend._plugin(can, {meta: meta.meta, list: meta.list}, meta, cb, target): - can.run({}, [ctx.ACTION, ctx.COMMAND, meta.index||can.core.Keys(meta.ctx, meta.cmd)], function(msg) { msg.Table(function(value) { + can.run({}, [ctx.ACTION, ctx.COMMAND, meta.index], function(msg) { msg.Table(function(value) { can.onappend._plugin(can, value, meta, cb, target) }) }, true) }, _plugin: function(can, value, meta, cb, target) { - meta.feature = can.base.Obj(value.meta, meta.feature||{}) - meta.inputs = can.base.Obj(value.list, meta.inputs||[]) + meta.feature = meta.feature||can.base.Obj(value.meta, {}) + meta.inputs = meta.inputs||can.base.Obj(value.list, []) meta.height = meta.height||can.Conf(html.HEIGHT) meta.width = meta.width||can.Conf(html.WIDTH) - meta.name = value.name||meta.name||html.STORY - meta.help = value.help||meta.help||html.STORY - meta.type = meta.type||html.STORY + meta.name = meta.name||value.name||chat.PLUGIN + meta.help = meta.help||value.help||chat.PLUGIN + meta.type = meta.type||chat.PLUGIN can.onappend._init(can, meta, ["/plugin/state.js"], function(sub, skip) { - sub.base.isFunc(cb) && cb(sub, meta, skip) + sub.run = function(event, cmds, cb) { can.run(event, can.misc.Concat([ctx.ACTION, cli.RUN, meta.index], cmds), cb) } + can.base.isFunc(cb) && cb(sub, meta, skip) }, target||can._output) }, diff --git a/lib/base.js b/lib/base.js index 5f25e692..f404f488 100644 --- a/lib/base.js +++ b/lib/base.js @@ -4,7 +4,7 @@ Volcanos("base", {help: "数据类型", }, Obj: function(value, def) { try { - return (typeof value == "string" && value != ""? JSON.parse(value): value) || def || {} + return (typeof value == "string" && value != ""? JSON.parse(value): value)||def } catch (e) { return [value] } diff --git a/lib/page.js b/lib/page.js index d26feefe..a1a20c52 100644 --- a/lib/page.js +++ b/lib/page.js @@ -342,7 +342,7 @@ Volcanos("page", {help: "用户界面", ClassList: { if (can.base.isObject(key)) { return can.core.Item(key, function(key, value) { can.page.SelectArgs(can, option, key, value) }), [key] } - if (!can.base.isFunc(cb)) { var value = cb; cb = function(item) { + if (!can.base.isFunc(cb)) { var value = cb; cb = function(item) { if (item.type == "button" ) { return } return item.name && (can.base.isUndefined(value)? item.value: (item.value = value)) || "" } } if (key.indexOf(".") > -1) { return [""]} diff --git a/lib/user.js b/lib/user.js index 606bab09..d12998ea 100644 --- a/lib/user.js +++ b/lib/user.js @@ -118,7 +118,7 @@ Volcanos("user", {help: "用户操作", agent: { {username: "username"}, {password: "password"}, ], function(event, button, data, list) { return { "登录": function() { - can.run({}, [ctx.ACTION, "login", data["username"], data["password"]], function(msg) { + can.run({}, ["login", data["username"], data["password"]], function(msg) { if (msg.Option("user.name")) { can.page.Remove(can, ui._target), can.base.isFunc(cb) && cb() } else { diff --git a/page/index.css b/page/index.css index 48cb3649..d9765b75 100644 --- a/page/index.css +++ b/page/index.css @@ -286,6 +286,9 @@ fieldset.plugin { fieldset.plugin>div.status { border-top:1px solid darkcyan; } +fieldset.story>legend { + display:none; +} fieldset.story>div.status { border-top:1px solid darkcyan; } diff --git a/panel/action.js b/panel/action.js index c9f9249c..dd276b63 100644 --- a/panel/action.js +++ b/panel/action.js @@ -79,8 +79,8 @@ Volcanos("onengine", {help: "解析引擎", list: [], _engine: function(event, p can.core.List(storm.action, function(value) { msg.Push("name", value.name||"") msg.Push("help", value.help||"") - msg.Push("inputs", JSON.stringify(value.inputs||[])) - msg.Push("feature", JSON.stringify(value.feature||{})) + msg.Push("inputs", JSON.stringify(value.inputs)) + msg.Push("feature", JSON.stringify(value.feature)) msg.Push("index", value.index||"") msg.Push("args", value.args||"[]") }), can.base.isFunc(cb) && cb(msg) diff --git a/panel/cmd.js b/panel/cmd.js index ee45cf05..95b9ab32 100644 --- a/panel/cmd.js +++ b/panel/cmd.js @@ -3,22 +3,20 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, can.base.isFunc(cb) && cb() }, onmain: function(can) { can._names = location.pathname - var msg = can.request({}, {_names: location.pathname}) - can.Conf(chat.TOOL)? can.core.Next(can.Conf(chat.TOOL), function(line, next) { - can.onaction._plugin(can, line.index, can.base.Obj(line.args, []), next) + var msg = can.request({}) + can.Conf(chat.TOOL)? can.core.Next(can.Conf(chat.TOOL), function(item, next) { + can.onaction._plugin(can, item, next) }): can.run(msg._event, [ctx.ACTION, ctx.COMMAND], function(msg) { - can.core.Next(msg.Table(), function(line, next) { - can.onaction._plugin(can, line.index, can.base.Obj(line.args, []), next) + can.core.Next(msg.Table(), function(item, next) { + can.onaction._plugin(can, item, next) }) }) can.page.ClassList.add(can, can._target, "Action") }, - _plugin: function(can, index, args, next) { - can.onappend.plugin(can, {type: chat.PLUGIN, index: index, args: args, opts: can.user.Search(), height: window.innerHeight, width: window.innerWidth}, function(sub, meta) { - sub.run = function(event, cmds, cb) { can.run(event, can.misc.Concat([ctx.ACTION, cli.RUN, index], cmds), cb) } - can.user.title(meta.name), next() - }) + _plugin: function(can, item, next) { + item.height = window.innerHeight, item.width = window.innerWidth, item.opts = can.user.Search() + can.onappend.plugin(can, item, function(sub, meta) { can.user.title(meta.name), next() }) }, }) diff --git a/panel/search.css b/panel/search.css index 698f6fec..b4d2560e 100644 --- a/panel/search.css +++ b/panel/search.css @@ -28,6 +28,5 @@ fieldset.Search div.output div.display { overflow:auto; } fieldset.Search div.output div.profile { - max-height:400px; overflow:auto; } diff --git a/panel/search.js b/panel/search.js index 9e87c52e..a1218d6d 100644 --- a/panel/search.js +++ b/panel/search.js @@ -9,6 +9,10 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, })); table && can.page.Modify(can, can.ui.display, {style: {width: table.offsetWidth}}) msg.Length() == 1 && can.page.Select(can, table, html.TD)[0].click() + + can.get("Action", "size", function(msg, height) { + can.page.Modify(can, can.ui.profile, {"max-height": height-table.offsetHeight}) + }) }, _word: function(can, msg, cmds, fields) { can.type = cmds[0] var cb = can.onaction[cmds[1]]; if (cb) { cb({}, can); return } @@ -34,7 +38,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }, can.onimport._word(can, msg, cmds, fields) can.get("Action", "size", function(msg, top, left, width, height) { - can.page.Modify(can, can._output, {style: {"max-width": width, "max-height": height-75}}) + can.page.Modify(can, can._output, {style: {"max-width": width}}) can.page.Modify(can, can._target, {style: {top: top, left: left}}) }) }, diff --git a/plugin/local/code/inner.js b/plugin/local/code/inner.js index fda7cf8d..989b96df 100644 --- a/plugin/local/code/inner.js +++ b/plugin/local/code/inner.js @@ -1,66 +1,45 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb, target) { - if (!can.base.endWith(can.Option("path"), "/")) { - can.Option("file", can.Option("path").split("/").pop()) - can.Option("path", can.base.trimSuffix(can.Option("path"), can.Option("file"))) - } - can.onmotion.clear(can), can.ui = can.onlayout.profile(can) + can.onmotion.clear(can) + can.ui = can.onlayout.profile(can) can.onimport._content(can, target) can.onimport._output(can, target) - can.onimport._search(can, target) can.onimport._favor(can, target) + // can.onimport._search(can, target) - can.history = can.history || [] - 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.history = can.history||[] + msg.Option({path: can.Option(nfs.PATH), file: can.Option(nfs.FILE), line: can.Option(nfs.LINE)||1}) + can.tabview = can.tabview||{}, can.tabview[can.Option(nfs.PATH)+can.Option(nfs.FILE)] = msg - can.onimport.tabview(can, msg.Option("path"), msg.Option("file"), msg.Option("line")||1) - can.onimport.project(can, msg.Option("path")) + can.onimport.tabview(can, msg.Option(nfs.PATH), msg.Option(nfs.FILE), msg.Option(nfs.LINE)||1) + can.onimport.project(can, msg.Option(nfs.PATH)) can.base.isFunc(cb) && cb(msg) }, _content: function(can, target) { - var height = can.Conf("height")-(can.user.mod.isCmd? 54: 320); height < 240 && (height = 240) + var height = can.Conf(chat.HEIGHT)-(can.user.mod.isCmd? 54: 320); height < 240 && (height = 240) can.page.Modify(can, can.ui.project, {style: {"max-height": height}}) can.page.Modify(can, can.ui.content, {style: {"max-height": height}}) - can.page.Modify(can, can.ui.display, {style: {display: "none"}}) + can.page.Modify(can, can.ui.display, {style: {display: chat.NONE}}) }, _output: function(can, target) { - var ui = can.page.Append(can, can.ui.display, [ - {view: "action"}, {view: "output"}, - ]); can.ui.output = ui.output + var ui = can.page.Append(can, can.ui.display, [{view: html.ACTION}, {view: html.OUTPUT}]); can.ui.output = ui.output - can.onappend._action(can, ["运行", "清空", "关闭"], ui.action, { - "运行": function(event) { can.onaction["运行"](event, can) }, - "清空": function(event) { can.onmotion.clear(can, can.ui.output) }, - "关闭": function(event) { can.onmotion.hidden(can, can.ui.display) }, + can.onappend._action(can, ["exec", cli.CLEAR, cli.CLOSE], ui.action, { + exec: function(event) { can.onaction["exec"](event, can) }, + clear: function(event) { can.onmotion.clear(can, can.ui.output) }, + close: function(event) { can.onmotion.hidden(can, can.ui.display) }, }) }, - _search: function(can, target) { - var ui = can.page.Append(can, target, [ - {view: "search", style: {display: "none"}, list: [ - {view: "action", list: [ - {input: ["word", function(event) { - event.key == "Enter" && can.onaction.searchLine(event, can, ui.word.value) - }], value: "main", onfocus: function(event) { event.target.setSelectionRange(0, -1) }}, - {button: ["搜索", function(event) { can.onaction.searchLine(event, can, ui.word.value) }]}, - {button: ["back", function(event) { can.onaction["back"](event, can) }]}, - {button: ["关闭", function(event) { can.onaction["搜索"](event, can) }]}, - ]}, - {view: "tags", style: {"max-height": 160}}, - ]}, - ]); can.base.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) { - var msg = can.request(event); if (cmds && cmds[0] == "action") { switch (cmds[1]) { - case "inner": can.onimport.tabview(can, msg.Option("path"), msg.Option("file"), msg.Option("line")); return + can.onappend.plugin(can, {type: chat.STORY, index: "web.code.favor"}, function(sub) { + sub.run = function(event, cmds, cb) { var msg = can.request(event) + if (cmds && cmds[0] == ctx.ACTION) { switch (cmds[1]) { + case code.INNER: can.onimport.tabview(can, msg.Option(nfs.PATH), msg.Option(nfs.FILE), msg.Option(nfs.LINE)); return } } - can.run(event, can.misc.Concat([ctx.ACTION, "favor"], cmds), function(msg) { - can.base.isFunc(cb) && cb(msg) - can.core.Timer(10, function() { - can.onappend._action(sub, ["关闭"], sub._action, { - "关闭": function(event) { can.onmotion.hidden(sub, sub._target) }, + can.run(event, can.misc.Concat([ctx.ACTION, code.FAVOR], cmds), function(msg) { + can.base.isFunc(cb) && cb(msg), can.core.Timer(10, function() { + can.onappend._action(sub, [cli.CLOSE], sub._action, { + close: function(event) { can.onmotion.hidden(sub, sub._target) }, }) }) }, true) @@ -69,23 +48,37 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb, can.onmotion.hidden(sub, sub._target) }, target) }, + _search: function(can, target) { + var ui = can.page.Append(can, target, [ + {view: mdb.SEARCH, style: {display: chat.NONE}, list: [ + {view: chat.ACTION, list: [ + {input: ["word", function(event) { + event.key == lang.ENTER && can.onaction.searchLine(event, can, ui.word.value) + }], value: "main", onfocus: function(event) { event.target.setSelectionRange(0, -1) }}, + {button: [mdb.SEARCH, function(event) { can.onaction.searchLine(event, can, ui.word.value) }]}, + {button: ["back", function(event) { can.onaction["back"](event, can) }]}, + {button: ["close", function(event) { can.onaction["搜索"](event, can) }]}, + ]}, + {view: "tags", style: {"max-height": 160}}, + ]}, + ]); can.base.Copy(can.ui, ui, mdb.SEARCH, "word", "tags") + }, project: function(can, path) { can.Option({path: path}) var msg = can.request({}, {dir_root: path, dir_deep: true}) - can.run(msg._event, ["./"], function(msg) { - can.onmotion.clear(can, can.ui.project) - can.onappend.tree(can, msg.Table(), "path", "/", function(event, item) { + can.run(msg._event, ["./"], function(msg) { can.onmotion.clear(can, can.ui.project) + can.onappend.tree(can, msg.Table(), nfs.PATH, ice.PS, function(event, item) { can.onimport.tabview(can, path, item.path) }, can.ui.project), can.Status("文件数", msg.Length()) }, true) }, tabview: function(can, path, file, line, cb) { if (can.tabview[path+file]) { - can._msg && can._msg.Option("line", can.Option("line")) + can._msg && can._msg.Option(nfs.LINE, can.Option(nfs.LINE)) 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")) + can.Option({path: path, file: file, line: line||parseInt(can._msg.Option(nfs.LINE))||1}) + can._msg.Option(nfs.LINE, can.Option(nfs.LINE)) return can.onsyntax._init(can, can._msg), can.base.isFunc(cb) && cb() } @@ -94,7 +87,7 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb, can.tabview[path+file] = msg msg._tab = can.page.Append(can, can._action, [ - {text: [file.split("/").pop(), "div", "file"], title: file, onclick: function(event) { + {text: [file.split(ice.PS).pop(), html.DIV, nfs.FILE], title: file, onclick: function(event) { can.onimport.tabview(can, path, file, "", cb) }, _init: function(item) { can.core.Timer(10, function() { item.click() }) @@ -103,57 +96,49 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb, ]).last }, true) }, -}, ["/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", "output"], function(item) { can.page.Cache(can.file, can.ui[item], { + can.file && can.core.List([chat.CONTENT, chat.PROFILE, chat.OUTPUT], function(item) { can.page.Cache(can.file, can.ui[item], { scrollTop: can.ui.content.scrollTop, current: can.current, max: can.max, }) }) - can.file = can.base.Path(msg.Option("path"), msg.Option("file")) + can.file = can.base.Path(msg.Option(nfs.PATH), msg.Option(nfs.FILE)) can.parse = can.base.Ext(can.file) can.Status("模式", "normal") // caches load can.onmotion.select(can, can._action, "div.file", msg._tab) - var cache = false; can.core.List(["content", "profile", "output"], function(item) { + var cache = false; can.core.List([chat.CONTENT, chat.PROFILE, chat.OUTPUT], function(item) { var p = can.page.Cache(can.file, can.ui[item]); if (p != undefined && !cache) { cache = true - can.onaction.selectLine(can, parseInt(msg.Option("line"))) + can.onaction.selectLine(can, parseInt(msg.Option(nfs.LINE))) can.ui.content.scrollTo(0, p.scrollTop) can.max = p.max } }); if (cache) { return } - switch (can.parse) { - case "png": - case "jpg": - can.page.Append(can, can.ui.content, [{img: can.base.Path("/share/local", can.file)+"?"+can.user.Search(can, ice.POD)}]) - return - } - function init(p) { can.max = 0 - can.core.List(can.ls = msg.Result().split("\n"), function(item) { + can.core.List(can.ls = msg.Result().split(ice.NL), function(item) { can.onaction.appendLine(can, item) - }), can.onaction.selectLine(can, msg.Option("line")||1) + }), can.onaction.selectLine(can, msg.Option(nfs.LINE)||1) } // plugin - var p = can.onsyntax[can.parse]; !p? can.run({}, [ctx.ACTION, "plugin", can.parse, msg.Option("file"), msg.Option("path")], function(msg) { + var p = can.onsyntax[can.parse]; !p? can.run({}, [ctx.ACTION, mdb.PLUGIN, can.parse, msg.Option(nfs.FILE), msg.Option(nfs.PATH)], function(msg) { init(p = can.onsyntax[can.parse] = can.base.Obj(msg.Result())) }, true): init(p) }, - _parse: function(can, line) { line = line || "", line = line.replace("<", "<").replace(">", ">") - var p = can.onsyntax[can.parse]; if (!p) { return } - p = can.onsyntax[p.link] || p + _parse: function(can, line) { line = line||"", line = line.replace("<", "<").replace(">", ">") + var p = can.onsyntax[can.parse]; if (!p) { return line } + p = can.onsyntax[p.link]||p function wrap(type, str) { return type? ''+str+'': str } - p.keyword && (line = can.core.List(can.core.Split(line, p.split && p.split.space || " ", p.split && p.split.operator || "{[(|)]}", {detail: true}), function(item, index, array) { - item = typeof item == "object"? item: {text: item}, p.word && (item = p.word(item, index, array)) + p.keyword && (line = can.core.List(can.core.Split(line, p.split && p.split.space||ice.SP, p.split && p.split.operator || "{[(|)]}", {detail: true}), function(item, index, array) { + item = can.base.isObject(item)? item: {text: item}, p.word && (item = p.word(item, index, array)) var text = item.text; var key = item.keyword||p.keyword[text] - switch (item.type) { - case "space": return text - case "string": return wrap("string", item.left+text+item.right) + switch (item.type) { case "space": return text + case lang.STRING: return wrap(lang.STRING, item.left+text+item.right) default: return wrap(key, text) } }).join("")) @@ -180,28 +165,27 @@ Volcanos("onaction", {help: "控件交互", list: ["项目", "收藏"], can.Status("跳转数", can.history.length) }, "项目": function(event, can) { - var width = can.Conf("width")-(can.onmotion.toggle(can, can.ui.project)? 170: 0) - // can.page.Modify(can, can.ui.content, {style: {"min-width": width}}) + var width = can.Conf(chat.WIDTH)-(can.onmotion.toggle(can, can.ui.project)? 170: 0) }, "收藏": function(event, can) { can.onmotion.toggle(can, can.ui.favor._target) }, "搜索": function(event, can) { can.onmotion.toggle(can, can.ui.search) }, - "运行": function(event, can) { var msg = can.request(event, {_toast: "运行中..."}) - can.run(event, [ctx.ACTION, "engine", can.parse, can.Option("file"), can.Option("path")], function(msg) { + "exec": function(event, can) { var msg = can.request(event, {_toast: "运行中..."}) + can.run(event, [ctx.ACTION, mdb.ENGINE, can.parse, can.Option(nfs.FILE), can.Option(nfs.PATH)], function(msg) { can.onappend.table(can, msg, null, 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"}}) + can.page.Modify(can, can.ui.display, {style: {display: html.BLOCK}}) }, true) }, appendLine: function(can, value) { - var ui = can.page.Append(can, can.ui.content, [{type: "tr", list: [ - {view: ["line unselectable", "td", ++can.max], onclick: function(event) { + var ui = can.page.Append(can, can.ui.content, [{type: html.TR, list: [ + {view: ["line unselectable", html.TD, ++can.max], onclick: function(event) { can.onaction.selectLine(can, ui.tr) }, ondblclick: function(event) { can.onaction.favorLine(can, ui.text.innerText) }}, - {view: ["text", "td"], list: [can.onsyntax._parse(can, value)], onclick: function(event) { + {view: [html.TEXT, html.TD], list: [can.onsyntax._parse(can, value)], onclick: function(event) { can.onaction._selectLine(can, ui) }, ondblclick: function(event) { @@ -210,7 +194,7 @@ Volcanos("onaction", {help: "控件交互", list: ["项目", "收藏"], ]}]); return ui.tr }, modifyLine: function(can, line, value) { - can.page.Select(can, can.ui.content, "tr", function(item, index) { + can.page.Select(can, can.ui.content, html.TR, function(item, index) { if (item != line && index+1 != line) { return } can.page.Select(can, item, "td.text", function(item) { @@ -219,26 +203,26 @@ Volcanos("onaction", {help: "控件交互", list: ["项目", "收藏"], }) }, rerankLine: function(can, value) { can.max = 0 - can.page.Select(can, can.ui.content, "tr", function(item, index) { + can.page.Select(can, can.ui.content, html.TR, function(item, index) { can.max++, can.page.Select(can, item, "td.line", function(item) { item.innerText = index+1 }) }) }, selectLine: function(can, line) { if (!line) { return } - can.page.Select(can, can.ui.content, "tr", function(item, index) { - can.page.ClassList.del(can, item, "select") + can.page.Select(can, can.ui.content, html.TR, function(item, index) { + can.page.ClassList.del(can, item, html.SELECT) if (item != line && index+1 != line) { return } - can.page.ClassList.add(can, item, "select") + can.page.ClassList.add(can, item, html.SELECT) line = item - can.Option("line", index+1) + can.Option(nfs.LINE, index+1) can.Status("文件名", can.file) can.Status("解析器", can.parse) can.Status("当前行", can.onexport.position(can, index+1)) }) - typeof line == "object" && can.page.Select(can, line, "td.text", function(item) { + can.base.isObject(line) && can.page.Select(can, line, "td.text", function(item) { can.current = { scroll: function(x, y) { can.ui.content.scrollLeft += x @@ -255,7 +239,7 @@ Volcanos("onaction", {help: "控件交互", list: ["项目", "收藏"], }, height: function() { return line.offsetHeight }, } - var push = {path: can.Option("path"), file: can.Option("file"), line: can.Option("line")} + var push = {path: can.Option(nfs.PATH), file: can.Option(nfs.FILE), line: can.Option(nfs.LINE)} can.base.Eq({path: push.path, file: push.file}, can.history[can.history.length-1]) || can.history.push(push) can.Status("跳转数", can.history.length) }) @@ -271,17 +255,16 @@ Volcanos("onaction", {help: "控件交互", list: ["项目", "收藏"], }, searchLine: function(event, can, value) { value = value.trim() can.page.Modify(can, can.ui.search, {style: {display: ""}}) - value = can.ui.word.value = value || can.ui.word.value || "main" + value = can.ui.word.value = value||can.ui.word.value||"main" can.request(event, {_toast: "搜索中..."}) - can.run(event, [ctx.ACTION, "search", can.parse, value, can.Option("path")], function(msg) { - + can.run(event, [ctx.ACTION, mdb.SEARCH, can.parse, value, can.Option(nfs.PATH)], function(msg) { can.onmotion.clear(can, can.ui.tags) can.onappend.table(can, msg, function(value, key, index, line) { 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() { + return {text: ["", html.TD], list: [{text: [value, html.DIV]}], onclick: function(event) { + line.line && can.onimport.tabview(can, can.Option(nfs.PATH), line.file.replace("./", ""), parseInt(line.line), function() { can.onaction.selectLine(can, line.line) }) }} @@ -313,13 +296,13 @@ Volcanos("onaction", {help: "控件交互", list: ["项目", "收藏"], favorLine: function(can, value) { can.user.input(event, can, [ - {name: "zone", value: "@key=some"}, - {name: "name", value: "@key=some"}, + {name: "zone", value: "hi"}, + {name: "name", value: "hello"}, ], function(event, button, meta, list) { - can.run(event, [ctx.ACTION, "favor", - ctx.ACTION, "insert", "zone", meta.zone||"some", - "type", can.parse, "name", meta.name||"some", "text", (value||"").trimRight(), - "path", can.Option("path"), "file", can.Option("file"), "line", can.Option("line"), + can.run(event, [ctx.ACTION, code.FAVOR, + ctx.ACTION, mdb.INSERT, kit.MDB_ZONE, meta.zone||"", + kit.MDB_TYPE, can.parse, kit.MDB_NAME, meta.name||"", kit.MDB_TEXT, (value||"").trimRight(), + nfs.PATH, can.Option(nfs.PATH), nfs.FILE, can.Option(nfs.FILE), nfs.LINE, can.Option(nfs.LINE), ], function(msg) { can.user.toast(can, "收藏成功") }, true) @@ -346,12 +329,12 @@ Volcanos("onaction", {help: "控件交互", list: ["项目", "收藏"], }) Volcanos("onexport", {help: "导出数据", list: ["文件数", "解析器", "文件名", "当前行", "跳转数", "标签数"], position: function(can, index, total) { total = total || can.max - return (parseInt(index))+"/"+parseInt(total)+" = "+parseInt((index)*100/total)+"%" + return (parseInt(index))+ice.PS+parseInt(total)+" = "+parseInt((index)*100/total)+"%" }, content: function(can) { return can.page.Select(can, can.ui.content, "td.text", function(item) { return item.innerText - }).join("\n")+"\n" + }).join(ice.NL)+ice.NL }, }) diff --git a/plugin/local/code/vimer.js b/plugin/local/code/vimer.js index 8e079c46..745aab08 100644 --- a/plugin/local/code/vimer.js +++ b/plugin/local/code/vimer.js @@ -55,7 +55,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, ]}, {view: "output"}, ]); can.base.Copy(can.ui, ui, "output", "cmd") }, -}, ["/plugin/local/code/vimer.css"]) +}, [""]) Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert"], _init: function(can, mode) { can.core.List(can.onkeymap.list, function(item) { var engine = {} can.core.Item(can.onkeymap[item], function(key, cb) { var map = engine diff --git a/proto.js b/proto.js index 6bba060c..ab2c105b 100644 --- a/proto.js +++ b/proto.js @@ -17,7 +17,7 @@ var kit = { MDB_LIST: "list", } var ice = { - SP: " ", PT: ".", NL: "\n", + SP: " ", PS: "/", PT: ".", NL: "\n", POD: "pod", CTX: "ctx", CMD: "cmd", ARG: "arg", OPT: "opt", TRUE: "true", @@ -78,6 +78,9 @@ var ssh = { } var nfs = { DIR: "dir", + PATH: "path", + FILE: "file", + LINE: "line", } var tcp = { HOST: "host", @@ -85,6 +88,8 @@ var tcp = { var code = { WEBPACK: "webpack", + INNER: "inner", + FAVOR: "favor", } var wiki = { TITLE: "title", BRIEF: "brief", REFER: "refer", SPARK: "spark", @@ -273,7 +278,6 @@ function cmd(tool) { "/plugin/local/wiki/draw/path.js", "/plugin/local/wiki/draw.js", "/plugin/local/wiki/word.js", - "/plugin/local/team/plan.js", ], }) }