diff --git a/frame.js b/frame.js index b79eadd6..37636838 100644 --- a/frame.js +++ b/frame.js @@ -16,7 +16,7 @@ Volcanos(chat.ONENGINE, {help: "搜索引擎", list: [], _init: function(can, me }, can[item.name] = panel, panel._root = can, panel._trans = panel.onaction && panel.onaction._trans||{} can.core.Item(panel.onplugin, function(key, cmd) { - panel.onplugin.hasOwnProperty(key) && can.base.isFunc(cmd) && can.onengine.plugin(can, key, cmd) + panel.onplugin.hasOwnProperty(key) && can.base.isFunc(cmd) && can.onengine.plugin(panel, key, cmd) }) can.core.ItemCB(panel.onaction, function(key, cb) { can.onengine.listen(can, key, function(msg) { can.core.CallFunc(cb, {can: panel, msg: msg}) }) @@ -84,7 +84,7 @@ Volcanos(chat.ONENGINE, {help: "搜索引擎", list: [], _init: function(can, me } var p = can.onengine.plugin.meta[cmds[0]], n = 1; if (p) { if (p.meta && p.meta[cmds[1]] && cmds[0] == ctx.ACTION) { n = 3 } else if (p.meta && p.meta[cmds[0]]) { n = 2 } - return can.core.CallFunc(p, {can: panel, msg: msg, cmds: cmds.slice(n), cb: cb}), true + return can.core.CallFunc(p, {can: p.can||panel, msg: msg, cmds: cmds.slice(n), cb: cb}), true } return false }, @@ -95,7 +95,7 @@ Volcanos(chat.ONENGINE, {help: "搜索引擎", list: [], _init: function(can, me case lang.STRING: return can.core.SplitInput(item) case lang.OBJECT: return type = item.type||type, item } - }), arguments.callee.meta[can.core.Keys(ice.CAN, name)] = command + }), command.can = can, arguments.callee.meta[can.core.Keys(ice.CAN, name)] = command }), listen: shy("监听事件", function(can, name, cb) { arguments.callee.meta[name] = (arguments.callee.meta[name]||[]).concat(cb) diff --git a/lib/user.js b/lib/user.js index e0352ae1..720466ff 100644 --- a/lib/user.js +++ b/lib/user.js @@ -61,6 +61,7 @@ Volcanos("user", {help: "用户操作", info: {}, agent: { return text && (document.title = Volcanos.meta.args.name||text), document.title }, topic: function(can, name) { + can.base.isArray(name) && (name = can.base.join(name)) can.user.mod.isCmd && (name += " simple") can.Conf("display") && (name += " "+can.Conf("display")) can.user.isMobile && (name += " mobile") && can.user.isLandscape() && (name += " landscape") @@ -360,13 +361,13 @@ Volcanos("user", {help: "用户操作", info: {}, agent: { return action }, - download: function(can, path, name) { - var a = can.page.Append(can, document.body, [{type: html.A, href: path, download: name||path.split(ice.PS).pop()}]).first + download: function(can, path, name, ext) { + var a = can.page.Append(can, document.body, [{type: html.A, href: path, download: can.core.Keys(name, ext)||path.split(ice.PS).pop()}]).first a.click(), can.page.Remove(can, a) return path }, - downloads: function(can, text, name) { if (!text) { return } - return can.user.download(can, URL.createObjectURL(new Blob([text])), name) + downloads: function(can, text, name, ext) { if (!text) { return } + return can.user.download(can, URL.createObjectURL(new Blob([text])), name, ext) }, camera: function(can, msg, cb) { navigator.getUserMedia({video: true}, cb, function(error) { diff --git a/panel/action.js b/panel/action.js index 85d98352..80b63d79 100644 --- a/panel/action.js +++ b/panel/action.js @@ -294,7 +294,7 @@ Volcanos(chat.ONEXPORT, {help: "导出数据", list: [], if (item.innerHTML.indexOf(word[1]) == -1) { return } var list = can.page.Select(can, item.nextSibling, html.OPTION_ARGS, function(item) { return item.value||"" }) - var meta = item.parentNode._meta + var meta = item.parentNode._meta; if (!meta) { return } var data = {ctx: "web.chat", cmd: ctx.ACTION, type: mdb.PLUGIN, name: item.innerHTML, text: shy("跳转", function(event) { diff --git a/panel/header.js b/panel/header.js index 9ff56f2e..52be3ef1 100644 --- a/panel/header.js +++ b/panel/header.js @@ -4,12 +4,6 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", list: [], _init: function(can, ms can.user.info.avatar = msg.Option(aaa.AVATAR) can.ondaemon._init(can) - can.onengine.plugin(can, "topic", shy("主题", { - "demo": function(can, msg, cmds) { can.onlayout.topic(can, cmds[0]) }, - }, ["topic:select=white,black", "run:button", "demo:button"], function(msg, cmds) { - can.onlayout.topic(can, cmds[0]) - })) - can.onlayout.topic(can, can.Conf("topic")) if (can.user.mod.isCmd) { can.onmotion.hidden(can, can._fields) @@ -30,10 +24,8 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", list: [], _init: function(can, ms } can.base.isFunc(cb) && cb(msg) }, - _agent: function(can, msg, target) { - can.run({}, [chat.AGENT], function(msg) { if (!msg.Option(nfs.SCRIPT)) { return } - can.require(can.base.Obj(msg.Option(nfs.SCRIPT)), function(can) { can.onaction.source(can, msg) }) - }) + _agent: function(can, msg, target) { if (!msg.Option(nfs.SCRIPT)) { return } + can.require(can.base.Obj(msg.Option(nfs.SCRIPT)), function(can) { can.onaction.source(can, msg) }) }, _grant: function(can, msg, target) { if (can.misc.Search(can, chat.GRANT)) { @@ -142,47 +134,50 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", list: [], _init: function(can, ms }) }]).first }, }) +Volcanos(chat.ONPLUGIN, {help: "注册插件", list: [], + "topic": shy("主题", { + "demo": function(can, msg, cmds) { can.onlayout.topic(can, cmds[0]) }, + }, ["topic:select=white,black", "run:button", "demo:button"], function(can, msg, cmds) { + can.onlayout.topic(can, cmds[0]) + }), +}) Volcanos(chat.ONACTION, {help: "交互数据", list: [], _init: function(can, cb, target) { can.base.isFunc(cb) && cb() }, - _menus: [["setting", chat.BLACK, chat.WHITE, chat.PRINT, "webpack", "toimage", ctx.CONFIG]], + _menus: [["setting", chat.BLACK, chat.WHITE, chat.PRINT, code.WEBPACK, "toimage", ctx.CONFIG]], _trans: { "search": "搜索", - "create": "创建", - "share": "共享", "setting": "设置", "black": "黑色主题", "white": "白色主题", "print": "打印主题", + "webpack": "打包页面", "toimage": "生成图片", "config": "拉取配置", "shareuser": "共享用户", "setnick": "设置昵称", "password": "修改密码", - "language": "语言地区", - "chinese": "中文", + "language": "语言地区", "chinese": "中文", "clear": "清除背景", + "logout": "退出登录", }, onmain: function(can, msg) { - function init() { can.run({}, [], function(msg) { + can.run({}, [], function(msg) { + if (!can.Conf(aaa.USERNICK, msg.Option(ice.MSG_USERNICK)||msg.Option(ice.MSG_USERNAME))) { + msg.Option(chat.SSO)? can.user.jumps(msg.Option(chat.SSO)): can.user.login(can, function() { + can.onengine.signal(can, chat.ONMAIN, msg) + }, msg.Option(aaa.LOGIN), msg.Option("login.dev")) + return // 登录认证 + } can.base.Copy(can.onaction._trans, can.base.Obj(msg.Option(chat.TRANS), {})) can.onimport._init(can, msg, function(msg) { can.onengine.signal(can, chat.ONLOGIN, msg) }, can._output) - }) } - - // 登录检查 - can.user.isLocalFile? init(): can.run({}, [chat.CHECK], function(msg) { - can.Conf(aaa.USERNICK, msg.Option(ice.MSG_USERNICK)||msg.Option(ice.MSG_USERNAME))? init(): - msg.Option(chat.SSO)? can.user.jumps(msg.Option(chat.SSO)): - can.user.login(can, init, msg.Option(aaa.LOGIN), msg.Option("login.dev")) }) }, + onsearchfocus: function(can) { can.page.Select(can, can._output, ["div.search", html.INPUT], function(target) { target.focus() }) }, + onwebpack: function(can, msg) { can.onaction[code.WEBPACK](msg._event, can) }, onstorm_select: function(can, msg, river, storm) { can.Conf(chat.RIVER, river), can.Conf(chat.STORM, storm) }, - onsearchfocus: function(can) { - can.page.Select(can, can._output, "div.search input", function(target) { target.focus() }) - }, - onwebpack: function(can, msg) { can.onaction["webpack"](msg._event, can) }, onaction_cmd: function(can, msg) { can.onmotion.hidden(can) }, title: function(event, can) { @@ -194,13 +189,8 @@ Volcanos(chat.ONACTION, {help: "交互数据", list: [], _init: function(can, cb 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", html.HEIGHT, -1), can.set("Action", html.HEIGHT, -1) - }, - config: function(event, can) { - can.user.input(event, can, [{name: "scope", value: "etc/local.shy"}], function(ev, button, meta, list, args) { - can.run(event, [ctx.ACTION, ctx.CONFIG].concat(args), function(msg) { can.user.jumps(msg.Result()) }) - }) + print: function(event, can, button) { can.onlayout.topic(can, [chat.WHITE, button]) + can.setRiver(html.HEIGHT, -1), can.setAction(html.HEIGHT, -1) }, webpack: function(event, can) { can.user.input(event, can, [{name: mdb.NAME, value: can.user.title()}], function(ev, button, meta, list) { @@ -214,14 +204,21 @@ Volcanos(chat.ONACTION, {help: "交互数据", list: [], _init: function(can, cb args: "name,topic,layout,river,storm", }) - var toast = can.user.toast(can, "打包中...", code.WEBPACK, 1000000) - can.run(event, [code.WEBPACK], function(msg) { - toast.close(), can.user.toast(can, "打包成功", code.WEBPACK) - can.user.download(can, "/share/local/"+msg.Result(), name+".html") + var toast = can.user.toastProcess(can, "打包中...", code.WEBPACK) + can.runAction(event, code.WEBPACK, [], function(msg) { + toast.close(), can.user.toastSuccess(can, "打包成功", code.WEBPACK) + can.user.download(can, "/share/local/"+msg.Result(), name, "html") }) }) }, - toimage: function(event, can, button) { can.onmotion.toimage(event, can, document.title, can._root._target) }, + toimage: function(event, can, button) { + can.onmotion.toimage(event, can, can.user.title(), can._root._target) + }, + config: function(event, can) { + can.user.input(event, can, [{name: "scope", value: "etc/local.shy"}], function(ev, button, meta, list, args) { + can.runAction(event, ctx.CONFIG, args, function(msg) { can.user.jumps(msg.Result()) }) + }) + }, carte: function(event, can, list, cb, trans) { can.user.carte(event, can, can.onaction, list, cb) }, share: function(event, can, args) { diff --git a/plugin/state.js b/plugin/state.js index ef0246eb..71c5fdfe 100644 --- a/plugin/state.js +++ b/plugin/state.js @@ -134,7 +134,7 @@ Volcanos(chat.ONACTION, {help: "交互操作", list: [ "复制数据": function(event, can) { can.user.copy(event, can, can.onexport.table(can)||can.onexport.board(can)) }, "下载数据": function(event, can) { var meta = can.Conf() can.user.input(event, can, [{name: "filename", value: meta.name}], function(ev, button, data, list) { - can.user.downloads(can, can.onexport.table(can), list[0]+".csv")||can.user.downloads(can, can.onexport.board(can), meta.name+".txt") + can.user.downloads(can, can.onexport.table(can), list[0], "csv")||can.user.downloads(can, can.onexport.board(can), meta.name, "txt") }) }, "清空数据": function(event, can) { can.onmotion.clear(can, can._output) }, diff --git a/proto.js b/proto.js index 3bb04de3..41e19be0 100644 --- a/proto.js +++ b/proto.js @@ -361,6 +361,7 @@ var Volcanos = shy("火山架", {iceberg: "/chat/", volcano: "/frame.js", pack: setHeader: function(key, value) { return can.set("Header", key, value) }, getHeader: function(key, cb) { return can.get("Header", key, cb) }, setRiver: function(key, value) { return can.set("River", key, value) }, + setAction: function(key, value) { return can.set("Action", key, value) }, getAction: function(key, cb) { return can.get("Action", key, cb) }, getActionSize: function(cb) { return can.get("Action", "size", cb) },