diff --git a/frame.js b/frame.js index 8ff107bc..3904556b 100644 --- a/frame.js +++ b/frame.js @@ -24,6 +24,26 @@ Volcanos("onengine", {help: "搜索引擎", list: [], _init: function(can, meta, can.ondaemon._init(can), can.onmotion._init(can, target), can.onkeypop._init(can) can.onlayout.topic(can), can.onengine.signal(can, chat.ONMAIN, can.request()) can.base.isFunc(cb) && cb() + + can.onengine.listen(can, "onsearch", function(msg, word) { + if (word[0] == "*" || word[0] == ctx.COMMAND) { var meta = can.onengine.plugin.meta + var list = word[1] == ""? meta: meta[word[1]]? kit.Dict(word[1], meta[word[1]]): {} + can.core.Item(list, function(name, command) { + name = can.base.trimPrefix(name, "can.") + can.core.List(msg.Option(ice.MSG_FIELDS).split(ice.FS), function(item) { + msg.Push(item, kit.Dict( + "ctx", "onengine", + "cmd", "command", + "type", "can", + "name", name, + "text", command.help, + "context", "can", + "command", name, + )[item]||"") + }) + }) + } + }) }) }, _search: function(event, can, msg, panel, cmds, cb) { @@ -67,6 +87,22 @@ Volcanos("onengine", {help: "搜索引擎", list: [], _init: function(can, meta, can.core.CallFunc(cb, {msg: msg}) }) }), + plugin: shy("添加插件", {}, [], function(can, name, command) { + var type = html.TEXT; command.list = can.core.List(command.list, function(item) { + switch (typeof item) { + case lang.OBJECT: return type = item.type||type, item + case lang.STRING: + switch (item) { + case "list": + case "back": return {type: type = html.BUTTON, name: item} + case "name": return {type: type = html.TEXT, name: item} + case "text": return {type: type = html.TEXTAREA, name: item} + default: return {type: type, name: item} + } + } + }) + arguments.callee.meta[can.core.Keys("can", name)] = command + }), }) Volcanos("ondaemon", {help: "推荐引擎", list: [], _init: function(can, name) { if (can.user.isLocalFile) { return } can.misc.WSS(can, {type: "chrome", name: can.misc.Search(can, "daemon")||name||""}, function(event, msg, cmd, arg) { if (!msg) { return } @@ -333,8 +369,15 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, }) }, plugin: function(can, meta, cb, target) { meta = meta||{}, meta.index = meta.index||can.core.Keys(meta.ctx, meta.cmd) + var p = can.onengine.plugin.meta[meta.index] var res = {}; function cbs(sub, meta, skip) { res.__proto__ = sub, cb(sub, meta, skip) } (meta.meta || meta.inputs && meta.inputs.length > 0)? can.onappend._plugin(can, {meta: meta.meta, list: meta.list}, meta, cbs, target): + p? can.onappend._plugin(can, {name: meta.index, help: p.help, meta: p.meta, list: p.list}, meta, function(sub, meta, skip) { + can.base.isFunc(cbs) && cbs(sub, meta, skip) + sub.run = function(event, cmds, cb) { + can.core.CallFunc(p, {msg: can.request(event), cmds: cmds, cb: cb}) + } + }, target): can.run(can.request({}, meta)._event, [ctx.ACTION, ctx.COMMAND, meta.index], function(msg) { msg.Table(function(value) { can.onappend._plugin(can, value, meta, cbs, target) }) }, true) diff --git a/panel/action.js b/panel/action.js index db685227..7b5d34d1 100644 --- a/panel/action.js +++ b/panel/action.js @@ -202,7 +202,7 @@ Volcanos("onexport", {help: "导出数据", list: [], }, layout: function(can, msg) { return can.Conf(chat.LAYOUT) }, plugin: function(can, msg, word) { - var fields = (msg.Option(ice.MSG_FIELDS)||"ctx,cmd,type,name,text").split(",") + var fields = msg.Option(ice.MSG_FIELDS).split(ice.FS) can.page.Select(can, can._output, "fieldset.plugin>legend", function(item) { if (item.innerHTML.indexOf(word[1]) == -1) { return } diff --git a/panel/cmd.css b/panel/cmd.css index 7b849c30..1e4acf90 100644 --- a/panel/cmd.css +++ b/panel/cmd.css @@ -7,6 +7,9 @@ fieldset.panel.cmd>div.output>fieldset.plugin { fieldset.panel.cmd>div.output>fieldset.plugin>legend { display:none; } +fieldset.panel.cmd>div.output>fieldset.plugin>div.legend { + display:none; +} fieldset.panel.cmd>div.output>fieldset.plugin>div.legend { float:left; padding:0 10px; margin-right:3px; height:25px; font-size:18px; @@ -19,3 +22,6 @@ fieldset.plugin>legend { body.white fieldset.panel.cmd>div.output>fieldset.plugin>div.legend { background-color:honeydew; } +fieldset.panel.cmd>div.output>fieldset.plugin>div.status { + display:none; +} diff --git a/panel/river.js b/panel/river.js index 3c146aff..b25134e3 100644 --- a/panel/river.js +++ b/panel/river.js @@ -67,6 +67,16 @@ Volcanos("onengine", {help: "解析引擎", list: [], _engine: function(event, c }, }) Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg, list, cb, target) { + can.onengine.plugin(can, "log", shy("日志", {}, ["text", "list", "back"], function(msg, cmds) { + console.log(cmds[0]) + msg.Option(ice.MSG_DISPLAY, "/plugin/story/pie.js") + })) + can.onengine.plugin(can, "pie", shy("比例图", {}, ["list", "back"], function(msg, cmds) { + msg.Push("value", 200) + msg.Push("value", 300) + msg.Push("value", 400) + msg.Option(ice.MSG_DISPLAY, "/plugin/story/pie.js") + })) can.base.isFunc(cb) && cb() }, onlogin: function(can, msg) { diff --git a/plugin/local/chat/div.js b/plugin/local/chat/div.js index 7c6acd42..001a0013 100644 --- a/plugin/local/chat/div.js +++ b/plugin/local/chat/div.js @@ -28,7 +28,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }, _item: function(can, node, target, width) { width = width||node.meta.width var ui = can.page.Append(can, target, [{view: [html.ITEM, html.DIV, node.meta.name||"hi"]}, {view: [html.LIST]}]) - ui.list._fieldset = can.onimport._field(can, node.meta, target._fieldset, width) + ui.list._fieldset = can.onimport._plugin(can, node.meta, target._fieldset, width) var msg = can.request({}); msg.Push(node.meta, "", true) ui.item.onclick = function(event) { @@ -54,7 +54,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, can.core.List(node.list, function(node) { can.onimport._item(can, node, ui.list, width) }) return ui.item }, - _field: function(can, meta, target, width) { + _plugin: function(can, meta, target, width) { var size = {width: width, height: meta.height} var field = can.onappend.field(can, chat.LAYOUT, {}, target).fieldset can.page.ClassList.add(can, field, meta.style) diff --git a/plugin/story/trend.js b/plugin/story/trend.js index 6809f56e..e48ee775 100644 --- a/plugin/story/trend.js +++ b/plugin/story/trend.js @@ -2,6 +2,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, can.onmotion.clear(can), can.base.isFunc(cb) && cb(msg) if (msg.Option("branch")) { return can.onappend.table(can, msg) } can.onappend._status(can, ["from", "commit", "total", "max", "date", "text", "add", "del"]) + can.Conf(html.HEIGHT, can.Conf(html.HEIGHT)||200) can.msg = msg, can.data = msg.Table(), can.onimport._sum(can) can.Action(html.HEIGHT, msg.Option(html.HEIGHT)||can.user.mod.isCmd? "max": can.user.isMobile&&can.user.isLandscape()? "200": "400")