From b3bec1cfaa0d22a54a2ceb4fd80359b60bd1e989 Mon Sep 17 00:00:00 2001 From: shaoying Date: Mon, 18 Oct 2021 00:38:16 +0800 Subject: [PATCH] opt some --- frame.js | 11 +-- lib/user.js | 1 + page/index.js | 10 +- panel/action.js | 41 +++----- panel/footer.js | 30 +++--- panel/header.js | 96 ++++++++----------- panel/search.js | 73 +++++++------- plugin/input.js | 46 ++++----- plugin/input/date.js | 12 +-- plugin/input/key.js | 23 ++--- plugin/input/province.js | 12 +-- plugin/state.js | 4 +- plugin/table.js | 18 ++-- proto.js | 193 +++++++++++++------------------------- publish/chrome/popup.html | 1 - publish/chrome/popup.js | 91 +++++++++--------- 16 files changed, 269 insertions(+), 393 deletions(-) diff --git a/frame.js b/frame.js index 1e1b957a..5e78dc87 100644 --- a/frame.js +++ b/frame.js @@ -1,4 +1,3 @@ -_can_name = "/frame.js" Volcanos("onengine", {help: "搜索引擎", list: [], _init: function(can, meta, list, cb, target) { can.run = function(event, cmds, cb) { var msg = can.request(event); cmds = cmds||[] return (can.onengine[cmds[0]]||can.onengine._remote)(event, can, msg, can, cmds, cb) @@ -15,6 +14,7 @@ Volcanos("onengine", {help: "搜索引擎", list: [], _init: function(can, meta, } }), panel.onaction._init(panel, item, item.list, next, panel._target) can.onmotion.float.auto(can, panel._output) + panel.onkeypop._build(panel) }, target) }, function() { can.misc.Log(can.user.title(), cli.RUN, can) can.ondaemon._init(can), can.onmotion._init(can, target), can.onkeypop._init(can, target) @@ -308,7 +308,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, var input = meta.action||kit.MDB_KEY; input != "auto" && can.require(["/plugin/input/"+input+".js"], function(can) { can.core.Item(can.onfigure[input], function(key, on) { if (key.indexOf("on") != 0) { return } target[key] = function(event) { - can.onappend._init(can, {type: html.INPUT, name: input, pos: html.FLOAT}, [], function(sub) { sub.Conf(meta) + can.onappend._init(can, {type: html.INPUT, name: input, pos: chat.FLOAT}, [], function(sub) { sub.Conf(meta) sub.run = function(event, cmds, cb) { var msg = sub.request(event, can.Option()); (meta.run||can.run)(event, cmds, cb, true) } @@ -619,10 +619,9 @@ Volcanos("onmotion", {help: "动态特效", list: [], _init: function(can, targe }, }) Volcanos("onkeypop", {help: "键盘交互", list: [], _focus: [], _init: function(can, target) { - var focus = can.onkeypop._focus + var focus = can.onkeypop._focus; can.onkeypop._build(can) // can.onengine.listen(can, "keymap.focus", function(cb) { cb? focus.push(cb): focus.pop() }) can.onengine.listen(can, "keymap.focus", function(cb) { cb? focus.push(cb): can.onkeypop._focus.length = 0 }) - can.onkeypop._build(can) target.onkeydown = function(event) { if (focus.length > 0) { return focus[focus.length-1](event) } event.target == target && can.page.Select(can, target, "fieldset.Action>div.output", function(item) { target._keys = can.onkeypop._parse(event, can, "normal", target._keys||[], item) @@ -649,9 +648,6 @@ Volcanos("onkeypop", {help: "键盘交互", list: [], _focus: [], _init: functio } var map = can.onkeypop._mode[mode] - var cb = map && map[event.key]; if (can.base.isFunc(cb) && event.key.length > 1) { - repeat(cb, count); return list - } var cb = map && map[event.key.toLowerCase()]; if (can.base.isFunc(cb) && event.key.length > 1) { repeat(cb, count); return list } @@ -776,4 +772,3 @@ Volcanos("onkeypop", {help: "键盘交互", list: [], _focus: [], _init: functio target.setSelectionRange(start, start) }, }) -_can_name = "" diff --git a/lib/user.js b/lib/user.js index b5ec9b0a..9f26bead 100644 --- a/lib/user.js +++ b/lib/user.js @@ -64,6 +64,7 @@ Volcanos("user", {help: "用户操作", agent: { "list": "查看", "back": "返回", "run": "执行", "refresh": "刷新", "share": "共享", "clear": "清空", + "done": "完成", }[text] || text }, toast: function(can, content, title, duration, progress) { diff --git a/page/index.js b/page/index.js index d0ff8a75..72f99ad4 100644 --- a/page/index.js +++ b/page/index.js @@ -1,9 +1,9 @@ Volcanos({name: "chat", panels: [ - {name: "Header", help: "标题栏", pos: "head", state: ["time", "username", "avatar"]}, - {name: "Search", help: "搜索框", pos: "auto"}, - {name: "River", help: "群聊组", pos: "left", action: ["create", "refresh"]}, - {name: "Action", help: "工作台", pos: "main"}, - {name: "Footer", help: "状态条", pos: "foot", state: ["ncmd"]}, + {name: "Header", help: "标题栏", pos: chat.HEAD, state: ["time", "username", "avatar"]}, + {name: "Search", help: "搜索框", pos: chat.AUTO}, + {name: "River", help: "群聊组", pos: chat.LEFT, action: ["create", "refresh"]}, + {name: "Action", help: "工作台", pos: chat.MAIN}, + {name: "Footer", help: "状态条", pos: chat.FOOT, state: ["ncmd"]}, ], main: {name: "Header", list: ["/publish/order.js"]}, plugin: [ "/plugin/state.js", "/plugin/input.js", diff --git a/panel/action.js b/panel/action.js index 8714cbfe..b434a600 100644 --- a/panel/action.js +++ b/panel/action.js @@ -1,10 +1,9 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg) { var river = can.Conf(chat.RIVER), storm = can.Conf(chat.STORM) - can.onmotion.clear(can), can.core.Next(msg.Table(), function(item, next) { - item.width = parseInt(can.Conf(chat.WIDTH))-40, item.height = parseInt(can.Conf(chat.HEIGHT))-40 + can.onmotion.clear(can), can.core.Next(msg.Table(), function(item, next) { item.type = chat.PLUGIN + item.height = parseInt(can.Conf(chat.HEIGHT))-40, item.width = parseInt(can.Conf(chat.WIDTH))-40 item.feature = can.base.Obj(item.feature||item.meta) item.inputs = can.base.Obj(item.inputs||item.list) - item.type = mdb.PLUGIN can.onappend.plugin(can, item, function(sub, meta) { can.onimport._plugin(can, river, storm, sub, meta), next() @@ -14,7 +13,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg) !can.user.isMobile && can.onimport._menu(can, msg) }) - can.onmotion.float.auto(can, can._output, "carte") + can.onmotion.float.auto(can, can._output, chat.CARTE) }, _plugin: function(can, river, storm, sub, meta) { sub.run = function(event, cmds, cb) { var msg = sub.request(event); cmds = cmds||[] @@ -24,21 +23,20 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg) }) }, can._plugins = (can._plugins||[]).concat([sub]) - can.page.Append(can, can._action, [{view: ["item", "div", meta.name], onclick: function(event) { + can.page.Append(can, can._action, [{view: [html.ITEM, html.DIV, meta.name], onclick: function(event) { can.onmotion.select(can, can._output, "fieldset.plugin", sub._target) can.onmotion.select(can, can._action, "div.item", event.target) }}]) can.page.Modify(can, sub._output, {style: {"max-width": meta.width}}) - sub._option.dataset = sub._option.dataset || {} + sub._option.dataset = sub._option.dataset||{} meta.id && (sub._option.dataset.id = meta.id) sub._target.Meta = meta }, _menu: function(can, msg) { - if (can.user.isMobile || can.user.Search(can, cli.POD)) { - return - } + if (can.user.isMobile || can.user.Search(can, cli.POD)) { return } + can._menu && can.page.Remove(can, can._menu) can._menu = can.search({}, ["Header.onimport.menu", ctx.ACTION].concat( can.base.Obj(msg.Option("menus"), [ @@ -46,28 +44,23 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg) ["help", "tutor", "manual", "service", "devops", "refer"], ]) ), function(event, button, list) { - if (list[0] == "help") { - can.user.open("/help/"+button+".shy") - } else { - can.onaction.layout(can, button) - } + list[0] == "help"? can.user.open("/help/"+button+".shy"): can.onaction.layout(can, button) }) }, _share: function(can, share) { share && can.run({}, ["_share", share], function(msg) { - can.user.topic(can, can.user.Search(can, chat.TOPIC)||msg.Option(chat.TOPIC)||"white") + can.user.topic(can, can.user.Search(can, chat.TOPIC)||msg.Option(chat.TOPIC)) can.user.title(can.user.Search(can, chat.TITLE)||msg.Option(chat.TITLE)) can.onaction.layout(can, "auto") - if (msg["index"].length == 1) { can.user.mod.isCmd = true - can.page.ClassList.add(can, can._target, "cmd") - can.require(["/panel/cmd.css"]) + if (msg[kit.MDB_INDEX].length == 1) { can.require(["/panel/cmd.css"]) + can.user.mod.isCmd = true, can.page.ClassList.add(can, can._target, "cmd") can.page.Select(can, document.body, "fieldset.panel", function(item) { item != can._target && can.onmotion.hidden(can, item) }) - can.Conf({width: window.innerWidth+40, height: window.innerHeight}) + can.Conf({height: window.innerHeight, width: window.innerWidth+40}) } else { - can.Conf({width: window.innerWidth, height: window.innerHeight}) + can.Conf({height: window.innerHeight, width: window.innerWidth}) } can.Conf(chat.RIVER, "_share"), can.Conf(chat.STORM, share) can.onimport._init(can, msg) @@ -102,13 +95,9 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, can.base.isFunc(cb) && cb() }, onmain: function(can, msg) { - var cmds = location.pathname.split("/").slice(1) - if (cmds[0] == cli.CMD) { - can.onappend.plugin(can, {index: cmds[1]}, function(sub, meta) { - sub.run = function(event, cmds, cb) {} - }) + var cmds = location.pathname.split("/").slice(1); if (cmds[0] == cli.CMD) { + can.onappend.plugin(can, {index: cmds[1]}, function(sub) { sub.run = function(event, cmds, cb) {} }) } - can.onimport._share(can, can.user.Search(can, web.SHARE)) }, onsize: function(can, msg, width, height) { can.Conf({width: width, height: height}) }, diff --git a/panel/footer.js b/panel/footer.js index 547c97df..34925a43 100644 --- a/panel/footer.js +++ b/panel/footer.js @@ -6,14 +6,14 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, can.onimport._toast(can, msg, target) can.base.isFunc(cb) && cb(msg) }, - _title: function(can, msg, target) { const TITLE = chat.TITLE + _title: function(can, msg, target) { !can.user.isMobile && can.core.List(msg.result, function(item) { - can.page.Append(can, target, [{view: [TITLE, html.DIV, item], title: "联系站长"}]) + can.page.Append(can, target, [{view: [chat.TITLE, html.DIV, item], title: "联系站长"}]) }) }, - _state: function(can, msg, target) { const STATE = "state" - can.core.List(can.base.Obj(can.Conf(STATE)||msg.Option(STATE), ["ncmd"]), function(item) { - can.page.Append(can, target, [{view: [STATE+" "+item, html.DIV, can.Conf(item)], list: [ + _state: function(can, msg, target) { + can.core.List(can.base.Obj(msg.Option(chat.STATE)||can.Conf(chat.STATE), ["ncmd"]), function(item) { + can.page.Append(can, target, [{view: [can.base.join([chat.STATE, item]), html.DIV, can.Conf(item)], list: [ {text: [item, html.LABEL]}, {text: [": ", html.LABEL]}, {text: [can.Conf(item)||"", html.SPAN, item]}, ], onclick: function(event) { can.show = can.show? (can.page.Remove(can, can.show), null): can.onaction._cmd(can) @@ -22,7 +22,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }) }, _toast: function(can, msg, target) { - can.toast = can.page.Append(can, target, [{view: "toast", onclick: function(event) { + can.toast = can.page.Append(can, target, [{view: chat.TOAST, onclick: function(event) { can.show = can.show? (can.page.Remove(can, can.show), null): can.onappend.float(can, can._toast).first can.page.Modify(can, can.show, {style: {left: "", top: "", right: 0, bottom: 32}}) }}]).first @@ -31,10 +31,10 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, can.page.Append(can, target, [{input: ["cmd", function(event) { can.onkeypop.input(event, can); if (event.key != "Enter") { return } switch (event.target.value) { - case "close": can.cli && can.cli.close(); break - case "clear": can.cli && can.cli.close(); break + case cli.CLOSE: can.cli && can.cli.close(); break + case cli.CLEAR: can.cli && can.cli.close(); break default: - can.run(event, [cli.RUN].concat(can.core.Split(event.target.value+" ")), function(msg) { + can.run(event, [cli.RUN].concat(can.core.Split(event.target.value, ice.SP)), function(msg) { can.cli && can.cli.close() can.cli = can.onappend.float(can, msg, function(value, key, index, line, list) { @@ -44,8 +44,8 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }]}]) }, - toast: function(can, msg, title, content, fileline, time) { can._toast = can._toast || can.request() - can.page.Modify(can, can.toast, [time.split(" ").pop(), title, content].join(" ")) + toast: function(can, msg, title, content, fileline, time) { can._toast = can._toast||can.request() + can.page.Modify(can, can.toast, [time.split(ice.SP).pop(), title, content].join(ice.SP)) can._toast.Push({time: time, fileline: fileline, title: title, content: content}) }, ncmd: function(can, msg, follow, cmds) { const NCMD = "ncmd"; can._cmds = can._cmds || can.request() @@ -73,15 +73,15 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, } can.search({}, ["Action.onexport.size"], function(msg, top, left, width, height) { - can.onappend.plugin(can, {index: cmds[0], args: cmds.slice(1), width: width, height: height-100}, function(sub) { + can.onappend.plugin(can, {index: cmds[0], args: cmds.slice(1), height: height-100, width: width}, function(sub) { sub.run = function(event, cmds, cb) { can.run(event, can.misc.Concat([ctx.ACTION, cli.RUN, cmds[0]], cmds), cb) } - can.page.Modify(can, sub._output, {style: {"max-width": width}}) can.page.Modify(can, sub._target, {style: {top: top+100, left: left}}) - can.page.Modify(can, sub._legend, {style: {display: "block"}}) - can.page.ClassList.add(can, sub._target, "float") + can.page.Modify(can, sub._legend, {style: {display: html.BLOCK}}) + can.page.Modify(can, sub._output, {style: {"max-width": width}}) + can.page.ClassList.add(can, sub._target, chat.FLOAT) }, document.body) }) }).first diff --git a/panel/header.js b/panel/header.js index 90f90cdd..43f9869f 100644 --- a/panel/header.js +++ b/panel/header.js @@ -19,7 +19,7 @@ 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, cli.POD)) { + } else if (can.user.Search(can, ice.POD)) { can.onaction.River(can) can.onaction.Footer(can) } @@ -33,32 +33,32 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, can.user.Search(can, chat.GRANT, "") } }, - _title: function(can, msg, target) { const TITLE = chat.TITLE - can.user.title(can.user.Search(can, TITLE)||can.user.Search(can, cli.POD)) + _title: function(can, msg, target) { + can.user.title(can.user.Search(can, chat.TITLE)||can.user.Search(can, cli.POD)) !can.user.isMobile && can.core.List(msg.result||["shylinux.com/x/contexts"], function(item) { - can.page.Append(can, target, [{view: [TITLE, html.DIV, item], title: "返回主页", onclick: function(event) { + can.page.Append(can, target, [{view: [chat.TITLE, html.DIV, item], title: "返回主页", onclick: function(event) { can.onaction.title(event, can) }}]) }) }, - _state: function(can, msg, target) { const STATE = "state" - can.core.List(can.base.Obj(can.Conf(STATE)||msg.Option(STATE), [kit.MDB_TIME, aaa.USERNAME]), function(item) { + _state: function(can, msg, target) { + can.core.List(can.base.Obj(msg.Option(chat.STATE)||can.Conf(chat.STATE), [kit.MDB_TIME, aaa.USERNAME]), function(item) { if (item == aaa.AVATAR) { - can.page.Append(can, target, [{view: [STATE+" "+item], list: [{img: can.Conf(item)||" "}], onmouseenter: function(event) { + can.page.Append(can, target, [{view: can.base.join([chat.STATE, item]), list: [{img: can.Conf(item)||ice.SP}], onmouseenter: function(event) { can.onaction.carte(event, can, [can.page.Format(html.IMG, can.Conf(item), 160)]) }}]) return } - can.page.Append(can, target, [{view: [STATE+" "+item, html.DIV, (can.Conf(item)||"").slice(0, 10)], onmouseenter: function(event) { + can.page.Append(can, target, [{view: [can.base.join([chat.STATE, item]), html.DIV, (can.Conf(item)||"").slice(0, 10)], onmouseenter: function(event) { can.core.CallFunc([can.onaction, item], [event, can, item]) }, _init: function(target) { item == kit.MDB_TIME && can.onimport._time(can, target) }}]) }) }, - _search: function(can, msg, target) { const SEARCH = "search" - var ui = can.page.Append(can, target, [{view: SEARCH, list: [{type: "input", data: {type: "text", placeholder: SEARCH}, onkeydown: function(event) { + _search: function(can, msg, target) { + var ui = can.page.Append(can, target, [{view: mdb.SEARCH, list: [{type: html.INPUT, data: {type: html.TEXT, placeholder: mdb.SEARCH}, onkeydown: function(event) { can.onkeypop.input(event, can); switch (event.key) { case "Enter": can.search(event, ["Search.onimport.select", "*", event.target.value]); break } @@ -66,12 +66,11 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, can.user.isMobile && can.page.Modify(can, ui.first, {style: {float: "right"}}) }, _background: function(can, msg) { - if (can.user.isLocalFile) { return } - if (can.user.isExtension) { return } + if (can.user.isExtension || can.user.isLocalFile) { return } can.onlayout.background(can, msg.Option(aaa.BACKGROUND), document.body) }, _menus: function(can, msg, target) { - var menus = can.base.Obj(can.Conf(chat.MENUS)||msg.Option(chat.MENUS), [chat.HEADER, ["setting", "black", "white", "print"]]) + var menus = can.base.Obj(msg.Option(chat.MENUS)||can.Conf(chat.MENUS), [chat.HEADER, ["setting", chat.BLACK, chat.WHITE, chat.PRINT]]) can.onimport.menu(can, can.user.isMobile||can.user.isExtension||can.user.Search(can, cli.POD)? [chat.HEADER, chat.RIVER]: menus, function(event, item) { can.core.CallFunc(can.onaction[item]||function(event, can) { can.run(event, [item], function(msg) { can.user.toast(can, "执行成功", can.user.trans(can, item)) }) @@ -81,7 +80,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, _weixin: function(can, msg) { can.run({}, [ctx.ACTION, chat.AGENT], function(msg) { can.require(can.base.Obj(msg.Option(ssh.SCRIPT)), function(can) { - wx.config({debug: msg.Option("debug") == "true", + wx.config({debug: msg.Option("debug") == ice.TRUE, appId: msg.Option("appid"), signature: msg.Option("signature"), nonceStr: msg.Option("noncestr"), timestamp: msg.Option("timestamp"), @@ -122,19 +121,19 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }, menu: function(can, cmds, cb) { 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", html.DIV, can.user.trans(can, item)], onclick: function(event) { + if (can.base.isString(item)) { + return {view: [html.MENU, html.DIV, can.user.trans(can, item)], onclick: function(event) { can.base.isFunc(cb) && cb(event, item, cmds) }} } else if (item.length > 0) { - return {view: ["menu", html.DIV, can.user.trans(can, item[0])], onmouseenter: function(event) { + return {view: [html.MENU, html.DIV, can.user.trans(can, item[0])], onmouseenter: function(event) { can.onaction.carte(event, can, item.slice(1), function(event, button) { can.base.isFunc(cb) && cb(event, button, item) }) }} - } else if (typeof item == "object") { + } else if (can.base.isObject(item)) { return item } }) }]).first @@ -156,7 +155,6 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, meta, _trans: { "river": "菜单", "search": "搜索", - "create": "创建", "share": "共享", @@ -173,12 +171,14 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, meta, "print": "打印主题", "shareuser": "共享用户", + "language": "语言", + "chinese": "中文", "clear": "清除背景", }, onmain: function(can, msg) { function init() { can.run({}, [], function(msg) { can.base.Copy(can.onaction._trans, can.base.Obj(msg.Option(chat.TRANS), {})) - can.onimport._init(can, msg, [], function(msg) { can.onengine.signal(can, "onlogin", msg) }, can._output) + can.onimport._init(can, msg, [], function(msg) { can.onengine.signal(can, chat.ONLOGIN, msg) }, can._output) can.search({}, ["River.onmotion.toggle"]) }) }; can.search({}, ["River.onmotion.hidden"]) @@ -186,7 +186,7 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, meta, // 登录检查 can.user.isLocalFile? init(): can.run({}, [chat.CHECK], function(msg) { can.Conf(aaa.USERNAME, msg.Option(ice.MSG_USERNAME))? init(): - msg.Option("sso")? can.user.jumps(msg.Option("sso")): can.user.login(can, init, msg.Option("login")) + msg.Option(chat.SSO)? can.user.jumps(msg.Option(chat.SSO)): can.user.login(can, init, msg.Option(aaa.LOGIN)) }) }, onstorm_select: function(can, msg, river, storm) { @@ -194,34 +194,22 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, meta, }, title: function(event, can) { - var args = {}; can.core.List([chat.TITLE, chat.TOPIC, "layout"], function(key) { + var args = {}; can.core.List([chat.TITLE, chat.TOPIC, chat.LAYOUT], function(key) { var value = can.user.Search(can, key); value && (args[key] = value) }) can.user.jumps(can.user.MergeURL(can, args, true)) }, - carte: function(event, can, list, cb) { can.user.carte(event, can, can.onaction, list, cb) }, river: function(event, can) { can.onaction.River(can) }, - black: function(event, can, button) { - can.onlayout.topic(can, button) - can.onlayout._init(can) - }, - white: function(event, can, button) { - can.onlayout.topic(can, button) - can.onlayout._init(can) - }, - print: function(event, can, button) { - can.onlayout.topic(can, "white print") - - can.set("River", "height", -1) - can.set("Action", "height", -1) + black: function(event, can, button) { can.onlayout.topic(can, button), can.onlayout._init(can) }, + white: function(event, can, button) { can.onlayout.topic(can, button), can.onlayout._init(can) }, + print: function(event, can, button) { can.onlayout.topic(can, can.base.join([chat.WHITE, button])) + can.set("River", chat.HEIGHT, -1), can.set("Action", chat.HEIGHT, -1) }, webpack: function(event, can) { - can.user.input(event, can, [ - {name: "name", value: can.user.title()}, - ], function(ev, button, meta, list) { + can.user.input(event, can, [{name: kit.MDB_NAME, value: can.user.title()}], function(ev, button, meta, list) { can.core.Item(Volcanos.meta.pack, function(key, msg) { - can.core.List(["_event", "_can", "_xhr", "sessid", ""], function(key) { delete(msg[key]) }) + can.core.List(["_event", "_can", "_xhr", ice.MSG_SESSID, ""], function(key) { delete(msg[key]) }) }) var msg = can.request(event, { name: meta.name, content: JSON.stringify(Volcanos.meta.pack), @@ -236,34 +224,26 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, meta, }) }, + + carte: function(event, can, list, cb) { can.user.carte(event, can, can.onaction, list, cb) }, + share: function(event, can, arg) { can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE].concat(arg||[])) }, + username: function(event, can) { - can.onaction.carte(event, can, ["shareuser", aaa.USERNICK, "clear", aaa.LOGOUT, "english", "chinese"]) - }, - english: function(event, can) { - can.user.Search(can, "language", "en") - }, - chinese: function(event, can) { - can.user.Search(can, "language", "zh") - }, - shareuser: function(event, can) { - can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE, kit.MDB_TYPE, aaa.LOGIN]) - }, - share: function(event, can, arg) { - can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE].concat(arg||[])) + can.onaction.carte(event, can, ["shareuser", aaa.USERNICK, [aaa.LANGUAGE, aaa.ENGLISH, aaa.CHINESE], "clear", aaa.LOGOUT]) }, + shareuser: function(event, can) { can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE, kit.MDB_TYPE, aaa.LOGIN]) }, usernick: function(event, can) { can.user.input(event, can, [{name: aaa.USERNICK, value: can.Conf(aaa.USERNAME)}], function(ev, button, data, list, args) { can.run(event, [aaa.USERNICK, list[0]], function(msg) { - can.page.Select(can, can._output, "div.username", function(item) { + can.page.Select(can, can._output, can.base.Keys(html.DIV, aaa.USERNAME), function(item) { can.page.Modify(can, item, can.Conf(aaa.USERNAME, list[0])) }), can.user.toast(can, "修改成功") }, true) }) }, - clear: function(event, can, button) { - can.onimport.background(event, can, "") - can.onimport.avatar(event, can, "") - }, + english: function(event, can) { can.user.Search(can, aaa.LANGUAGE, "en") }, + chinese: function(event, can) { can.user.Search(can, aaa.LANGUAGE, "zh") }, + clear: function(event, can, button) { can.onimport.background(event, can, ""), can.onimport.avatar(event, can, "") }, logout: function(event, can) { can.user.logout(can) }, River: function(can) { can.search({}, ["River.onmotion.toggle"]) }, diff --git a/panel/search.js b/panel/search.js index 17f097e3..3c8e7ef8 100644 --- a/panel/search.js +++ b/panel/search.js @@ -1,28 +1,30 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { - can.onmotion.clear(can, can.ui.content) - var table = can.onappend.table(can, msg, function(value, key, index, line, array) { can.Status("count", index+1) - return {text: [key == "text" && can.base.isFunc(line.text) && line.text.help || value, "td"], onclick: function(event) { - can.onaction[can.type == "*"||event.ctrlKey? "plugin": "select"](event, can, index) + can.list = msg.Table(), can.onmotion.clear(can, can.ui.content) + var table = can.onappend.table(can, msg, function(value, key, index, line, array) { can.Status(kit.MDB_TOTAL, index+1) + return {text: [key == kit.MDB_TEXT && can.base.isFunc(line.text) && line.text.help || value, html.TD], onclick: function(event) { + can.onaction[can.type == "*"||event.ctrlKey? chat.PLUGIN: mdb.SELECT](event, can, index) }} }, can.ui.content, can.core.List((msg.Option("sort")||"ctx,cmd,type,name,text").split(","), function(item) { return list.indexOf(item) })); table && can.page.Modify(can, can.ui.display, {style: {width: table.offsetWidth}}) - if (msg.Length() == 1) { - can.page.Select(can, table, "td")[0].click() - } + msg.Length() == 1 && can.page.Select(can, table, html.TD)[0].click() }, _word: function(can, msg, cmds, fields) { can.type = cmds[0] - var res = can.request({}, {word: cmds, fields: fields.join(","), sort: msg.Option("sort"), index: msg.Option("index"), river: msg.Option("river")}) + var cb = can.onaction[cmds[1]]; if (cb) { cb({}, can); return } - if (cmds[1] == "clear") { can.onaction["清空"]({}, can); return } - can.onengine.signal(can, "onsearch", res) - can.run(res._event, cmds, function(res) { - can.list = res.Table() - can.onimport._init(can, res, fields) - }), can.ui.word.setSelectionRange(0, -1) + var res = can.request({}, { + word: cmds, + fields: fields.join(","), + sort: msg.Option("sort"), + index: msg.Option("index"), + river: msg.Option("river"), + }) + can.onengine.signal(can, chat.ONSEARCH, res) + can.run(res._event, cmds, function(res) { can.onimport._init(can, res, fields) }) can.onmotion.show(can), can.ui.input.focus() + can.ui.word.setSelectionRange(0, -1) }, select: function(can, msg, cmds, cb) { can.ui.word.value = cmds[1] @@ -41,31 +43,29 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, } ) }, }) -Volcanos("onaction", {help: "交互操作", list: ["关闭", "清空", "完成"], _init: function(can, meta, list, cb, target) { +Volcanos("onaction", {help: "交互操作", list: [cli.CLEAR, cli.CLOSE, cli.DONE], _init: function(can, meta, list, cb, target) { can.base.isFunc(cb) && cb() }, onlogin: function(can, msg) { - can.onappend._action(can, can.Conf("action")||can.onaction.list) + can.onappend._action(can, can.Conf(html.ACTION)||can.onaction.list) can.ui = can.page.Append(can, can._output, [ {input: ["word", function(event) { can.onkeypop.input(event, can) if (event.key == "Escape") { can.onmotion.hide(can) } if (event.key == "Enter") { event.stopPropagation(), event.preventDefault() - if (event.shiftKey) { - var first = can.page.Select(can, can.ui.content, "tr")[1] - return can.onaction[can.type == "*"? "plugin": "select"](event, can, first.dataset.index) + if (event.shiftKey) { var first = can.page.Select(can, can.ui.content, html.TR)[1] + return can.onaction[can.type == "*"? chat.PLUGIN: html.SELECT](event, can, first.dataset.index) } - if (event.ctrlKey) { return can.onaction["完成"](event, can) } + if (event.ctrlKey) { return can.onaction[cli.DONE](event, can) } can.input(event, event.target.value) } }]}, - {view: "content"}, {view: ["display", "table"]}, {view: "preview"}, - ]) - can.page.ClassList.add(can, can.ui.display, "content") + {view: chat.CONTENT}, {view: [chat.DISPLAY, html.TABLE]}, {view: chat.PROFILE}, + ]), can.page.ClassList.add(can, can.ui.display, chat.CONTENT) }, - "关闭": function(event, can) { can.onmotion.hide(can) }, - "清空": function(event, can) { can.onmotion.clear(can, can.ui.preview) }, - "完成": function(event, can) { can.base.isFunc(can.cb) && can.cb() }, + close: function(event, can) { can.onmotion.hide(can) }, + clear: function(event, can) { can.onmotion.clear(can, can.ui.profile) }, + done: function(event, can) { can.base.isFunc(can.cb) && can.cb() }, select: function(event, can, index) { var line = can.list[index] if (can.base.isFunc(line.text)) { return can.onmotion.hide(can), line.text(event) } @@ -74,32 +74,31 @@ Volcanos("onaction", {help: "交互操作", list: ["关闭", "清空", "完成"] return can.onimport.select(can, msg, [line.type, line.name, line.text], can.cb) } - var fields = can.page.Select(can, can.ui.display, "th", function(item) { return item.innerText }) + var fields = can.page.Select(can, can.ui.display, html.TH, function(item) { return item.innerText }) 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.display, "tr").length-1) - }}]), can.Status("selected", can.page.Select(can, can.ui.display, "tr").length-1) + can.Status(kit.MDB_COUNT, can.page.Select(can, can.ui.display, html.TR).length-1) + }}]), can.Status(kit.MDB_COUNT, can.page.Select(can, can.ui.display, html.TR).length-1) }, plugin: function(event, can, index) { var line = can.list[index] if (can.base.isFunc(line.text)) { return can.onmotion.hide(can), line.text(event) } var cmd = line.cmd == "command"? can.core.Keys(line.text, line.name): can.core.Keys(line.ctx, line.cmd) - can.onappend.plugin(can, {type: "plugin", index: cmd||msg.Option("index")}, function(sub, meta) { - can.search({}, "Action.onexport.size", function(msg, width) { - sub.Conf("width", width-60) - }) + can.onappend.plugin(can, {type: chat.PLUGIN, index: cmd||msg.Option(kit.MDB_INDEX)}, function(sub, meta) { + can.search({}, "Action.onexport.size", function(msg, width) { sub.Conf(chat.WIDTH, width-60) }) + sub.run = function(event, cmds, cb) { var msg = can.request(event, line) can.run(event, can.misc.Concat([ctx.ACTION, cli.RUN, meta.index], cmds), cb) } - }, can.ui.preview) + }, can.ui.profile) }, }) -Volcanos("onexport", {help: "导出数据", list: ["selected", "count"], +Volcanos("onexport", {help: "导出数据", list: [kit.MDB_COUNT, kit.MDB_TOTAL], select: function(can) { - return can.page.Select(can, can.ui.display, "tr", function(tr) { - return can.page.Select(can, tr, "td", function(td) { return td.innerHTML }) + return can.page.Select(can, can.ui.display, html.TR, function(tr) { + return can.page.Select(can, tr, html.TD, function(td) { return td.innerHTML }) }).slice(1) }, }) diff --git a/plugin/input.js b/plugin/input.js index 53134ba1..646392c5 100644 --- a/plugin/input.js +++ b/plugin/input.js @@ -1,42 +1,36 @@ -var _can_name = "/plugin/input.js" +_can_name = "/plugin/input.js" Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, meta, list, cb, target) { }, }) Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, meta, list, cb, target) { can.base.isFunc(cb) && cb(); switch (meta.type) { - case "select": meta.value && (target.value = meta.value); break - case "button": meta.action == "auto" && target.click(); break + case html.SELECT: meta.value && (target.value = meta.value); break + case html.BUTTON: meta.action == ice.AUTO && target.click(); break } }, - "run": function(event, can) { - var title = can.sup._name+" "+can.sup.Input([], true) + run: function(event, can) { + var title = can.sup._name+ice.SP+can.sup.Input([], true) var toast = can.user.toast(can, "执行中...", title, -1) can.run(event, [], function() { toast.close(), can.user.toast(can, "执行成功...", title) }) }, - "refresh": function(event, can) { can.run(event) }, - "list": function(event, can) { can.run(event) }, - "back": function(event, can) { can.sup.onimport._back(can.sup) }, + list: function(event, can) { can.run(event) }, + back: function(event, can) { can.sup.onimport._back(can.sup) }, + refresh: function(event, can) { can.run(event) }, - onchange: function(event, can) { - if (can.Conf("type") == "select") { can.run(event) } - }, - ondblclick: function(event, can) { - if (can.Conf("type") == "text") { event.target.setSelectionRange(0, -1) } - }, onclick: function(event, can) { - if (can.Conf("type") == "button") { can.run(event, [ctx.ACTION, can.Conf("name")].concat(can.sup.Input())) } + if (can.Conf(kit.MDB_TYPE) == html.BUTTON) { can.run(event, [ctx.ACTION, can.Conf(kit.MDB_NAME)].concat(can.sup.Input())) } }, - - onkeydown: function(event, can) { var target = event.target - switch (can.Conf("type")) { - case "textarea": if (!event.ctrlKey) { return } - } - can.onkeypop.input(event, can, target); switch (event.key) { - case "Enter": - switch (can.Conf("type")) { - case "textarea": if (!event.ctrlKey) { return } - case "text": event.target.setSelectionRange(0, -1); break + onchange: function(event, can) { + if (can.Conf(kit.MDB_TYPE) == html.SELECT) { can.run(event) } + }, + onkeydown: function(event, can) { + if (can.Conf(kit.MDB_TYPE) == html.TEXTAREA) { if (!event.ctrlKey) { return } } + can.onkeypop.input(event, can, event.target); switch (event.key) { + case lang.ENTER: + switch (can.Conf(kit.MDB_TYPE)) { + case html.TEXTAREA: if (!event.ctrlKey) { return } + case html.TEXT: event.target.setSelectionRange(0, -1); break }; can.run(event), event.stopPropagation(), event.preventDefault(); break case "b": if (event.ctrlKey) { can.CloneInput() } break case "m": if (event.ctrlKey) { can.CloneField() } break @@ -44,4 +38,4 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, meta, }, }) Volcanos("onexport", {help: "导出数据", list: []}) -var _can_name = "" +_can_name = "" diff --git a/plugin/input/date.js b/plugin/input/date.js index 45fab1e4..5ffefc5c 100644 --- a/plugin/input/date.js +++ b/plugin/input/date.js @@ -1,16 +1,16 @@ Volcanos("onfigure", {help: "控件详情", list: [], date: {onclick: function(event, can, meta, cb, target) { function set(now) { target.value = can.base.Time(now), can.page.Remove(can, can._target) - meta && meta.action == "auto" && can.run({}) + meta && meta.action == ice.AUTO && can.run({}) } // 添加控件 var now = target.value? new Date(target.value): new Date() - can.onappend._action(can, ["关闭", + can.onappend._action(can, [cli.CLOSE, ["hour"].concat(can.core.List(24)), ["minute"].concat(can.core.List(0, 60, 5)), ["second"].concat(can.core.List(0, 60, 5)), "今天", "", "上一月", ["year"].concat(can.core.List(now.getFullYear() - 10, now.getFullYear() + 10)), ["month"].concat(can.core.List(1, 13)), "下一月", ], can._action, { - "关闭": function(event) { can.page.Remove(can, can._target) }, + close: function(event) { can.page.Remove(can, can._target) }, "hour": function(event, can, key, value) { now.setHours(parseInt(value)||0), show(now) }, "minute": function(event, can, key, value) { now.setMinutes(parseInt(value)||0), show(now) }, "second": function(event, can, key, value) { now.setSeconds(parseInt(value)||0), show(now) }, @@ -26,7 +26,7 @@ Volcanos("onfigure", {help: "控件详情", list: [], date: {onclick: function(e "后一年": function(event) { now.setFullYear(now.getFullYear()+1), show(now) }, }) - can._table = can.page.Append(can, can._output, [{view: ["content", "table"]}]).first + can._table = can.page.Append(can, can._output, [{view: [chat.CONTENT, html.TABLE]}]).first var today = new Date(); function show(now) { // 设置控件 can.Action("month", now.getMonth()+1) @@ -37,8 +37,8 @@ Volcanos("onfigure", {help: "控件详情", list: [], date: {onclick: function(e // 设置组件 can.page.Appends(can, can._table, [{th: ["日", "一", "二", "三", "四", "五", "六"]}]) - var tr; function add(day, type) { if (day.getDay() == 0) { tr = can.page.Append(can, can._table, [{type: "tr"}]).last } - can.page.Append(can, tr, [{text: [day.getDate(), "td", can.base.Time(today, "%y-%m-%d") == can.base.Time(day, "%y-%m-%d")? "select": type], + var tr; function add(day, type) { if (day.getDay() == 0) { tr = can.page.Append(can, can._table, [{type: html.TR}]).last } + can.page.Append(can, tr, [{text: [day.getDate(), html.TD, can.base.Time(today, "%y-%m-%d") == can.base.Time(day, "%y-%m-%d")? html.SELECT: type], dataset: {date: day.getTime()}, onclick: function(event) { set(now = new Date(parseInt(event.target.dataset.date))) }, diff --git a/plugin/input/key.js b/plugin/input/key.js index 768d3f5e..84a5db8b 100644 --- a/plugin/input/key.js +++ b/plugin/input/key.js @@ -1,27 +1,22 @@ Volcanos("onfigure", {help: "控件详情", list: [], key: {onclick: function(event, can, meta, cb, target) { - can.run(event, [ctx.ACTION, "inputs", meta.name, target.value], function(msg) { + can.run(event, [ctx.ACTION, mdb.INPUTS, meta.name, target.value], function(msg) { if (msg.Length() == 0) { return can.page.Remove(can, can._target) } - can.onappend._action(can, ["close", "clear"], can._action, { - "close": function(event) { can.page.Remove(can, can._target) }, - "clear": function(event) { target.value = "" }, + can.onappend._action(can, [cli.CLOSE, cli.CLEAR], can._action, { + close: function(event) { can.page.Remove(can, can._target) }, + clear: function(event) { target.value = "" }, }) - function show(msg) { - can.onmotion.clear(can) + function show(msg) { can.onmotion.clear(can) can.onappend.table(can, msg, function(value, key, index, line) { - return {text: [value, "td"], onclick: function() { - target.value = line[key] - msg.Option("_process") == "_again"? can.run({}, [ctx.ACTION, "inputs", meta.name, target.value], function(msg) { + return {text: [value, html.TD], onclick: function() { target.value = line[key] + msg.Option(ice.MSG_PROCESS) == ice.PROCESS_AGAIN? can.run({}, [ctx.ACTION, mdb.INPUTS, meta.name, target.value], function(msg) { show(msg) }): can.page.Remove(can, can._target) - }} - }), can.Status("count", msg.Length()) + }), can.Status(kit.MDB_COUNT, msg.Length()) } - show(msg) - - can.onlayout.figure(event, can) + show(msg), can.onlayout.figure(event, can) }) }}}) diff --git a/plugin/input/province.js b/plugin/input/province.js index b05e03bc..09aecfbc 100644 --- a/plugin/input/province.js +++ b/plugin/input/province.js @@ -1,14 +1,14 @@ Volcanos("onfigure", {help: "控件详情", list: [], province: {onclick: function(event, can, meta, cb, target) { - can.require(["/require/shylinux.com/x/echarts/echarts.js","/require/shylinux.com/x/echarts/china.js"], function() { - can.onappend._action(can, ["关闭", "清空"], can._action, { - "关闭": function(event) { can.page.Remove(can, can._target) }, - "清空": function(event) { target.value = "" }, + can.require(["/require/github.com/shylinux/echarts/echarts.js", "/require/github.com/shylinux/echarts/china.js"], function() { + can.onappend._action(can, [cli.CLOSE, cli.CLEAR], can._action, { + close: function(event) { can.page.Remove(can, can._target) }, + clear: function(event) { target.value = "" }, }) - var china_chart = echarts.init(can.page.Append(can, can._output, [{type: "div", style: {width: "600px", height: "400px"}}]).first) + var china_chart = echarts.init(can.page.Append(can, can._output, [{type: html.DIVk, style: {width: "600px", height: "400px"}}]).first) china_chart.setOption({geo: {map: 'china'}}), china_chart.on('click', function (params) { target.value = params.name, can.page.Remove(can, can._target) - }), can.Status("count", 34) + }), can.Status(kit.MDB_COUNT, 34) can.onlayout.figure(event, can) }) }}, }) diff --git a/plugin/state.js b/plugin/state.js index 6ed9191a..76f0e6ab 100644 --- a/plugin/state.js +++ b/plugin/state.js @@ -1,4 +1,4 @@ -var _can_name = "/plugin/state.js" +_can_name = "/plugin/state.js" Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf, list, cb, target) { }, _process: function(can, msg) { @@ -237,4 +237,4 @@ Volcanos("onaction", {help: "交互操作", list: [ close: function(event, can) { can.page.Remove(can, can._target) }, }) Volcanos("onexport", {help: "导出数据", list: []}) -var _can_name = "" +_can_name = "" diff --git a/plugin/table.js b/plugin/table.js index 9d024ba7..1eb18822 100644 --- a/plugin/table.js +++ b/plugin/table.js @@ -1,23 +1,17 @@ -var _can_name = "/plugin/table.js" +_can_name = "/plugin/table.js" Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { - can.onmotion.clear(can), can.base.isFunc(cb) && cb(msg) + can.onmotion.clear(can) can.onappend.table(can, msg) can.onappend.board(can, msg) can.onmotion.story.auto(can, target) + can.base.isFunc(cb) && cb(msg) }, _process: function(can, msg) { - if (msg.Option("sess.toast")) { - can.user.toast(can, msg.Option("sess.toast")) - } - return can.core.CallFunc([can.onimport, msg.Option("_process")], [can, msg]) - }, - - _control: function(can, msg) { - var cb = can.onimport[msg.Option("_control")] - return can.base.isFunc(cb) && cb(can, msg) + msg.Option(ice.MSG_TOAST) && can.user.toast(can, msg.Option(ice.MSG_TOAST)) + return can.core.CallFunc([can.onimport, msg.Option(ice.MSG_PROCESS)], [can, msg]) }, }) Volcanos("onaction", {help: "控件交互", list: []}) Volcanos("onexport", {help: "导出数据", list: []}) -var _can_name = "" +_can_name = "" diff --git a/proto.js b/proto.js index ad05de5b..6ed410c9 100644 --- a/proto.js +++ b/proto.js @@ -17,9 +17,8 @@ const kit = { MDB_LIST: "list", } const ice = { - SP: " ", - PT: ".", - NL: "\n", + SP: " ", PT: ".", NL: "\n", + POD: "pod", CTX: "ctx", CMD: "cmd", ARG: "arg", OPT: "opt", TRUE: "true", @@ -28,59 +27,55 @@ const ice = { MSG_TITLE: "sess.title", MSG_RIVER: "sess.river", MSG_STORM: "sess.storm", + MSG_TOAST: "sess.toast", MSG_FIELDS: "fields", + MSG_SESSID: "sessid", MSG_APPEND: "append", MSG_TARGET: "_target", + MSG_HANDLE: "_handle", MSG_ACTION: "_action", MSG_STATUS: "_status", - MSG_HANDLE: "_handle", MSG_DISPLAY: "_display", + MSG_PROCESS: "_process", + + PROCESS_AGAIN: "_again", + + AUTO: "auto", } const ctx = { - CONTEXT: "context", - COMMAND: "command", + CONTEXT: "context", COMMAND: "command", CONFIG: "config", ACTION: "action", - CONFIG: "config", } const cli = { RUN: "run", - POD: "pod", - CTX: "ctx", - CMD: "cmd", - ARG: "arg", - - OPEN: "open", - CLOSE: "close", - START: "start", - STOP: "stop", + POD: "pod", CTX: "ctx", CMD: "cmd", ARG: "arg", OPT: "opt", + OPEN: "open", CLOSE: "close", START: "start", STOP: "stop", + CLEAR: "clear", + DONE: "done", } const web = { SHARE: "share", SPACE: "space", } const aaa = { - USERNAME: "username", - USERNICK: "usernick", - BACKGROUND: "background", - AVATAR: "avatar", + USERNAME: "username", USERNICK: "usernick", BACKGROUND: "background", AVATAR: "avatar", - LOGIN: "login", - LOGOUT: "logout", - INVITE: "invite", + LANGUAGE: "language", ENGLISH: "english", CHINESE: "chinese", + + LOGIN: "login", LOGOUT: "logout", INVITE: "invite", } const mdb = { - CREATE: "create", - REMOVE: "remove", - INSERT: "insert", - MODIFY: "modify", + CREATE: "create", REMOVE: "remove", INSERT: "insert", DELETE: "delete", + MODIFY: "modify", SELECT: "select", PLUGIN: "plugin", + SEARCH: "search", + INPUTS: "inputs", - HASH: "hash", - LIST: "list", + META: "meta", HASH: "hash", LIST: "list", } const ssh = { SCRIPT: "script", @@ -96,70 +91,30 @@ const code = { WEBPACK: "webpack", } const wiki = { - TITLE: "title", - BRIEF: "brief", - REFER: "refer", - SPARK: "spark", - - CHART: "chart", - IMAGE: "image", - VIDEO: "video", - - FIELD: "field", - SHELL: "shell", + TITLE: "title", BRIEF: "brief", REFER: "refer", SPARK: "spark", + ORDER: "order", TABLE: "table", CHART: "chart", IMAGE: "image", VIDEO: "video", + FIELD: "field", SHELL: "shell", LOCAL: "local", PARSE: "parse", } const chat = { - LIB: "lib", - PAGE: "page", - PANEL: "panel", - PLUGIN: "plugin", + LIB: "lib", PAGE: "page", PANEL: "panel", PLUGIN: "plugin", + STORY: "story", CARTE: "carte", INPUT: "input", FLOAT: "float", + HEAD: "head", AUTO: "auto", LEFT: "left", MAIN: "main", FOOT: "foot", + SCROLL: "scroll", HEIGHT: "height", WIDTH: "width", LEFT: "left", TOP: "top", - STORY: "story", - CARTE: "carte", - INPUT: "input", - FLOAT: "float", + LAYOUT: "layout", PROJECT: "project", CONTENT: "content", DISPLAY: "display", PROFILE: "profile", - LAYOUT: "layout", - PROJECT: "project", - CONTENT: "content", - DISPLAY: "display", - PROFILE: "profile", + PUBLIC: "public", PROTECTED: "protected", PRIVATE: "private", + USER: "user", TOOL: "tool", NODE: "node", - HEAD: "head", LEFT: "left", MAIN: "main", FOOT: "foot", + HEADER: "header", FOOTER: "footer", + ONMAIN: "onmain", ONSIZE: "onsize", ONLOGIN: "onlogin", ONSEARCH: "onsearch", - SCROLL: "scroll", - HEIGHT: "height", - WIDTH: "width", - TOP: "top", - LEFT: "left", + RIVER: "river", STORM: "storm", FIELD: "field", TOAST: "toast", + TOPIC: "topic", BLACK: "black", WHITE: "white", PRINT: "print", - USER: "user", - TOOL: "tool", - NODE: "node", - - PUBLIC: "public", - PROTECTED: "protected", - PRIVATE: "private", - - HEADER: "header", - ONMAIN: "onmain", - ONSIZE: "onsize", - - RIVER: "river", - STORM: "storm", - FIELD: "field", - - TOPIC: "topic", - BLACK: "black", - WHITE: "white", - - TITLE: "title", - MENUS: "menus", - TRANS: "trans", - AGENT: "agent", - CHECK: "check", - SHARE: "share", - GRANT: "grant", + AGENT: "agent", CHECK: "check", GRANT: "grant", SHARE: "share", + TITLE: "title", STATE: "state", MENUS: "menus", TRANS: "trans", + SSO: "sso", CMD_MARGIN: 53, } const team = { @@ -172,44 +127,28 @@ const mall = { } const html = { - FIELDSET: "fieldset", - LEGEND: "legend", - OPTION: "option", - ACTION: "action", - OUTPUT: "output", - STATUS: "status", + FIELDSET: "fieldset", LEGEND: "legend", OPTION: "option", ACTION: "action", OUTPUT: "output", STATUS: "status", + FORM_OPTION: "form.option", DIV_ACTION: "div.action", DIV_OUTPUT: "div.output", DIV_STATUS: "div.status", - FORM_OPTION: "form.option", - DIV_ACTION: "div.action", - DIV_OUTPUT: "div.output", - DIV_STATUS: "div.status", - - INPUT: "input", INPUT_ARGS: ".args", - TEXT: "text", TEXTAREA: "textarea", - SELECT: "select", - BUTTON: "button", - SPACE: "space", + INPUT: "input", INPUT_ARGS: ".args", TEXT: "text", TEXTAREA: "textarea", SELECT: "select", BUTTON: "button", + SPACE: "space", BLOCK: "block", NONE: "none", BR: "br", TABLE: "table", TR: "tr", TH: "th", TD: "td", DIV: "div", IMG: "img", - CODE: "code", SPAN: "span", - NONE: "none", - BLOCK: "block", + CODE: "code", LABEL: "label", VIDEO: "video", - FORM: "form", - FILE: "file", - LIST: "list", - ITEM: "item", + FORM: "form", FILE: "file", + LIST: "list", ITEM: "item", MENU: "menu", } const lang = { - STRING: "string", - OBJECT: "object", - FUNCTION: "function", + STRING: "string", OBJECT: "object", FUNCTION: "function", + + ENTER: "Enter", } function shy(help, meta, list, cb) { @@ -219,26 +158,24 @@ function shy(help, meta, list, cb) { } } - cb = args[args.length-1] || function() {} - cb.help = next(lang.STRING) || "" - cb.meta = next(lang.OBJECT) || {} - cb.list = next(lang.OBJECT) || [] + cb = args[args.length-1]||function() {} + cb.help = next(lang.STRING)||"" + cb.meta = next(lang.OBJECT)|| {} + cb.list = next(lang.OBJECT)||[] return cb }; var _can_name = "" var Volcanos = shy("火山架", {iceberg: "/chat/", volcano: "/frame.js", args: {}, pack: {}, libs: [], cache: {}}, function(name, can, libs, cb) { var meta = arguments.callee.meta, list = arguments.callee.list if (typeof name == lang.OBJECT) { var Config = name; Config.panels = Config.panels||[], Config.main = Config.main||{} - meta.libs = ["/lib/base.js", "/lib/core.js", "/lib/misc.js", "/lib/page.js", "/lib/user.js"] + libs = [], meta.libs = ["/lib/base.js", "/lib/core.js", "/lib/misc.js", "/lib/page.js", "/lib/user.js"] // 预加载 - var Preload = Config.preload||[] for (var i = 0; i < Config.panels.length; i++) { var panel = Config.panels[i] - panel && (Preload = Preload.concat(panel.list = panel.list || ["/panel/"+panel.name+".css", "/panel/"+panel.name+".js"])) - }; Preload = Preload.concat(Config.plugin, Config.main.list) + panel && (libs = libs.concat(panel.list = panel.list||["/panel/"+panel.name+".css", "/panel/"+panel.name+".js"])) + }; libs = libs.concat(Config.plugin, Config.main.list) // 根模块 - name = Config.name, can = {_follow: Config.name, _target: Config.target||document.body} - libs = Preload.concat(meta.libs, meta.volcano), cb = function(can) { + name = Config.name, can = {_follow: Config.name, _target: Config.target||document.body}, cb = function(can) { can.onengine._init(can, can.Conf(Config), Config.panels, Config._init, can._target) }, _can_name = "", can._root = can } @@ -251,8 +188,6 @@ var Volcanos = shy("火山架", {iceberg: "/chat/", volcano: "/frame.js", args: // 加载模块 for (var i = 0; i < cache.length; i++) { var sub = cache[i] if (typeof cb == lang.FUNCTION && cb(can, name, sub)) { continue } - if (can[sub._name] && can[sub._name]._merge && can[sub._name]._merge(can, sub)) { continue } - if (sub._name == "onkeypop") { can[sub._name] = sub; continue } !can[sub._name] && (can[sub._name] = {}); for (var k in sub) { can[sub._name].hasOwnProperty(k) || (can[sub._name][k] = sub[k]) } @@ -271,7 +206,7 @@ var Volcanos = shy("火山架", {iceberg: "/chat/", volcano: "/frame.js", args: }, request: function(event, option) { event = event||{} var msg = event._msg||can.misc.Message(event, can); event._msg = msg - function set(key, value) { msg[key] == undefined && msg.Option(key, value) } + function set(key, value) { can.base.isUndefined(msg[key]) && msg.Option(key, value) } can.core.List(arguments, function(option, index) { if (index == 0) { return } can.base.isFunc(option.Option)? can.core.List(option.Option(), function(key) { @@ -280,8 +215,7 @@ var Volcanos = shy("火山架", {iceberg: "/chat/", volcano: "/frame.js", args: }); return msg }, - set: function(name, key, value) { - var msg = can.request({}); msg.Option(key, value) + set: function(name, key, value) { var msg = can.request({}); msg.Option(key, value) return can.search(msg._event, [can.base.Keys(name, "onimport", key)]) }, get: function(name, key) { return can.search({}, [can.base.Keys(name, "onexport", key)]) }, @@ -291,8 +225,7 @@ var Volcanos = shy("火山架", {iceberg: "/chat/", volcano: "/frame.js", args: } if (_can_name) { // 加入缓存 - meta.cache[_can_name] = meta.cache[_can_name]||[] - meta.cache[_can_name].push(can) + meta.cache[_can_name] = meta.cache[_can_name]||[], meta.cache[_can_name].push(can) } else { // 加入队列 list.push(can) } @@ -314,7 +247,7 @@ Volcanos.meta._load = function(url, cb) { } function cmd(tool) { Volcanos({name: "chat", panels: [ - {name: "cmd", help: "工作台", pos: "main", tool: tool}, + {name: "cmd", help: "工作台", pos: chat.MAIN, tool: tool}, ], main: {name: "cmd", list: []}, plugin: [ "/plugin/state.js", "/plugin/input.js", diff --git a/publish/chrome/popup.html b/publish/chrome/popup.html index e3e0e7b9..113f26a1 100644 --- a/publish/chrome/popup.html +++ b/publish/chrome/popup.html @@ -5,6 +5,5 @@ - diff --git a/publish/chrome/popup.js b/publish/chrome/popup.js index 73a627ce..a1b9d779 100644 --- a/publish/chrome/popup.js +++ b/publish/chrome/popup.js @@ -1,5 +1,4 @@ -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"], panels: [ +Volcanos({name: "demo", iceberg: "http://localhost:9020/chat/", panels: [ {name: "Header", help: "标题栏", pos: "head", state: ["time", "username"]}, {name: "Search", help: "搜索框", pos: "auto"}, {name: "River", help: "群聊组", pos: "left", action: ["create", "refresh"]}, @@ -8,42 +7,39 @@ Volcanos({name: "demo", iceberg: "http://localhost:9020/chat/", volcano: "/frame ], main: {name: "Header", list: ["/publish/order.js"]}, plugin: [ "/plugin/state.js", "/plugin/input.js", "/plugin/table.js", ], river: { - "serivce": {name: "运营群", storm: { - "wx": {name: "公众号 wx", action: [ + serivce: {name: "运营群", storm: { + wx: {name: "公众号 wx", action: [ {name: "微信公众号", help: "wx", index: "web.wiki.word", args: ["usr/icebergs/misc/wx/wx.shy"]}, ]}, - "mp": {name: "小程序 mp", action: [ + mp: {name: "小程序 mp", action: [ {name: "微信小程序", help: "mp", index: "web.wiki.word", args: ["usr/icebergs/misc/mp/mp.shy"]}, ]}, - "lark": {name: "机器人 lark", action: [ + lark: {name: "机器人 lark", action: [ {name: "飞书机器人", help: "lark", index: "web.wiki.word", args: ["usr/icebergs/misc/lark/lark.shy"]}, ]}, - "share": {name: "上下文 share", action: [ - {name: "系统上下文", help: "shylinux/contexts", index: "web.wiki.word", args: ["usr/learning/社会/管理/20200724.shy"]}, - ]}, }}, - "product": {name: "产品群", storm: { - "office": {name: "办公 office", action: [ + product: {name: "产品群", storm: { + office: {name: "办公 office", action: [ {name: "feel", help: "影音媒体", index: "web.wiki.feel"}, {name: "draw", help: "思维导图", index: "web.wiki.draw"}, {name: "data", help: "数据表格", index: "web.wiki.data"}, {name: "plan", help: "计划任务", index: "web.team.plan"}, {name: "think", help: "智库", index: "web.wiki.word", args: ["usr/learning/"]}, {name: "index", help: "索引", index: "web.wiki.word", args: ["usr/learning/index.shy"]}, - {name: "context", help: "编程", index: "web.wiki.word", args: ["usr/learning/自然/编程/index.shy"]}, + {name: "context", help: "编程", index: "web.wiki.word", args: ["src/main.shy"]}, ]}, - "english": {name: "英汉 english", action: [ + english: {name: "英汉 english", action: [ {name: "english", help: "英汉", index: "web.wiki.alpha.alpha", args: ["word", "hi"]}, {name: "chinese", help: "汉英", index: "web.wiki.alpha.alpha", args: ["line", "你好"]}, {name: "wubi", help: "五笔", index: "web.code.input.wubi", args: ["word", "wqvb"]}, {name: "wubi", help: "五笔", index: "web.code.input.wubi", args: ["line", "你好"]}, ]}, - "learning": {name: "学习 learning", action: [ + learning: {name: "学习 learning", action: [ {name: "golang", help: "编程", index: "web.wiki.word", args: ["usr/golang-story/src/main.shy"]}, {name: "tmux", help: "粘贴", index: "web.code.tmux.text"}, {name: "study", help: "学习", index: "web.wiki.word", args: ["usr/learning/study.shy"]}, ]}, - "chrome": {name: "爬虫 chrome", action: [ + chrome: {name: "爬虫 chrome", action: [ {name: "feel", help: "网页爬虫", index: "web.wiki.feel", args: ["spide/"], feature: { display: "/plugin/local/wiki/feel.js", height: 200, limit: 3, @@ -52,68 +48,69 @@ Volcanos({name: "demo", iceberg: "http://localhost:9020/chat/", volcano: "/frame {name: "spided", help: "网页爬虫", index: "web.code.chrome.spide", args: location && location.protocol && location.protocol=="chrome-extension:"? ["1", "", "spide"]: ["1"]}, ]}, }}, - "project": {name: "研发群", storm: { - "studio": {name: "研发 studio", action: [ + project: {name: "研发群", storm: { + studio: {name: "研发 studio", action: [ {name: "vimer", help: "编辑器", index: "web.code.vimer", args: ["src/", "main.go"]}, {name: "repos", help: "代码库", index: "web.code.git.status"}, {name: "plan", help: "任务表", index: "web.team.plan"}, - {name: "contexts", help: "上下文", index: "web.wiki.word", args: ["src/main.shy"]}, + {name: "ctx", help: "上下文", index: "web.wiki.word", args: ["src/main.shy"]}, ]}, - "cli": {name: "命令 cli", action: [ - {name: "bash", help: "命令行", index: "web.wiki.word", args: ["usr/icebergs/misc/bash/bash.shy"]}, - {name: "tmux", help: "命令行", index: "web.wiki.word", args: ["usr/icebergs/misc/tmux/tmux.shy"]}, - {name: "git", help: "代码库", index: "web.wiki.word", args: ["usr/icebergs/misc/git/git.shy"]}, - {name: "vim", help: "编辑器", index: "web.wiki.word", args: ["usr/icebergs/misc/vim/vim.shy"]}, - {name: "ssh", help: "命令行", index: "web.wiki.word", args: ["usr/icebergs/base/ssh/ssh.shy"]}, - {name: "zsh", help: "命令行", index: "web.wiki.word", args: ["usr/icebergs/misc/bash/zsh.shy"]}, - ]}, - "web": {name: "网页 web", action: [ + web: {name: "网页 web", action: [ {name: "HTML5", help: "浏览器", index: "web.wiki.word", args: ["usr/icebergs/misc/chrome/chrome.shy"]}, ]}, - "linux": {name: "系统 linux", action: [ + cli: {name: "命令 cli", action: [ + {name: "bash", help: "命令行", index: "web.wiki.word", args: ["usr/icebergs/misc/bash/bash.shy"]}, + {name: "git", help: "代码库", index: "web.wiki.word", args: ["usr/icebergs/misc/git/git.shy"]}, + {name: "vim", help: "编辑器", index: "web.wiki.word", args: ["usr/icebergs/misc/vim/vim.shy"]}, + {name: "tmux", help: "命令行", index: "web.wiki.word", args: ["usr/icebergs/misc/tmux/tmux.shy"]}, + ]}, + linux: {name: "系统 linux", action: [ {name: "idc", help: "平台", index: "web.wiki.word", args: ["usr/linux-story/idc/idc.shy"]}, {name: "iso", help: "系统", index: "web.wiki.word", args: ["usr/linux-story/iso/iso.shy"]}, {name: "iot", help: "设备", index: "web.wiki.word", args: ["usr/linux-story/iot/iot.shy"]}, + {name: "cli", help: "命令", index: "web.wiki.word", args: ["usr/linux-story/cli/cli.shy"]}, {name: "linux", help: "系统", index: "web.wiki.word", args: ["usr/linux-story/src/main.shy"]}, ]}, - "nginx": {name: "代理 nginx", action: [ + nginx: {name: "代理 nginx", action: [ {name: "nginx", help: "代理", index: "web.wiki.word", args: ["usr/nginx-story/src/main.shy"]}, ]}, - "context": {name: "编程 context", action: [ - {name: "grafana", help: "可视化", index: "web.wiki.word", args: ["usr/golang-story/src/grafana/grafana.shy"]}, - {name: "gogs", help: "代码库", index: "web.wiki.word", args: ["usr/golang-story/src/gogs/gogs.shy"]}, + context: {name: "编程 context", action: [ {name: "golang", help: "编程", index: "web.wiki.word", args: ["usr/golang-story/src/main.shy"]}, ]}, - "redis": {name: "缓存 redis", action: [ + redis: {name: "缓存 redis", action: [ {name: "redis", help: "缓存", index: "web.wiki.word", args: ["usr/redis-story/src/main.shy"]}, + {name: "kafka", help: "队列", index: "web.wiki.word", args: ["usr/redis-story/src/kafka/kafka.shy"]}, ]}, - "mysql": {name: "数据 mysql", action: [ + mysql: {name: "存储 mysql", action: [ {name: "mysql", help: "数据存储", index: "web.wiki.word", args: ["usr/mysql-story/src/main.shy"]}, + {name: "clickhouse", help: "数据存储", index: "web.wiki.word", args: ["usr/mysql-story/src/clickhouse/clickhouse.shy"]}, ]}, }}, - "profile": {name: "测试群", storm: { - "release": {name: "发布 release", index: [ + profile: {name: "测试群", storm: { + release: {name: "发布 release", index: [ "web.code.publish", "web.code.compile", "web.code.autogen", ]}, - "research": {name: "测试 research", index: [ + research: {name: "测试 research", index: [ "web.code.favor", "web.code.bench", "web.code.pprof", + "web.code.case", ]}, }}, - "operate": {name: "运维群", storm: { - "cli": {name: "系统 cli", index: [ - "qrcode", "daemon", "system", "runtime", - ]}, - "web": {name: "应用 web", index: [ - "spide", "route", "share", "dream", - ]}, - "aaa": {name: "权限 aaa", index: [ + operate: {name: "运维群", storm: { + aaa: {name: "权限 aaa", index: [ "user", "sess", "role", "totp", ]}, - "nfs": {name: "文件 nfs", index: [ + web: {name: "应用 web", index: [ + "spide", "route", "share", "dream", + ]}, + cli: {name: "系统 cli", index: [ + "qrcode", "daemon", "system", "runtime", + ]}, + nfs: {name: "文件 nfs", index: [ "cat", "dir", "tail", "trash", ]}, - "ssh": {name: "脚本 ssh", index: [ + ssh: {name: "脚本 ssh", index: [ "connect", "session", "service", "channel", + "source", "screen", ]}, }}, },