From 7324ee211ac38ec2cc8f278e89c52f6a8d72f30b Mon Sep 17 00:00:00 2001 From: shaoying Date: Thu, 21 Jan 2021 18:41:29 +0800 Subject: [PATCH] opt frame.js --- frame.js | 10 ++- lib/core.js | 2 +- lib/user.js | 3 +- page/index.js | 2 +- pane/Action.js | 51 ++++++-------- pane/Debug.css | 3 - pane/Debug.js | 20 ------ pane/Footer.js | 19 ++---- pane/Header.js | 134 ++++++++++++++++--------------------- pane/River.js | 104 ++++++++++++++-------------- pane/Search.js | 59 +++++++--------- plugin/input/province.js | 18 +++-- plugin/local/code/inner.js | 6 +- plugin/state.js | 12 ++-- plugin/story/spide.js | 2 +- plugin/story/trend.js | 2 +- plugin/table.js | 4 +- publish/chrome/chrome.js | 15 ++--- publish/chrome/contexts.js | 2 +- publish/chrome/popup.html | 21 +++--- publish/chrome/popup.js | 10 +-- publish/chrome/spided.js | 28 -------- 22 files changed, 212 insertions(+), 315 deletions(-) delete mode 100644 pane/Debug.css delete mode 100644 pane/Debug.js delete mode 100644 publish/chrome/spided.js diff --git a/frame.js b/frame.js index 55abef7d..1e4a038e 100644 --- a/frame.js +++ b/frame.js @@ -285,7 +285,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, if (can.core.CallFunc([sub, "onimport._process"], [sub, msg, cmds, cb])) { return } if (can.core.CallFunc([can, "onimport._process"], [can, msg, cmds, cb])) { return } typeof cb == "function" && cb(msg) - }, silent) + }) return true }) return @@ -398,10 +398,11 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, return can.page.Append(can, target, [{view: ["item "+item.type], list: [input]}])[item.name] }, - table: function(can, msg, cb, target) { + table: function(can, msg, cb, target, list) { var table = can.page.AppendTable(can, msg, target||can._output, msg.append, cb||function(value) { return {text: [value, "td"]} }); table && can.page.Modify(can, table, {className: "content"}) + list && can.page.RangeTable(can, table, list) return table }, board: function(can, text, target) { text = can.page.Display(text || "") @@ -413,7 +414,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, var list = can.core.Split(key, "@=", "@=") var pkey = list[0], pval = list[1]||"" - target.type != "button" && target.value.startsWith("@") && (target.value = pval||"") + target.type != "button" && target.value && target.value.startsWith("@") && (target.value = pval||"") pkey && can.require(["/plugin/input/"+pkey+".js"], function(can) { can.onfigure && can.core.Item(can.onfigure[pkey], function(key, cb) { if (key.startsWith("on")) { @@ -490,6 +491,9 @@ Volcanos("onlayout", {help: "页面布局", list: [], _init: function(can, targe can.onmotion.move(can, ui.fieldset, layout) can.page.Remove(can, ui.legend) }, + background: function(can, url, target) { target = target || document.body + can.page.Modify(can, target, {style: {background: url == "" || url == "void"? "": 'url("'+url+'")'}}) + }, resize: function(can, name, cb) { var list = []; can.onengine.listen(can, name, function(width, height) { diff --git a/lib/core.js b/lib/core.js index 3f37dc1e..9557f6e6 100644 --- a/lib/core.js +++ b/lib/core.js @@ -98,7 +98,7 @@ Volcanos("core", {help: "核心模块", }) var res = func.apply(mod||can, list) - if (!echo && typeof cb == "function") { res && msg.Echo(res), cb(msg) } + if (!echo && typeof cb == "function") { res && msg.Echo(res), arguments.callee.apply(this, [cb, {msg: msg, res: res}]) } return res }), Split: shy("分词器", function(str) { if (!str || !str.length) { return [] } diff --git a/lib/user.js b/lib/user.js index d9a07ee4..45767930 100644 --- a/lib/user.js +++ b/lib/user.js @@ -118,7 +118,7 @@ Volcanos("user", {help: "用户模块", agent: { // TODO }) }, - carte: function(event, can, meta, list, cb) { + carte: function(event, can, meta, list, cb, view) { meta = meta||can.ondetail||can.onaction||{}, list = list&&list.length > 0? list: meta.list||[]; if (list.length == 0) { return } cb = cb||function(ev, item, meta) { var cb = meta[item] || can.ondetail&&can.ondetail[item] || can.onaction&&can.onaction[item] || can.onkeymap&&can.onkeymap._remote @@ -140,6 +140,7 @@ Volcanos("user", {help: "用户模块", agent: { }]} ]} }) }]) + view && can.page.Modify(can, ui.first, view) event.stopPropagation() event.preventDefault() return ui diff --git a/page/index.js b/page/index.js index ad13e47e..4d8f7213 100644 --- a/page/index.js +++ b/page/index.js @@ -4,7 +4,7 @@ Volcanos({name: "chat", iceberg: "/chat/", volcano: "/frame.js", {name: "Search", help: "搜索框", pos: "auto"}, {name: "River", help: "群聊组", pos: "left", action: ["创建", "刷新"]}, {name: "Action", help: "工作台", pos: "main"}, - {name: "Footer", help: "状态条", pos: "foot", state: ["ncmd", "keys"]}, + {name: "Footer", help: "状态条", pos: "foot", state: ["ncmd"]}, ], main: {name: "Header", engine: "remote", list: ["/publish/order.js"]}, plugin: [ "/plugin/state.js", "/plugin/input.js", diff --git a/pane/Action.js b/pane/Action.js index 7fe9668a..b9a48c59 100644 --- a/pane/Action.js +++ b/pane/Action.js @@ -12,8 +12,8 @@ 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); cmds = cmds || [] - return can.run(event, [river, storm, item.id||item.index||item.key+"."+item.name].concat(cmds), function(msg) { + sub.run = function(event, cmds, cb) { var msg = sub.request(event) + 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) }) }, can._plugins = (can._plugins||[]).concat([sub]) @@ -70,9 +70,7 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, }) can.onengine.listen(can, "search", function(msg, word) { - if (word[0] == "*" || word[0] == "plugin") { - can.onexport.plugin(can, msg) - } + if (word[0] == "*" || word[0] == "plugin") { can.onexport.plugin(can, msg) } }) can._target.ontouchstart = function(event) { @@ -86,9 +84,23 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, can.run({}, ["search", "Header.onimport.menu", "action", ["布局", "默认布局", "流动布局", "网格布局", "标签布局", "自由布局"], - ], function(event, key) { - can.core.CallFunc([can.onaction, key], {event: event, can: can, key: key}) - }) + ], function(event, key) { can.onaction._layout(can, key) }) + }, + _layout: function(can, key) { + var trans = { + "默认布局": "auto", + "流动布局": "flow", + "网格布局": "grid", + "标签布局": "tabs", + "自由布局": "free", + } + can.page.Modify(can, can._action, {className: "action "+trans[key]}) + can.page.Modify(can, can._output, {className: "output "+trans[key]}) + + if (key == "标签布局") { + can.onmotion.select(can, can._output, "fieldset.plugin", 0) + can.onmotion.select(can, can._action, "div.item", 0) + } }, _select: function(can, msg, river, storm) { function key(name) { return can.Conf("river")+"."+can.Conf("storm")+"."+name} @@ -109,29 +121,6 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, } }) }, - - "默认布局": function(event, can) { - can.page.Modify(can, can._action, {className: "action auto"}) - can.page.Modify(can, can._output, {className: "output auto"}) - }, - "流动布局": function(event, can) { - can.page.Modify(can, can._action, {className: "action flow"}) - can.page.Modify(can, can._output, {className: "output flow"}) - }, - "网格布局": function(event, can) { - can.page.Modify(can, can._action, {className: "action grid"}) - can.page.Modify(can, can._output, {className: "output grid"}) - }, - "标签布局": function(event, can) { - can.page.Modify(can, can._action, {className: "action tabs"}) - can.page.Modify(can, can._output, {className: "output tabs"}) - can.onmotion.select(can, can._output, "fieldset.plugin", 0) - can.onmotion.select(can, can._action, "div.item", 0) - }, - "自由布局": function(event, can) { - can.page.Modify(can, can._action, {className: "action free"}) - can.page.Modify(can, can._output, {className: "output free"}) - }, }) Volcanos("onexport", {help: "导出数据", list: [], args: function(can, msg, list, cb, target) { diff --git a/pane/Debug.css b/pane/Debug.css deleted file mode 100644 index 4d68a9a9..00000000 --- a/pane/Debug.css +++ /dev/null @@ -1,3 +0,0 @@ -fieldset.Debug>div.output td { - padding:2px; -} diff --git a/pane/Debug.js b/pane/Debug.js deleted file mode 100644 index 61e32afa..00000000 --- a/pane/Debug.js +++ /dev/null @@ -1,20 +0,0 @@ -Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { - can.require(["/require/github.com/Tencent/vConsole/dist/vconsole.min.js"], function(can) { - var v = new VConsole(); - console.log(v); - }) - }, -}) -Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, list, cb, target) { - can.onimport._init(can, msg, list, cb, target) - can.user.log = function() { - can.page.Append(can, can._output, [{td: [ - can.base.Time(), - can.base.FileLine(), - ].concat(can.core.List(arguments))}]) - } - }, -}) -Volcanos("onexport", {help: "导出数据", list: []}) - - diff --git a/pane/Footer.js b/pane/Footer.js index eb2d0746..2443f16b 100644 --- a/pane/Footer.js +++ b/pane/Footer.js @@ -14,27 +14,20 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, can.toast = can.page.Append(can, target, [{view: ["toast", "div", ""]}]).first }, _state: function(can, msg, target) { - can.core.List(can.Conf("state"), function(item) { - can.page.Append(can, target, [{view: ["state "+item, "div", can.Conf(item)], - list: [{text: item}, {text: ": "}, {text: [can.Conf(item)||"", "span", item]}], - }]) + can.core.List(can.Conf("state")|["ncmd"], function(item) { + can.page.Append(can, target, [{view: ["state "+item, "div", can.Conf(item)], list: [ + {text: [item, "label"]}, {text: [": ", "label"]}, {text: [can.Conf(item)||"", "span", item]}, + ]}]) }) }, toast: function(can, msg, text) { - can.page.Modify(can, can.toast, {innerHTML: text}) + can.page.Modify(can, can.toast, text) }, - keys: function(can, msg, list, cb, target) { - can.page.Select(can, target, "span.keys", function(item) { - item.innerHTML = list[0]||"" - }) - typeof cb == "function" && cb(msg) - }, - ncmd: function(can, msg, list, cb, target) { + ncmd: function(can, target) { can.page.Select(can, target, "span.ncmd", function(item) { item.innerHTML = can.Conf("ncmd", parseInt(can.Conf("ncmd")||"0")+1+"")+"" }) - typeof cb == "function" && cb(msg) }, }) Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, list, cb, target) { diff --git a/pane/Header.js b/pane/Header.js index d937532e..f99dc63a 100644 --- a/pane/Header.js +++ b/pane/Header.js @@ -1,41 +1,51 @@ -(function() { const TITLE = "title", TOPIC = "topic", POD = "pod", STATE = "state", USERNAME = "username" Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { can._trans = { "river": "菜单", "search": "搜索", "setting": "设置", - "pack": "打包页面", - "white": "白色主题", "black": "黑色主题", + "white": "白色主题", "print": "打印主题", - "background": "清除背景", + "void": "清除背景", + "pack": "打包页面", "logout": "退出", } can.onmotion.clear(can) can.onimport._title(can, msg, target) can.onimport._state(can, msg, target) can.onimport._search(can, msg, target) + // can.onengine._daemon(can, can.user.title()) + can.onimport._background(can, msg, target) can.onimport._agent(can, msg, target) can.onimport._menu(can, msg, target) - can.onimport._background(can, msg, target) - // can.onengine._daemon(can, can.user.title()) typeof cb == "function" && cb(msg) }, - _background: function(can, msg, target) { if (!msg.Option("background")) { return } - if (msg.Option("background") == "void") { - can.page.Modify(can, document.body, {style: {background: ''}}) - } else { - can.page.Modify(can, document.body, {style: {background: 'url("'+msg.Option("background")+'")'}}) - } - }, _title: function(can, msg, target) { - can.user.title(can.user.Search(can, TITLE) || can.user.Search(can, POD)) + can.user.title(can.user.Search(can, "title") || can.user.Search(can, "pod")) can.user.isMobile || can.core.List(msg.result||["github.com/shylinux/contexts"], function(item) { - can.page.Append(can, target, [{view: [TITLE, "div", item], - click: function(event) { can.onaction.title(event, can) }, - }]) + can.page.Append(can, target, [{view: ["title", "div", item], onclick: function(event) { + can.onaction.title(event, can) + }}]) }) }, + _state: function(can, msg, target) { + can.core.List(can.Conf("state")||["time", "username"], function(item) { + can.page.Append(can, target, [{view: ["state "+item, "div", can.Conf(item)], onclick: function(event) { + can.core.CallFunc([can.onaction, item], [event, can, item]) + }, _init: function(target) { + item == "time" && can.core.Timer({interval: 1000, length: -1}, function() { + can.onimport.time(can, target) + }) && can.onappend.figure(can, {}, "@date", target) + }}]) + }) + }, + _search: function(can, msg, target) { + can.user.isMobile || (can.search = can.page.Append(can, target, [{view: "search", list: [{type: "input", data: {placeholder: "search"}, onkeydown: function(event) { + can.onkeypop.input(event, can); switch (event.key) { + case "Enter": can.run(event, ["search", "Search.onimport.select", "*", event.target.value]); break + } + }, }], }]).input) + }, _daemon: function(can, name, cb) { can.misc.WSS(can, {type: "chrome", name: name}, cb||function(event, msg, cmd, arg) { msg && can.run(event, ["search"].concat(msg["detail"]||[]), function(msg) { @@ -43,26 +53,8 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }) }) }, - _state: function(can, msg, target) { - can.core.List(can.Conf(STATE)||["time", USERNAME], function(item) { - can.page.Append(can, target, [{view: ["state "+item, "div", can.Conf(item)], - click: function(event) { can.onaction[item](event, can, item) }, - _init: function(target) { - item == "time" && can.core.Timer({interval: 1000, length: -1}, function(event) { - can.onimport.time(can, target) - }) - }, - }]) - }) - }, - _search: function(can, msg, target) { - can.user.isMobile || (can.search = can.page.Append(can, target, [{view: "search", list: [{type: "input", data: {placeholder: "search"}, onkeydown: function(event) { - can.onkeypop.input(event, can) - - switch (event.key) { - case "Enter": can.run(event, ["search", "Search.onimport.select", "*", event.target.value]); break - } - }, }], }]).input) + _background: function(can, msg) { + can.onlayout.background(can, msg.Option("background"), document.body) }, _agent: function(can, msg, target) { if (can.user.isMobile) { @@ -70,12 +62,20 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, can.onaction.Footer(can) } else if (can.user.isExtension) { can.onaction.River(can) - } else if (can.user.Search(can, POD)) { + } else if (can.user.Search(can, "pod")) { can.onaction.River(can) can.onaction.Footer(can) } can.user.isWeiXin && can.onimport._weixin(can) }, + _menu: function(can, msg, target) { + can.page.Append(can, target, can.core.List(can.user.isMobile || can.user.isExtension || can.user.Search(can, "pod")? ["river", "setting"]: ["setting"], function(item) { + return {view: ["menus", "div", item], onclick: function(event) { + can.core.CallFunc([can.onaction, item], [event, can, item]) + }} + })) + }, + _weixin: function(can, msg) { can.run({}, ["action", "wx"], function(msg) { can.require(["https://res.wx.qq.com/open/js/jweixin-1.6.0.js"], function(can) { can.user.agent = { __proto__: can.user.agent, @@ -101,26 +101,17 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }) }) }) }, - _menu: function(can, msg, target) { - can.page.Append(can, target, can.core.List(can.user.isMobile || can.user.isExtension || can.user.Search(can, POD)? ["river", "setting"]: ["setting"], function(item) { - return {view: ["menus", "div", item], onclick: function(event) { - var cb = can.onaction[item]; typeof cb == "function" && cb(event, can, item) - }} - })) - }, - time: function(can, target) { + time: function(can, target) { can.onlayout.topic(can) target.innerHTML = can.base.Time(null, "%w %H:%M:%S") - can.onlayout.topic(can) }, background: function(event, can, url) { can.run(event, ["action", "background", url], function(msg) { can.onimport._background(can, msg) }) }, - menu: function(can, cmds, cb) { // type item... - can.page.Append(can, can._output, [{type: cmds[0], list: can.core.List(cmds.slice(1), function(item) { + return can.page.Append(can, can._output, [{type: cmds[0], list: can.core.List(cmds.slice(1), function(item) { if (typeof item == "string") { return {view: ["menu", "div", item], onclick: function(event) { typeof cb == "function" && cb(event, item) @@ -135,11 +126,12 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, } else if (typeof item == "object") { return item } - }) }]) + }) }]).first }, }) Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, list, cb, target) { - function init() { can.run({}, [], function(msg) { can.Conf(USERNAME, msg.Option("user.nick")||msg.Option("user.name")) + function init() { can.run({}, [], function(msg) { + can.Conf("username", msg.Option("user.nick")||msg.Option("user.name")) can.onimport._init(can, msg, list, function(msg) { can.run({}, ["search", "Search.onaction._init"]) can.run({}, ["search", "Action.onaction._init"]) @@ -150,11 +142,13 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, }) } can.onlayout.topic(can) - can.user.isLocalFile? init(): can.run({}, ["check"], function(msg) { msg.Result()? init(): msg.Option("sso")? can.user.jumps(msg.Option("sso")): can.user.login(can, init) }) + can.user.isLocalFile? init(): can.run({}, ["check"], function(msg) { + msg.Result()? init(): msg.Option("sso")? can.user.jumps(msg.Option("sso")): can.user.login(can, init) + }) }, title: function(event, can) { - var args = {}; can.core.List([POD, TOPIC, TITLE], function(key) { + var args = {}; can.core.List(["pod", "topic", "title"], function(key) { var value = can.user.Search(can, key); value && (args[key] = value) }) can.user.jumps(can.user.MergeURL(can, args, true)) @@ -163,17 +157,17 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, var ui = can.user.carte(event, can, can.onaction, ["logout"]) can.page.Modify(can, ui.first, {style: {top: can._target.offsetHeight}}) }, - logout: function(event, can) { - can.user.logout(can) - }, - time: function(event, can) { - can.require(["/plugin/input/date.js"], function(can) { - event.target.value = "" - var ui = can.onfigure.date.onclick(event, can) - can.page.Modify(can, ui.fieldset, {style: {right: 0, top: can._target.offsetHeight, left: ""}}) - }) - }, + logout: function(event, can) { can.user.logout(can) }, + river: function(event, can) { can.run(event, ["search", "River.onmotion.toggle"]) }, + setting: function(event, can) { + var ui = can.user.carte(event, can, can.onaction, ["black", "white", "print", "void", "pack"]) + can.page.Modify(can, ui.first, {style: {top: can._target.offsetHeight}}) + }, + black: function(event, can, button) { can.onlayout.topic(can, button) }, + white: function(event, can, button) { can.onlayout.topic(can, button) }, + print: function(event, can, button) { can.onlayout.topic(can, "white print") }, + void: function(event, can, button) { can.onimport.background(event, can, button) }, pack: function(event, can) { can.core.Item(Volcanos.meta.pack, function(key, msg) { delete(msg._event), delete(msg._can) }) var msg = can.request(event, {name: "demo", content: JSON.stringify(Volcanos.meta.pack)}) @@ -184,23 +178,9 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, }) }, - river: function(event, can) { can.run(event, ["search", "River.onmotion.toggle"]) }, - setting: function(event, can) { - var ui = can.user.carte(event, can, can.onaction, ["pack", "white", "black", "print", "background"]) - can.page.Modify(can, ui.first, {style: {top: can._target.offsetHeight}}) - }, - black: function(event, can, button) { can.onlayout.topic(can, button) }, - white: function(event, can, button) { can.onlayout.topic(can, button) }, - print: function(event, can, button) { can.onlayout.topic(can, "white print") }, - background: function(event, can, button) { - can.onimport.background(event, can, "void") - }, - River: function(can) { can.run({}, ["search", "River.onmotion.toggle"]) }, Footer: function(can) { can.run({}, ["search", "River.onmotion.autosize"]) }, }) Volcanos("onexport", {help: "导出数据", list: [], height: function(can) { return can._target.offsetHeight }, }) - -})() diff --git a/pane/River.js b/pane/River.js index b10cb54a..1e865b81 100644 --- a/pane/River.js +++ b/pane/River.js @@ -1,32 +1,21 @@ -(function() { const RIVER = "river", STORM = "storm", POD = "pod" Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { - can._main_river = can.user.Search(can, RIVER) || (can.user.isMobile||can.user.isExtension? "product": "project") - can._main_storm = can.user.Search(can, STORM) || (can.user.isMobile? "office": can.user.isExtension? "chrome": "studio") - - can.run({}, ["search", "Header.onimport.menu", "river", - ["添加", "创建群组", "添加应用", "添加工具", "添加用户", "添加设备"], - ["访问", "访问研发", "访问应用", "访问工具", "访问用户", "访问设备", "访问任务"], - ["共享", "共享群组", "共享应用", "共享工具", "共享用户", "共享设备"], - ], function(event, item) { - var cb = can.ondetail[item]; typeof cb == "function" && cb(event, can, item, can.Conf(RIVER), can.Conf(STORM)) - }) + can._main_river = can.user.Search(can, "river") || (can.user.isMobile||can.user.isExtension? "product": "project") + can._main_storm = can.user.Search(can, "storm") || (can.user.isMobile? "office": can.user.isExtension? "chrome": "studio") can.onmotion.clear(can), can.sublist = {} var select; msg.Table(function(value, index, array) { var view = can.onappend.item(can, "item", value, function(event, item) { - // 左键点击 + // 左键选中 can.onaction.storm(event, can, value.hash) }, function(event) { - // 右键点击 - var ui = can.user.carte(event, can, can.ondetail, can.ondetail.list, function(ev, item, meta) { + // 右键菜单 + can.user.carte(event, can, can.ondetail, can.ondetail.list, function(ev, item, meta) { can.ondetail[item](event, can, item, value.hash) - }); can.page.Modify(can, ui.first, {style: {left: can._target.offsetWidth}}) + }, {style: {left: can._target.offsetWidth}}) }, target) if (index == 0 || [value.hash, value.name].indexOf(can._main_river) > -1) { select = view } - }), select && select.click() - - typeof cb == "function" && cb(msg) + }), select && select.click(), typeof cb == "function" && cb(msg) }, }) Volcanos("onengine", {help: "解析引擎", list: [], engine: function(event, can, msg, pane, cmds, cb) { @@ -41,42 +30,24 @@ Volcanos("onengine", {help: "解析引擎", list: [], engine: function(event, ca }, }) Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg, list, cb, target) { - can.run({}, [], function(msg) { - can.onimport._init(can, msg, list, cb, can._output) + can.run({}, [], function(msg) { can.onimport._init(can, msg, list, cb, can._output) }) + + can.onengine.listen(can, "search", function(msg, word) { + if (word[0] == "*" || word[0] == "storm") { can.onexport.storm(can, msg) } }) can.onengine.listen(can, "action.touch", function() { can.page.Select(can, document.body, "div.carte", function(item) { can.page.Remove(can, item) }) - }) - can.onengine.listen(can, "search", function(msg, word) { - if (word[0] != "*" && word[0] != "storm") { return } - - var fields = (msg.Option("fields")||"pod,ctx,cmd,type,name,text").split(",") - can.core.Item(can.onengine.river, function(river, value) { - can.core.Item(value.storm, function(storm, item) { - if (word[1] != "" && word[1] != storm && word[1] != item.name) { return } - - can.core.List(fields, function(key) { - switch (key) { - case "ctx": msg.Push(key, "web.chat"); break - case "cmd": msg.Push(key, "storm"); break - case "type": msg.Push(key, river); break - case "name": msg.Push(key, storm); break - case "text": - // msg.Push(key, can.user.MergeURL(can, {river: river, storm: storm})) - // break - msg.Push(key, shy("跳转", function(event) { - can.onaction.action(event, can, river, storm) - })); break - default: msg.Push(key, "") - } - }) - }) - }) + can.run({}, ["search", "Header.onimport.menu", "river", + ["添加", "创建群组", "添加应用", "添加工具", "添加用户", "添加设备"], + ["访问", "访问研发", "访问应用", "访问工具", "访问用户", "访问设备", "访问任务"], + ["共享", "共享群组", "共享应用", "共享工具", "共享用户", "共享设备"], + ], function(event, item) { + can.core.CallFunc([can.ondetail, item], [event, can, item, can.Conf("river"), can.Conf("storm")]) }) }, storm: function(event, can, river) { @@ -89,14 +60,15 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg, return {text: [storm.name, "div", "item"], onclick: function(event) { // 左键点击 can.onaction.action(event, can, river, storm.hash) - can.user.title(can.user.Search(can, POD) || storm.name) + can.user.title(can.user.Search(can, "pod") || storm.name) }, oncontextmenu: function(event) { can.onaction.action(event, can, river, storm.hash) - can.user.title(can.user.Search(can, POD) || storm.name) + can.user.title(can.user.Search(can, "pod") || storm.name) + // 右键点击 - var ui = can.user.carte(event, can, can.ondetail, ["共享应用", "添加工具", "保存参数", "重命名应用", "删除应用"], function(ev, item, meta) { + can.user.carte(event, can, can.ondetail, ["共享应用", "添加工具", "保存参数", "重命名应用", "删除应用"], function(ev, item, meta) { can.ondetail[item](event, can, item, river, storm.hash) - }); can.page.Modify(can, ui.first, {style: {left: can._target.offsetWidth}}) + }, {style: {left: can._target.offsetWidth}}) }} }) }]).first, list.children.length > 0 && list.children[select].click() @@ -105,8 +77,9 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg, }) }, action: function(event, can, river, storm) { - var msg = can.request(event, {river: can.Conf(RIVER, river), storm: can.Conf(STORM, storm)}) - can.onengine.signal(can, "storm.select", msg) + can.onengine.signal(can, "storm.select", can.request(event, { + river: can.Conf("river", river), storm: can.Conf("storm", storm), + })) can.page.Select(can, can._output, "div.item.select", function(item) { can.page.ClassList.del(can, item, "select") @@ -125,7 +98,7 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg, }, "创建": function(event, can) { can.onaction.create(event, can) }, - "刷新": function(event, can) { can.user.Search(can, {river: can.Conf(RIVER), storm: can.Conf(STORM)}) }, + "刷新": function(event, can) { can.user.Search(can, {river: can.Conf("river"), storm: can.Conf("storm")}) }, }) Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户", "添加设备", "添加应用", "重命名群组", "删除群组"], "创建群组": function(event, can) { can.onaction.create(event, can) }, @@ -244,5 +217,28 @@ Volcanos("ondetail", {help: "菜单交互", list: ["共享群组", "添加用户 Volcanos("onexport", {help: "导出数据", list: [], width: function(can) { return can._target.offsetWidth }, height: function(can) { return can._target.offsetHeight }, + storm: function(can, msg) { + var fields = (msg.Option("fields")||"pod,ctx,cmd,type,name,text").split(",") + can.core.Item(can.onengine.river, function(river, value) { + can.core.Item(value.storm, function(storm, item) { + if (word[1] != "" && word[1] != storm && word[1] != item.name) { return } + + can.core.List(fields, function(key) { + switch (key) { + case "ctx": msg.Push(key, "web.chat"); break + case "cmd": msg.Push(key, "storm"); break + case "type": msg.Push(key, river); break + case "name": msg.Push(key, storm); break + case "text": + // msg.Push(key, can.user.MergeURL(can, {river: river, storm: storm})) + // break + msg.Push(key, shy("跳转", function(event) { + can.onaction.action(event, can, river, storm) + })); break + default: msg.Push(key, "") + } + }) + }) + }) + }, }) -})() diff --git a/pane/Search.js b/pane/Search.js index 88d22404..7bc3cd02 100644 --- a/pane/Search.js +++ b/pane/Search.js @@ -4,56 +4,47 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, if (event.key == "Escape") { can.onmotion.hide(can) } if (event.key == "Enter") { event.stopPropagation(), event.preventDefault() - if (event.ctrlKey && can.onaction.choice(event, can, 0)) { return } + if (event.ctrlKey && can.onaction.select(event, can, 0)) { return } can.input(event, event.target.value) } }]}, - {view: "content"}, {view: "display", list: [{type: "table"}]}, - ]) - typeof cb == "function" && cb(msg) + {view: "content"}, {view: ["display", "table"]}, {view: "preview"}, + ]), typeof cb == "function" && cb(msg) }, _table: function(can, msg, fields) { can.onmotion.clear(can, can.ui.content) - var table = can.onappend.table(can, msg, function(value, key, index, line) { - can.Status("count", index+1) + can.onappend.table(can, msg, function(value, key, index, line) { can.Status("count", index+1) return {text: [key == "text" && typeof line.text == "function" && line.text.help || value, "td"], onclick: function(event) { if (event.shiftKey) { var msg = can.request(event, line) - can.onappend.plugin(can, {index: line.ctx+"."+line.cmd}, function(story, meta) { - story.run = function(event, cmds, cb, silent) { - can.run(event, ["command", "run", meta.index].concat(cmds), function(msg) { + return can.onappend.plugin(can, {index: line.ctx+"."+line.cmd}, function(sub) { + sub.run = function(event, cmds, cb) { + can.run(event, ["action", "command", "run", meta.index].concat(cmds), function(msg) { typeof cb == "function" && cb(msg) }) } - }, can.ui.display) - return + }, can.ui.preview) } if (line.ctx == "web.chat" && line.cmd == "/search") { - can.onimport.select(can, msg, [line.type, line.name, line.text], can.cb) - return + return can.onimport.select(can, msg, [line.type, line.name, line.text], can.cb) } if (typeof line.text == "function") { return can.onmotion.hide(can), line.text(event) } - can.page.Append(can, can.ui.table, [{td: can.core.List(fields, function(item) { + can.page.Append(can, can.ui.display, [{td: can.core.List(fields, function(item) { return line[item] }), data: {index: index}, onclick: function(event) { can.page.Remove(can, event.target.parentNode) - can.Status("selected", can.page.Select(can, can.ui.table, "tr").length-1) - }}]) - can.Status("selected", can.page.Select(can, can.ui.table, "tr").length-1) + can.Status("selected", can.page.Select(can, can.ui.display, "tr").length-1) + }}]), can.Status("selected", can.page.Select(can, can.ui.display, "tr").length-1) }} - }, can.ui.content) + }, can.ui.content, [fields.indexOf("pod"), fields.indexOf("ctx"), fields.indexOf("cmd"), + fields.indexOf("type"), fields.indexOf("name"), fields.indexOf("text")]) - fields.indexOf("ctx") > -1 && can.page.RangeTable(can, table, [fields.indexOf("ctx"), - fields.indexOf("cmd"), fields.indexOf("type"), fields.indexOf("name")]) - - can.page.Modify(can, can.ui.table, {style: {width: table.offsetWidth}}) }, _word: function(can, msg, cmds, fields) { - var msg = can.request({}, {fields: fields.join(","), word: cmds}) + msg = can.request({}, {fields: fields.join(","), word: cmds}) can.onengine.signal(can, "search", msg) - can.onmotion.clear(can, can.ui.content) can.run(msg._event, cmds, function(msg) { can.list = msg.Table() can.onimport._table(can, msg, fields) }) @@ -62,21 +53,21 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, select: function(can, msg, cmds, cb) { can.ui.word.value = cmds[1] var fields = (cmds[2]||msg.Option("fields")||"pod,ctx,cmd,type,name,text").split(",") - can.page.Appends(can, can.ui.table, [{th: fields}]), can.cb = function() { + can.page.Appends(can, can.ui.display, [{th: fields}]), can.cb = function() { typeof cb == "function" && cb(can.onexport.select(can)), can.onmotion.hide(can) } + can.run({}, ["search", "Header.onexport.height"], function(res) { + can.page.Modify(can, can._target, {style: {top: res}}) + }) + can.run({}, ["search", "River.onexport.width"], function(res) { + can.page.Modify(can, can._target, {style: {left: res}}) + }) + can.input = function(event, word) { cmds[1] = word can.onimport._word(can, msg, cmds, fields) } - can.page.Select(can, document.body, "fieldset.pane.Header", function(item) { - can.page.Modify(can, can._target, {style: {top: item.offsetHeight}}) - }) - can.page.Select(can, document.body, "fieldset.pane.River", function(item) { - can.page.Modify(can, can._target, {style: {left: item.offsetWidth}}) - }) - can.onmotion.show(can), can.ui.input.focus() can.onimport._word(can, msg, cmds, fields) }, @@ -85,10 +76,10 @@ Volcanos("onaction", {help: "交互操作", list: ["关闭", "清空", "完成"] can.onimport._init(can, msg, list, cb, can._output) }, "关闭": function(event, can) { can.onmotion.hide(can) }, - "清空": function(event, can) { can.onmotion.clear(can, can.ui.table), can.onmotion.clear(can, can.ui.display) }, + "清空": function(event, can) { can.onmotion.clear(can, can.ui.display), can.onmotion.clear(can, can.ui.display) }, "完成": function(event, can) { typeof can.cb == "function" && can.cb() }, - choice: function(event, can, index) { + select: function(event, can, index) { if (can.list && can.list[index]) { can.onmotion.hide(can) if (typeof can.list[index].text == "function") { can.list[index].text(event) diff --git a/plugin/input/province.js b/plugin/input/province.js index 5f2bfb6d..1ac50ca4 100644 --- a/plugin/input/province.js +++ b/plugin/input/province.js @@ -1,18 +1,16 @@ -Volcanos("onfigure", {help: "控件详情", list: [], - province: {onclick: function(event, can, item, target, figure) { +Volcanos("onfigure", {help: "控件详情", list: [], province: {onclick: function(event, can, item, target, figure) { + can.require(["/require/github.com/shylinux/echarts/echarts.js","/require/github.com/shylinux/echarts/china.js"], function() { can.onappend._action(can, [ {type: "button", name: "清空", onclick: function(event) { target.value = "" }}, {type: "button", name: "关闭", onclick: function(event) { can.page.Remove(can, figure.fieldset) }}, ], figure.action) can.page.Modify(can, figure.fieldset, {style: {left: 120}}) - can.require(["/require/github.com/shylinux/echarts/echarts.js","/require/github.com/shylinux/echarts/china.js"], function() { - var china_chart = echarts.init(can.page.Append(can, figure.output, [{type: "div", style: {width: "600px", height: "400px"}}]).first); - china_chart.setOption({geo: {map: 'china'}}), china_chart.on('click', function (params) { - target.value = params.name, msg.Option("_refresh") && run() - can.page.Remove(can, figure.fieldset) - }) + var china_chart = echarts.init(can.page.Append(can, figure.output, [{type: "div", style: {width: "600px", height: "400px"}}]).first); + china_chart.setOption({geo: {map: 'china'}}), china_chart.on('click', function (params) { + target.value = params.name, msg.Option("_refresh") && run() + can.page.Remove(can, figure.fieldset) }) - }}, -}) + }) +}}, }) diff --git a/plugin/local/code/inner.js b/plugin/local/code/inner.js index dfab1e76..9c21e1b7 100644 --- a/plugin/local/code/inner.js +++ b/plugin/local/code/inner.js @@ -260,8 +260,10 @@ Volcanos("onaction", {help: "控件交互", list: [], can.onkeymap && can.onkeymap.selectLine(can, line, item) }) - var pos = can.current.offset()-can.current.line.offsetTop - can.current.scroll(0, -pos) + if (can.current) { + var pos = can.current.offset()-can.current.line.offsetTop + can.current.scroll(0, -pos) + } }, searchLine: function(event, can, value) { value = value.trim() can.page.Modify(can, can.ui.search, {style: {display: ""}}) diff --git a/plugin/state.js b/plugin/state.js index 53df7b6d..5dd8204d 100644 --- a/plugin/state.js +++ b/plugin/state.js @@ -5,15 +5,12 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf, }, _progress: function(can, msg, cmds, cb, silent) { var size = msg.Append("size") || msg.Append("count") - if (size != "" && size == msg.Append("total")) { - return false - } + if (size != "" && size == msg.Append("total")) { return false } can.user.toast(can, { title: can._name+" "+msg.Append("step")+"% ", duration: 1100, text: "执行进度: "+can.base.Size(size||0)+"/"+can.base.Size(msg.Append("total")||"1000")+"\n"+msg.Append("name"), - progress: parseInt(msg.Append("step")), - width: 400, + progress: parseInt(msg.Append("step")), width: 400, }) can.page.Select(can, can._output, "td", function(td) { @@ -33,16 +30,17 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf, var sub = can.request({}, {_count: parseInt(msg.Option("_count"))-1}) can.onappend._output(can, can.Conf(), sub._event, can.Pack()) }) + return true }, _field: function(can, msg) { - can.onappend._plugin(can, msg, {}, function(sub, meta) { + msg.Table(function(item) { can.onappend._plugin(can, item, {}, function(sub, meta) { sub.run = function(event, cmds, cb, silent) { var res = can.request(event); can.core.Item(can.Option(), function(key, value) { res.Option(key) || res.Option(key, value) }) can.run(event, (msg["_prefix"]||[]).concat(cmds), cb, true) } - }) + }) }) return true }, }) diff --git a/plugin/story/spide.js b/plugin/story/spide.js index 603f7fb8..1085fd47 100644 --- a/plugin/story/spide.js +++ b/plugin/story/spide.js @@ -7,7 +7,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, can.onmotion.clear(can) can.onappend.plugins(can, {index: "web.wiki.draw"}, function(sub) { - sub.run = function(event, cmds, cb, silent) { + sub.run = function(event, cmds, cb) { typeof cb == "function" && cb(sub.request()) can.core.Timer(100, function() { can.sub = sub._outputs[0] diff --git a/plugin/story/trend.js b/plugin/story/trend.js index 63737b8b..c1aa6c86 100644 --- a/plugin/story/trend.js +++ b/plugin/story/trend.js @@ -6,7 +6,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, can.onmotion.clear(can) can.onappend.plugins(can, {index: "web.wiki.draw"}, function(sub) { - sub.run = function(event, cmds, cb, silent) { + sub.run = function(event, cmds, cb) { typeof cb == "function" && cb(sub.request()) can.core.Timer(100, function() { can.sub = sub._outputs[0] diff --git a/plugin/table.js b/plugin/table.js index fa19a616..8a644fa7 100644 --- a/plugin/table.js +++ b/plugin/table.js @@ -1,6 +1,6 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { - if (can.onimport._process(can, msg)) { return typeof cb == "function" && cb(can, msg) } if (can.sup.onimport._process(can.sup, msg)) { return typeof cb == "function" && cb(can, msg) } + if (can.onimport._process(can, msg)) { return typeof cb == "function" && cb(can, msg) } can.onmotion.clear(can) can.ui = can.onlayout.display(can) @@ -50,6 +50,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, } }) }, + _process: function(can, msg) { var cb = can.onimport[msg.Option("_process")] return typeof cb == "function" && cb(can, msg) @@ -136,7 +137,6 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }, data: {"className": "args"}}, ]} }, - }) Volcanos("onaction", {help: "控件交互", list: []}) Volcanos("onexport", {help: "导出数据", list: []}) diff --git a/publish/chrome/chrome.js b/publish/chrome/chrome.js index 55c5c595..7d2976b5 100644 --- a/publish/chrome/chrome.js +++ b/publish/chrome/chrome.js @@ -18,19 +18,18 @@ Volcanos("chrome", { }) return } + if (cmds[1] == "") { // 当前标签 - chrome.tabs.query({currentWindow: true, active: true}, function(tabs) { - cmds[1] = tabs[0].id + chrome.tabs.query({currentWindow: true, active: true}, function(tabs) { cmds[1] = tabs[0].id chrome.tabs.sendMessage(parseInt(cmds[1]), msg, function(res) { msg.Copy(res), typeof cb == "function" && cb(msg) }) }) - return + } else { + chrome.tabs.sendMessage(parseInt(cmds[1]), msg, function(res) { + msg.Copy(res), typeof cb == "function" && cb(msg) + }) } - - chrome.tabs.sendMessage(parseInt(cmds[1]), msg, function(res) { - msg.Copy(res), typeof cb == "function" && cb(msg) - }) }, bookmark: function(msg, cmds, cb) { chrome.bookmarks.getSubTree(cmds[0]||"0", function(labs) { @@ -42,7 +41,7 @@ Volcanos("chrome", { typeof cb == "function" && cb(msg) }) }, -}, ["/lib/base", "/lib/core", "/lib/misc", "/lib/page", "/lib/user"], function(can) { +}, ["/lib/base.js", "/lib/core.js", "/lib/misc.js", "/lib/page.js", "/lib/user.js"], function(can) { can.Conf({iceberg: "http://localhost:9020/"}) can.user.toast = function(message, title) {chrome.notifications.create(null, { message: message, title: title||can._name, iconUrl: "/favicon.ico", type: "basic", diff --git a/publish/chrome/contexts.js b/publish/chrome/contexts.js index c120aae5..d36b2534 100644 --- a/publish/chrome/contexts.js +++ b/publish/chrome/contexts.js @@ -31,7 +31,7 @@ Volcanos("chrome", { }, [], function(can) { can._load("chrome") chrome.extension.onMessage.addListener(function(req, sender, cb) { var msg = can.request(); can.core.List(req.option, function(key) { msg.Option(key, req[key][0]) }) - can.core.CallFunc([can, req.detail[3]||"spide"], {can: can, msg: msg, cmds: req.detail.slice(4), cb: cb}) + can.core.CallFunc([can, req.detail[3]||"spide"], [can, msg, req.detail.slice(4), cb]) }) }) diff --git a/publish/chrome/popup.html b/publish/chrome/popup.html index 97618eb9..e3e0e7b9 100644 --- a/publish/chrome/popup.html +++ b/publish/chrome/popup.html @@ -1,13 +1,10 @@ - - - - - - - - - - - - + + + + + + + + + diff --git a/publish/chrome/popup.js b/publish/chrome/popup.js index 450d853e..3175c157 100644 --- a/publish/chrome/popup.js +++ b/publish/chrome/popup.js @@ -1,10 +1,10 @@ -Volcanos({name: "demo", volcano: "/frame.js", iceberg: "http://localhost:9020/chat/", intshell: "plug.sh", - libs: ["/lib/base", "/lib/core", "/lib/misc", "/lib/page", "/lib/user"], panes: [ +Volcanos({name: "demo", iceberg: "http://localhost:9020/chat/", volcano: "/frame.js", + libs: ["/lib/base.js", "/lib/core.js", "/lib/misc.js", "/lib/page.js", "/lib/user.js"], panes: [ {name: "Header", help: "标题栏", pos: "head", state: ["time", "username"]}, - {name: "River", help: "群聊组", pos: "left"}, + {name: "Search", help: "搜索框", pos: "auto"}, + {name: "River", help: "群聊组", pos: "left", action: ["创建", "刷新"]}, {name: "Action", help: "工作台", pos: "main"}, - {name: "Search", help: "搜索框", pos: "float"}, - {name: "Footer", help: "状态条", pos: "foot", state: ["ncmd" ]}, + {name: "Footer", help: "状态条", pos: "foot", state: ["ncmd"]}, ], main: {name: "Header", engine: "remote", list: ["/publish/order.js"]}, plugin: [ "/plugin/state.js", "/plugin/input.js", "/plugin/table.js", ], diff --git a/publish/chrome/spided.js b/publish/chrome/spided.js deleted file mode 100644 index 329cec61..00000000 --- a/publish/chrome/spided.js +++ /dev/null @@ -1,28 +0,0 @@ -Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { can._output.innerHTML = ""; - can.ui = can.page.Append(can, can._target, [ - {view: ["content", "div"]}, {view: ["display", "pre"]}, - ]) - can.onappend.table(can, msg, null, can.ui.content) - can.onappend.board(can, msg.Result(), can.ui.display) - var refresh = msg.Option("_refresh") || can.Conf("feature")["_refresh"] - refresh && can.core.Timer(refresh, function() { - can.run({}) - }) - return typeof cb == "function" && cb(msg) - }, -}) -Volcanos("onaction", {help: "控件交互", list: [], - onclick: function(event, can) { - can.run(event, [], function() {}) - }, -}) -Volcanos("ondetail", {help: "控件交互", list: ["编辑", "删除"], - "编辑": function(event, can, key) { - console.log(key) - }, - "删除": function(event, can, key) { - console.log(key) - }, -}) - -