From 02fcf73f172d1845c67246f6c8e233f8044a9a9f Mon Sep 17 00:00:00 2001 From: harveyshao Date: Wed, 12 Jan 2022 18:13:27 +0800 Subject: [PATCH] opt action.js --- frame.js | 23 ++-- lib/misc.js | 2 +- lib/page.js | 16 ++- lib/user.js | 12 +-- panel/action.js | 211 ++++++++++++++++++------------------- panel/footer.js | 4 +- panel/header.js | 29 +++-- panel/river.js | 27 ++--- panel/search.js | 2 +- plugin/local/chat/div.js | 5 +- plugin/local/code/inner.js | 3 +- plugin/local/wiki/word.js | 18 ++-- plugin/state.js | 20 ++-- plugin/story/spide.js | 22 +--- plugin/story/trend.js | 2 +- proto.js | 32 ++++-- publish/chrome/contexts.js | 2 +- 17 files changed, 215 insertions(+), 215 deletions(-) diff --git a/frame.js b/frame.js index dcce73f0..6ec1a026 100644 --- a/frame.js +++ b/frame.js @@ -5,14 +5,14 @@ Volcanos("onengine", {help: "搜索引擎", list: [], _init: function(can, meta, } if (can.user.isExtension) { Volcanos.meta.args = JSON.parse(localStorage.getItem(ctx.ARGS))||{} } can.core.Next(list, function(item, next) { item.type = chat.PANEL - can.onappend._init(can, item, item.list, function(panel) { + can.onappend._init(can, item, item.list, function(panel) { panel.Conf(item) panel.run = function(event, cmds, cb) { var msg = panel.request(event); cmds = cmds||[] return (can.onengine[cmds[0]]||can.onengine._remote)(event, can, msg, panel, cmds, cb) }, can[item.name] = panel, panel._root = can, panel._trans = panel.onaction && panel.onaction._trans||{} can.core.ItemCB(panel.onaction, function(key, cb) { can.onengine.listen(can, key, function(msg) { can.core.CallFunc(cb, {can: panel, msg: msg}) }) - }), panel.onaction._init(panel, item, item.list, next, panel._target) + }), can.core.CallFunc([panel.onaction, "_init"], {can: panel, cb: next, target: panel._target}) }, target) }, function() { can.misc.Log(can.user.title(), ice.RUN, can) can.require([can.volcano], null, function(can, name, sub) { can[name] = sub }) @@ -165,7 +165,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, can.base.isFunc(cb) && cb(sub) }); return sub }, - _option: function(can, meta, option, skip) { meta = meta||{}; var index = -1, args = can.base.Obj(meta.args||meta.arg, []), opts = can.base.Obj(meta.opts, {}) + _option: function(can, meta, option, skip) { meta = meta||{}; var index = -1, args = can.base.Obj(meta.args||meta.arg||meta.opt, []), opts = can.base.Obj(meta.opts, {}) function add(item, next) { item.type != html.BUTTON && index++ return Volcanos(item.name, {_follow: can.core.Keys(can._follow, item.name), _target: can.onappend.input(can, item, args[index]||opts[item.name], option||can._option), @@ -425,10 +425,10 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta, }, }, [], function(can) {}) Volcanos("onlayout", {help: "页面布局", list: [], _init: function(can, target) { target = target||document.body - var list = []; document.body.onresize = function() { - can.core.Delay(list, 1000, function() { can.onlayout._init(can, target) }) - } - + // var list = []; document.body.onresize = function() { + // can.core.Delay(list, 1000, function() { can.onlayout._init(can, target) }) + // } + // var width = window.innerWidth, height = window.innerHeight can.page.Select(can, target, [can.core.Keys(html.FIELDSET, chat.HEAD), can.core.Keys(html.FIELDSET, chat.FOOT)], function(field) { height -= field.offsetHeight @@ -447,10 +447,9 @@ Volcanos("onlayout", {help: "页面布局", list: [], _init: function(can, targe if (can.user.isMobile) { can.page.Modify(can, field, {style: {"padding-top": can.user.isLandscape()? "0px": ""}}) } else { - height -= can.page.Select(can, field, can.core.Keys(html.DIV, html.ACTION))[0].offsetHeight - can.page.Modify(can, field, {style: {height: height}}) can.page.Select(can, target, "fieldset.main>div.output", function(output) { + height -= can.page.Select(can, field, can.core.Keys(html.DIV, html.ACTION))[0].offsetHeight can.page.Modify(can, output, {style: {height: height}}) }) } @@ -537,6 +536,11 @@ Volcanos("onmotion", {help: "动态特效", list: [], _init: function(can, targe clear: function(can, target) { return can.page.Modify(can, target||can._output, ""), true }, + share: function(event, can, input, args) { + return can.user.input(event, can, input, function(ev, button, data, list, _args) { + can.search(can.request(event, {args: [mdb.TYPE, chat.FIELD].concat(args||[], _args||[])})._event, ["Header.onaction.share"]) + }) + }, story: { _hash: { spark: function(can, meta, target) { @@ -661,6 +665,7 @@ Volcanos("onmotion", {help: "动态特效", list: [], _init: function(can, targe } }, move: function(can, target, layout, cb) { var begin + can.page.Modify(can, target, {style: layout}) target.onmousedown = function(event) { layout.height = target.offsetHeight, layout.width = target.offsetWidth layout.left = target.offsetLeft, layout.top = target.offsetTop diff --git a/lib/misc.js b/lib/misc.js index 0b8a20f4..b295733d 100644 --- a/lib/misc.js +++ b/lib/misc.js @@ -63,7 +63,7 @@ Volcanos("misc", {help: "通信协议", Message: function(event, can) { var msg }, Push: function(key, value, detail) { if (can.base.isObject(key)) { - value = value || can.core.Item(key), can.core.List(value, function(item) { + value = value||can.core.Item(key), can.core.List(value, function(item) { detail? msg.Push(mdb.KEY, item).Push(mdb.VALUE, key[item]||""): msg.Push(item, key[item]||"") }) diff --git a/lib/page.js b/lib/page.js index 380f1c0b..bda6a2cc 100644 --- a/lib/page.js +++ b/lib/page.js @@ -337,7 +337,7 @@ Volcanos("page", {help: "用户界面", ClassList: { if (item.password) { return item } item.autocomplete = "off" item.value = value||item.value||"" - item.className || can.page.ClassList.add(can, item, "args") + item.className || can.page.ClassList.add(can, item, ctx.ARGS) break case html.SELECT: input.type = html.SELECT item.values = can.base.isString(item.values)? can.core.Split(item.values): item.values @@ -345,7 +345,7 @@ Volcanos("page", {help: "用户界面", ClassList: { item.value = value||item.value, input.list = item.values.map(function(value) { return {type: html.OPTION, value: value, inner: value} - }), item.className || can.page.ClassList.add(can, item, "args") + }), item.className || can.page.ClassList.add(can, item, ctx.ARGS) break case html.BUTTON: item.value = item.value||item.name||"list"; break case "upfile": item.type = html.FILE; break @@ -354,5 +354,17 @@ Volcanos("page", {help: "用户界面", ClassList: { } return input }, + + style: function(can, target, style) { var value = {} + for (var i = 2; i < arguments.length; i += 2) { + if (typeof arguments[i] == lang.OBJECT) { + can.base.Copy(value, arguments[i--]) + } else { + value[arguments[i]] = arguments[i+1] + } + } + can.page.Modify(can, target, {style: value}) + return value + }, }) diff --git a/lib/user.js b/lib/user.js index 92eff17a..a1012765 100644 --- a/lib/user.js +++ b/lib/user.js @@ -56,14 +56,13 @@ Volcanos("user", {help: "用户操作", agent: { language: function(can) { return can.misc.Search(can, "language") }, - trans: function(can, text) { - if (can.user.language(can) == "en") { return text } - if (can.base.isObject(text)) { + trans: function(can, text, list) { if (can.base.isObject(text)) { return can.core.Item(text, function(k, v) { can.core.Value(can._trans, k, v) }) } + if (can.user.language(can) == "en") { return text } if (can.base.isFunction(text)) { text = text.name||"" } - return can._trans&&can._trans[text] || can.Conf("trans."+text) || can.Conf("feature._trans."+text) || { + return list&&list[text] || can.Conf("trans."+text) || can.Conf("feature._trans."+text) || can._trans&&can._trans[text] || { "create": "创建", "remove": "删除", "insert": "添加", "delete": "删除", "modify": "编辑", "inputs": "补全", "prunes": "清理", "export": "导出", "import": "导入", "list": "查看", "back": "返回", "run": "执行", "done": "完成", "share": "共享", @@ -78,8 +77,8 @@ Volcanos("user", {help: "用户操作", agent: { "label": "标签", "exec": "执行", }[text]||text }, - toastSuccess: function(can) { - can.user.toast(can, ice.SUCCESS) + toastSuccess: function(can, title) { + can.user.toast(can, ice.SUCCESS, title) }, toast: function(can, content, title, duration, progress) { var meta = can.base.isObject(content)? content: {content: content, title: title||can._help, duration: duration, progress: progress} @@ -233,6 +232,7 @@ Volcanos("user", {help: "用户操作", agent: { }, input: function(event, can, form, cb, button) { // form [ string, array, object, {type: "select", values: []} + if (!form || form.length == 0) { return cb()} var msg = can.request(event) var ui = can.page.Append(can, document.body, [{view: [html.INPUT], style: {left: 0, top: 0}, list: [ {view: [chat.OPTION, html.TABLE], list: can.core.List(form, function(item) { diff --git a/panel/action.js b/panel/action.js index 742582bb..69d81d20 100644 --- a/panel/action.js +++ b/panel/action.js @@ -1,73 +1,69 @@ 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.type = chat.PLUGIN - item.height = parseInt(can.Conf(html.HEIGHT))-240, item.width = parseInt(can.Conf(html.WIDTH))-40 - item.feature = can.base.Obj(item.feature||item.meta), item.inputs = can.base.Obj(item.inputs||item.list) + item.height = parseInt(can.Conf(html.HEIGHT))-can.Conf(html.MARGIN_Y) + item.width = parseInt(can.Conf(html.WIDTH))-can.Conf(html.MARGIN_X) + item.feature = can.base.Obj(item.feature||item.meta) + item.inputs = can.base.Obj(item.inputs||item.list) can.onappend.plugin(can, item, function(sub, meta, skip) { can.onimport._plugin(can, river, storm, sub, meta), skip || next() }) - }, function() { + }, function() { can.onimport._menu(can, msg), can.onkeypop._init(can) can.onaction.layout(can, can.misc.Search(can, chat.LAYOUT)||can.Conf(chat.LAYOUT)) - !can.user.isMobile && can.onimport._menu(can, msg) }) }, - _plugin: function(can, river, storm, sub, meta) { - sub.run = function(event, cmds, cb) { var msg = sub.request(event); cmds = cmds||[] - var toast = msg.Option("_toast") && can.user.toast(can, msg.Option("_toast"), "", -1) - return can.run(event, can.misc.concat([river, storm, meta.id||meta.index||can.core.Keys(meta.key, meta.name)], cmds), function(msg) { - toast && toast.close(), can.base.isFunc(cb) && cb(msg) - }) + _plugin: function(can, river, storm, sub, meta) { sub._target._meta = meta + sub.run = function(event, cmds, cb) { var msg = sub.request(event) + return can.run(event, can.misc.concat([river, storm, meta.id||meta.index||can.core.Keys(meta.key, meta.name)], cmds||[]), cb) }, can._plugins = (can._plugins||[]).concat([sub]) - can.page.Modify(can, sub._output, {style: {"max-width": meta.width}}) - 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) - }}]) + meta.id && (sub._option.dataset = sub._option.dataset||{}, sub._option.dataset.id = meta.id) - sub._option.dataset = sub._option.dataset||{} - meta.id && (sub._option.dataset.id = meta.id) - sub._target.Meta = meta + can.page.Modify(can, sub._output, {style: kit.Dict(html.MAX_WIDTH, meta.width)}) + can.page.Append(can, can._action, [{view: [html.ITEM, html.DIV, meta.name], onclick: function(event) { + can.onmotion.select(can, can._output, html.FIELDSET_PLUGIN, sub._target) + can.onmotion.select(can, can._action, html.DIV_ITEM, event.target) + }}]) }, _menu: function(can, msg) { if (can.user.mod.isPod||can.user.isMobile) { 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"), [ - ["help", "tutor", "manual", "service", "devops", "refer"], - ]) - ), function(event, button, list) { - list[0] == "help"? can.user.open("/help/"+button+".shy"): can.onaction.layout(can, button) - }) + can.setHeaderMenu(can.base.Obj(msg.Option(chat.MENUS), [ + [chat.LAYOUT, "auto", "flow", "grid", "tabs", "free"], + [ice.HELP, "tutor", "manual", "service", "devops", "refer"], + ]), function(event, button, list) { can.core.CallFunc([can.onaction, list[0]], [can, button]) }) }, - _share: function(can, share) { if (!share) { return } - can.run({}, ["_share", share], function(msg) { - can.user.topic(can, can.misc.Search(can, chat.TOPIC)||msg.Option(chat.TOPIC)) - can.user.title(can.misc.Search(can, chat.TITLE)||msg.Option(chat.TITLE)) - can.onaction.layout(can, "auto") - if (msg[mdb.INDEX].length == 1) { - 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({height: window.innerHeight, width: window.innerWidth+40}) - } else { - can.Conf({height: window.innerHeight, width: window.innerWidth}) - } - can.Conf(chat.RIVER, "_share"), can.Conf(chat.STORM, share) - can.onimport._init(can, msg) + _share: function(can, share) { share && can.run({}, ["_share", share], function(msg) { + can.user.topic(can, can.misc.Search(can, chat.TOPIC)||msg.Option(chat.TOPIC)) + can.user.title(can.misc.Search(can, chat.TITLE)||msg.Option(chat.TITLE)) + can.page.Select(can, document.body, html.FIELDSET_PANEL, function(item) { + item != can._target && can.onmotion.hidden(can, item) + }) + + can.Conf(html.MARGIN_X, 0, html.MARGIN_Y, 2*html.ACTION_HEIGHT) + can.page.ClassList.add(can, can._target, ice.CMD) + can.onlayout._init(can) + + can.Conf(chat.RIVER, "_share", chat.STORM, share) + can.onimport._init(can, msg) + }) }, + _cmd: function(can, item, next) { + can.base.Copy(item, { + height: can.Conf(html.HEIGHT)-can.Conf(html.MARGIN_Y), + width: can.Conf(html.WIDTH)-can.Conf(html.MARGIN_X), + opts: can.misc.Search(can), + }) + can.onappend.plugin(can, item, function(sub, meta, skip) { + can.user.title(meta.name), skip || next() }) }, }) Volcanos("onengine", {help: "解析引擎", list: [], _engine: function(event, page, msg, can, cmds, cb) { - if (!can._root.river) { return false } - var list = can._root.river; var river = list[cmds[0]] - var storm = river && river.storm[cmds[1]] + var storm = can.core.Value(can._root, can.core.Keys(chat.RIVER, cmds[0], chat.STORM, cmds[1])) if (!storm || cmds.length != 2) { return false } - if (storm.index) { cmds = [ctx.ACTION, ctx.COMMAND].concat(storm.index) - can.run(event, cmds, cb) // 命令详情 + if (storm.index) { // 命令索引 + can.run(event, [ctx.ACTION, ctx.COMMAND].concat(storm.index), cb) } else { // 命令列表 can.core.List(storm.list, function(value) { msg.Push(mdb.NAME, value.name||"") @@ -76,86 +72,86 @@ Volcanos("onengine", {help: "解析引擎", list: [], _engine: function(event, p msg.Push(ctx.FEATURE, JSON.stringify(value.feature)) msg.Push(ctx.INDEX, value.index||"") msg.Push(ctx.ARGS, value.args||"[]") - msg.Push("_action", value._action||"") + msg.Push(ice.MSG_ACTION, value._action||"") }), can.base.isFunc(cb) && cb(msg) } return true }, }) -Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, list, cb, target) { - can._target.ontouchstart = function(event) { +Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, cb, target) { + can.Conf(html.MARGIN_Y, 4*html.PLUGIN_MARGIN+2*html.ACTION_HEIGHT+html.ACTION_MARGIN) + can.Conf(html.MARGIN_X, 4*html.PLUGIN_MARGIN) + target.ontouchstart = function(event) { can.onengine.signal(can, "onaction_touch", can.request(event)) - } - can.base.isFunc(cb) && cb() + }, can.base.isFunc(cb) && cb() }, - onmain: function(can, msg) { + _trans: { + "layout": "布局", + "auto": "默认布局", + "flow": "流动布局", + "grid": "网格布局", + "tabs": "标签布局", + "free": "自由布局", + + "help": "帮助", + "tutor": "入门简介", + "manual": "使用手册", + "service": "服务手册", + "devops": "编程手册", + "refer": "参考手册", + }, + onmain: function(can) { can.onimport._share(can, can.misc.Search(can, web.SHARE)) - can.onkeypop._init(can) }, onlogin: function(can) { if (!can.user.mod.isCmd) { return } - can.page.ClassList.add(can, can._target, "cmd") + can.Conf(html.MARGIN_X, 0, html.MARGIN_Y, 2*html.ACTION_HEIGHT) + can.page.ClassList.add(can, can._target, ice.CMD) + can.onlayout._init(can) + can._names = location.pathname can.Conf(chat.TOOL)? can.core.Next(can.Conf(chat.TOOL), function(item, next) { - can.core.Timer(500, function() { can.onaction._plugin(can, item, next) }) + can.onimport._cmd(can, item, next) }): can.run(can.request()._event, [ctx.ACTION, ctx.COMMAND], function(msg) { can.core.Next(msg.Table(), function(item, next) { - can.onaction._plugin(can, item, next) + can.onimport._cmd(can, item, next) }) }) }, - _plugin: function(can, item, next) { - can.base.Copy(item, {height: window.innerHeight, width: window.innerWidth, opts: can.misc.Search(can)}) - can.onappend.plugin(can, item, function(sub, meta) { can.user.title(meta.name), next() }) - }, onstorm_select: function(can, msg, river, storm) { can.onlayout._init(can) function key(name) { return can.core.Keys(can.Conf(chat.RIVER), can.Conf(chat.STORM), name) } can.page.Cache(key(html.ACTION), can._action, can._output.scrollTop+1) can.page.Cache(key(html.OUTPUT), can._output, can._output.scrollTop+1) - can.Conf(chat.RIVER, river), can.Conf(chat.STORM, storm) // 转场 + can.Conf(chat.RIVER, river), can.Conf(chat.STORM, storm) var position = can.page.Cache(key(html.ACTION), can._action) var position = can.page.Cache(key(html.OUTPUT), can._output) if (position) { can._output.scrollTo(0, position-1); return } - can.run({}, [river, storm], function(msg) { - if (msg.Length() == 0) { // 添加工具 - can.onengine.signal(can, "onaction_nostorm", can.request({}, {river: river, storm: storm})) - } else { - can.onimport._init(can, msg) - } + can.run({}, [river, storm], function(msg) { if (msg.Length() > 0) { return can.onimport._init(can, msg) } + can.onengine.signal(can, "onaction_notool", can.request({}, {river: river, storm: storm})) }) }, onsearch: function(can, msg, word) { if (word[0] == "*" || word[0] == mdb.PLUGIN) { can.onexport.plugin(can, msg, word) } }, - onsize: function(can, msg, width, height) { can.Conf({width: width, height: height}) }, + onsize: function(can, msg, height, width) { can.Conf({height: height, width: width}) }, - layout: function(can, layout) { if (!layout) { return } - var trans = { - "默认布局": "auto", - "流动布局": "flow", - "网格布局": "grid", - "标签布局": "tabs", - "自由布局": "free", + help: function(can, button) { can.user.open("/help/"+button+".shy") }, + layout: function(can, button) { can.Conf(chat.LAYOUT, button) + can.page.Modify(can, can._action, {className: chat.ACTION+ice.SP+button}) + can.page.Modify(can, can._output, {className: chat.OUTPUT+ice.SP+button}) + + if (button == "tabs" && !can.tabs) { can.tabs = true + can.onmotion.select(can, can._output, html.FIELDSET_PLUGIN, 0) + can.onmotion.select(can, can._action, html.DIV_ITEM, 0) } - - layout = trans[layout]||layout, can.Conf(chat.LAYOUT, layout) - can.page.Modify(can, can._action, {className: "action "+layout}) - can.page.Modify(can, can._output, {className: "output "+layout}) - - if (layout == "tabs" && !can.tabs) { - can.onmotion.select(can, can._output, "fieldset.plugin", 0) - can.onmotion.select(can, can._action, "div.item", 0) - can.tabs = true + if (button == "free" && !can.free) { can.free = true + can.page.Select(can, can._target, html.DIV_OUTPUT+ice.GT+html.FIELDSET_PLUGIN, function(item, index) { + can.page.Modify(can, item, {style: {left: 40*index, top: 40*index}}) + can.onmotion.move(can, item, {left: 40*index, top: 40*index}) + }) } - if (layout == "free" && !can.free) { - can.page.Select(can, can._target, "div.output>fieldset.plugin", function(item, index) { - can.page.Modify(can, item, {style: {left: 20*index, top: 20*index}}) - can.onmotion.move(can, item, {left: 20*index, top: 20*index}) - }), can.free = true - } - can.onlayout._init(can) }, }) @@ -196,31 +192,32 @@ Volcanos("onkeypop", {help: "键盘交互", list: [], _focus: [], _init: functio }, _engine: {}, }) Volcanos("onexport", {help: "导出数据", list: [], - args: function(can, msg, list, cb, target) { - can.core.Next(can.page.Select(can, target, "fieldset.plugin>form.option"), function(item, next, index, array) { - var list = can.page.Select(can, item, '.args', function(item) { return item.value||"" }) - item.dataset.args = JSON.stringify(list), cb(item, next, index, array) + args: function(can, cb, target) { + can.core.Next(can.page.Select(can, target, html.FIELDSET_PLUGIN+ice.GT+html.FORM_OPTION), function(item, next, index, array) { + item.dataset.args = JSON.stringify(can.page.Select(can, item, html.OPTION_ARGS, function(item) { return item.value||"" })) + cb(item, next, index, array) }) }, size: function(can, msg) { - msg.Option(chat.TOP, can._target.offsetTop) - msg.Option(chat.LEFT, can._target.offsetLeft) + msg.Option(html.TOP, can._target.offsetTop) + msg.Option(html.LEFT, can._target.offsetLeft) msg.Option(html.WIDTH, can._target.offsetWidth) - msg.Option(html.HEIGHT, can._target.offsetHeight) - msg.Option(chat.SCROLL, can.user.isMobile? can._target.parentNode.parentNode.scrollTop: can._output.scrollTop) + msg.Option(html.HEIGHT, can._target.offsetHeight-can._action.offsetHeight) + msg.Option(html.SCROLL, can.user.isMobile? can._target.parentNode.parentNode.scrollTop: can._output.scrollTop) + msg.Option(html.MARGIN_X, can.Conf(html.MARGIN_X)) + msg.Option(html.MARGIN_Y, can.Conf(html.MARGIN_Y)) }, layout: function(can, msg) { return can.Conf(chat.LAYOUT) }, - plugin: function(can, msg, word) { - var fields = msg.Option(ice.MSG_FIELDS).split(ice.FS) - can.page.Select(can, can._output, "fieldset.plugin>legend", function(item) { + plugin: function(can, msg, word) { var fields = can.core.Split(msg.Option(ice.MSG_FIELDS)) + can.page.Select(can, can._output, html.FIELDSET_PLUGIN+ice.GT+html.LEGEND, function(item) { if (item.innerHTML.indexOf(word[1]) == -1) { return } - var meta = item.parentNode.Meta - var list = can.page.Select(can, item.nextSibling, '.args', function(item) { return item.value||"" }) + var meta = item.parentNode._meta + var list = can.page.Select(can, item.nextSibling, html.OPTION_ARGS, function(item) { return item.value||"" }) var data = {ctx: "web.chat", cmd: ctx.ACTION, type: mdb.PLUGIN, name: item.innerHTML, text: shy("跳转", function(event) { - var input = can.page.Select(can, item.parentNode, "input.args")[0] + var input = can.page.Select(can, item.parentNode, html.INPUT_ARGS)[0] input && input.focus() }), argument: JSON.stringify(list), } @@ -231,7 +228,7 @@ Volcanos("onexport", {help: "导出数据", list: [], } else { return } - can.core.List(fields, function(key) { msg.Push(key, data[key]||"") }) + msg.Push(data, fields) }) }, }) diff --git a/panel/footer.js b/panel/footer.js index 26c3ecf9..39b5180e 100644 --- a/panel/footer.js +++ b/panel/footer.js @@ -55,8 +55,8 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }) }, }) -Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, list, cb, target) { - can.base.isFunc(cb) && cb(msg) +Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, cb, target) { + can.base.isFunc(cb) && cb() }, onlogin: function(can, msg) { can.run({}, [], function(msg) { can.onimport._init(can, msg, [], null, can._output) }) }, ontoast: function(can, msg) { can.core.CallFunc(can.onimport.toast, {can: can, msg: msg}) }, diff --git a/panel/header.js b/panel/header.js index 2d8f1721..3fafb9d1 100644 --- a/panel/header.js +++ b/panel/header.js @@ -100,18 +100,19 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, avatar: function(event, can, url) { if (can.user.isExtension || can.user.isLocalFile) { return } can.run(event, [ctx.ACTION, aaa.AVATAR, url], function(msg) { can.onimport._avatar(can, msg) }) }, - menu: function(can, cmds, cb) { + menu: function(can, cmds, cb, trans) { return can.page.Append(can, can._output, [{type: cmds[0], list: can.core.List(cmds.slice(1), function(item) { if (can.base.isString(item)) { - return {view: [html.MENU, html.DIV, can.user.trans(can, item)], onclick: function(event) { + return {view: [html.MENU, html.DIV, can.user.trans(can, item, trans)], onclick: function(event) { can.base.isFunc(cb) && cb(event, item, cmds) }} } else if (can.base.isArray(item)) { - 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) - }) + var list = can.core.List(item, function(value, index) { return can.user.trans(can, value, trans) }) + return {view: [html.MENU, html.DIV, can.user.trans(can, list[0], trans)], onmouseenter: function(event) { + can.onaction.carte(event, can, list.slice(1), function(event, button, meta, index) { + can.base.isFunc(cb) && cb(event, item[index+1], item) + }, trans) }} } else if (can.base.isObject(item)) { @@ -120,7 +121,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }) }]).first }, }) -Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, meta, list, cb, target) { +Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, cb, target) { can.base.isFunc(cb) && cb() }, _trans: { @@ -129,13 +130,6 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, meta, "create": "创建", "share": "共享", - "help": "帮助", - "tutor": "入门简介", - "manual": "使用手册", - "service": "服务手册", - "devops": "编程手册", - "refer": "参考手册", - "setting": "设置", "black": "黑色主题", "white": "白色主题", @@ -202,8 +196,11 @@ 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||[])) }, + carte: function(event, can, list, cb, trans) { can.user.carte(event, can, can.onaction, list, cb) }, + share: function(event, can, args) { + can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE].concat(args||[], + [chat.RIVER, can.Conf(chat.RIVER), chat.STORM, can.Conf(chat.STORM)])) + }, usernick: function(event, can) { can.onaction.carte(event, can, ["shareuser", "setnick", [aaa.LANGUAGE, aaa.CHINESE, aaa.ENGLISH], cli.CLEAR, aaa.LOGOUT]) diff --git a/panel/river.js b/panel/river.js index 38055dec..e1af0d98 100644 --- a/panel/river.js +++ b/panel/river.js @@ -21,7 +21,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, can._main_storm = can.misc.Search(can, chat.STORM)||msg.Option(ice.MSG_STORM)||Volcanos.meta.args.storm||can._main_storm }, _menu: function(can, msg) { if (can.user.mod.isPod) { return } - can.search({}, ["Header.onimport.menu"].concat(can.base.Obj(msg.Option(chat.MENUS), can.ondetail.menus)), function(event, button) { + can.setHeaderMenu(can.base.Obj(msg.Option(chat.MENUS), can.ondetail.menus), function(event, button) { can.core.CallFunc([can.ondetail, button], [event, can, button, can.Conf(chat.RIVER), can.Conf(chat.STORM)]) }) }, @@ -66,7 +66,7 @@ Volcanos("onengine", {help: "解析引擎", list: [], _engine: function(event, c }), can.base.isFunc(cb) && cb(msg); return true }, }) -Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg, list, cb, target) { +Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, cb, target) { can.onengine.plugin(can, "info", shy("信息", {}, ["text", "list", "back"], function(msg, cmds) { msg.Echo(JSON.stringify(can)) })) @@ -96,7 +96,7 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg, can.onmotion.float.del(can, chat.CARTE) can.user.isMobile && can.onmotion.hidden(can) }, - onaction_nostorm: function(can, msg, river, storm) { + onaction_notool: function(can, msg, river, storm) { can.ondetail["添加工具"](msg._event, can, "添加工具", river, storm) }, @@ -140,7 +140,7 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, msg, }, refresh: function(event, can) { var args = {river: can.Conf(chat.RIVER), storm: can.Conf(chat.STORM), - topic: can.get("Header", "topic"), layout: can.get("Action", "layout"), + topic: can.getHeader(chat.TOPIC), layout: can.getAction(chat.LAYOUT), } if (can.user.isExtension) { localStorage.setItem(ctx.ARGS, JSON.stringify(args)) } can.misc.Search(can, args) @@ -156,17 +156,11 @@ Volcanos("ondetail", {help: "菜单交互", "创建群组": function(event, can) { can.onaction.create(event, can) }, "共享群组": function(event, can, button, river) { - can.user.input(event, can, [{name: chat.TILTE, value: river, _trans: "标题"}], function(event, button, meta, list) { - can.user.share(can, can.request(event), [river, ctx.ACTION, chat.SHARE, mdb.TYPE, chat.RIVER, mdb.NAME, list[0]]) - }) + can.onmotion.share(event, can, [{name: chat.TITLE, value: river}], [mdb.TYPE, chat.RIVER]) }, "添加应用": function(event, can, button, river) { can.ondetail.create(event, can, button, river) }, "共享应用": function(event, can, button, river, storm) { - can.user.input(event, can, [{name: chat.TILTE, value: storm, _trans: "标题"}], function(event, button, meta, list) { - can.user.share(can, can.request(event), [river, ctx.ACTION, chat.SHARE, mdb.TYPE, chat.STORM, mdb.NAME, list[0], - chat.STORM, storm, chat.RIVER, river, - ]) - }) + can.onmotion.share(event, can, [{name: chat.TITLE, value: storm}], [mdb.TYPE, chat.STORM]) }, "添加工具": function(event, can, button, river, storm) { can.user.select(event, can, ctx.COMMAND, "context,command", function(item, next) { @@ -232,11 +226,12 @@ Volcanos("ondetail", {help: "菜单交互", }, "保存参数": function(event, can, button, river, storm) { - can.search(event, ["Action.onexport.args"], function(item, next, index, array) { - var msg = can.request({}, {hash: storm, id: item.dataset.id}) - var toast = can.user.toast(can, (index+1)+ice.PS+array.length, "保存参数", 10000, (index+1)/array.length) + can.getAction(ctx.ARGS, function(item, next, index, array) { var msg = can.request({}, {hash: storm, id: item.dataset.id}) + var toast = can.user.toast(can, (index+1)+ice.PS+array.length, button, 10000, (index+1)*100/array.length) can.run(msg._event, [river, chat.STORM, ctx.ACTION, mdb.MODIFY, ice.ARG, item.dataset.args], function(msg) { - toast.close(), next() + can.core.Timer(200, function() { + toast.close(), next(), index == array.length-1 && can.user.toastSuccess(can, button) + }) }) }) }, diff --git a/panel/search.js b/panel/search.js index 27a9c77a..2eff3b45 100644 --- a/panel/search.js +++ b/panel/search.js @@ -43,7 +43,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }) }, }) -Volcanos("onaction", {help: "交互操作", list: [cli.CLEAR, cli.CLOSE, cli.DONE], _init: function(can, meta, list, cb, target) { +Volcanos("onaction", {help: "交互操作", list: [cli.CLEAR, cli.CLOSE, cli.DONE], _init: function(can, cb, target) { can.base.isFunc(cb) && cb() }, onlogin: function(can, msg) { diff --git a/plugin/local/chat/div.js b/plugin/local/chat/div.js index 6f79e5c9..9d64287b 100644 --- a/plugin/local/chat/div.js +++ b/plugin/local/chat/div.js @@ -78,7 +78,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, }, ["/plugin/local/chat/div.css"]) Volcanos("onaction", {help: "操作数据", list: [], "添加": function(event, can) { - can.user.input(event, can, ["name", "index", "args", "style", "width", "height"], function(event, button, data, list, args) { + can.user.input(event, can, [mdb.NAME, ctx.INDEX, ctx.ARGS, ctx.STYLE, html.HEIGHT, html.WIDTH], function(event, button, data, list, args) { can.current._add({meta: data, list: []}) }) }, @@ -88,8 +88,7 @@ Volcanos("onaction", {help: "操作数据", list: [], }, true) }, "预览": function(event, can) { - can.request(event, {link: can.misc.MergeURL(can, {_path: "/chat/div/"+can.Option("hash")})}) - can.search(event, ["Header.onaction.share"]) + can.onmotion.share(event, can, [], [mdb.LINK, can.misc.MergeURL(can, {_path: "/chat/div/"+can.Option("hash")})]) }, }) Volcanos("onexport", {help: "导出数据", list: []}) diff --git a/plugin/local/code/inner.js b/plugin/local/code/inner.js index 3aea76f6..eae4d1cd 100644 --- a/plugin/local/code/inner.js +++ b/plugin/local/code/inner.js @@ -14,8 +14,7 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb, can.onimport.project(can, msg.Option(nfs.PATH)) can.base.isFunc(cb) && cb(msg) }, - _content: function(can, target) { - var height = can.Conf(html.HEIGHT)-(can.user.mod.isCmd? 54: 320); height < 240 && (height = 240) + _content: function(can, target) { var height = can.Conf(html.HEIGHT) can.page.Modify(can, can.ui.project, {style: {"max-height": height}}) can.page.Modify(can, can.ui.content, {style: {"max-height": height}}) can.page.Modify(can, can.ui.display, {style: {display: chat.NONE}}) diff --git a/plugin/local/wiki/word.js b/plugin/local/wiki/word.js index 8fa2aef3..6fefa73c 100644 --- a/plugin/local/wiki/word.js +++ b/plugin/local/wiki/word.js @@ -12,7 +12,6 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, cb, target nav = nav||can.page.Append(can, can._fields, [{view: wiki.NAVMENU}]).first can.onmotion.clear(can, nav), can._fields.insertBefore(nav, can._output) - can.page.Modify(can, nav, {style: {height: can.Conf(html.HEIGHT)}}) can.onappend.list(can, can.base.Obj(data.data), function(event, item) { var link = item.meta.link, list = can.core.Split(item.meta.link) if (can.core.Value(can, list[0])) { return can.core.CallFunc([can, list[0]], list.slice(1)) } @@ -27,11 +26,14 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, cb, target return true }, nav), can.sup._navmenu = nav - can.Conf(html.WIDTH, can.Conf(html.WIDTH)-nav.offsetWidth-(can.user.mod.isCmd? 10: 20)) - can.page.Modify(can, can._output, {style: kit.Dict( - html.HEIGHT, can.sup._navmenu.offsetHeight, html.MAX_WIDTH, can.Conf(html.WIDTH), - html.FLOAT, html.LEFT, html.CLEAR, html.NONE - )}) + can.getActionSize(function(msg) { + can.page.Modify(can, nav, {style: {height: can.Conf(html.HEIGHT)+(can.user.mod.isCmd? msg.Option(html.MARGIN_Y): 0)}}) + can.Conf(html.WIDTH, can.Conf(html.WIDTH)-nav.offsetWidth-(can.user.mod.isCmd? 10: 20)) + can.page.Modify(can, can._output, {style: kit.Dict( + html.HEIGHT, can.sup._navmenu.offsetHeight, html.MAX_WIDTH, can.Conf(html.WIDTH), + html.FLOAT, html.LEFT, html.CLEAR, html.NONE + )}) + }) }, premenu: function(can, data, target) { can.page.Select(can, can._output, "h2.story, h3.story", function(item) { @@ -64,7 +66,9 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, cb, target can.onappend._init(can, item, ["/plugin/state.js"], function(sub) { sub.run = function(event, cmds, cb, silent) { can.run(event, can.misc.concat([ctx.ACTION, chat.STORY, data.type, data.name, data.text], cmds), cb, true) - }, sub.Conf(html.WIDTH, item.width = (width||can.Conf(html.WIDTH))-20) + } + sub.Conf(html.HEIGHT, can.Conf(html.HEIGHT)) + sub.Conf(html.WIDTH, item.width = (width||can.Conf(html.WIDTH))-20) can.core.Value(item, "auto.cmd") && can.core.Timer300ms(function() { var msg = sub.request({}, can.core.Value(item, "opts")); msg.Option("_handle", ice.TRUE) diff --git a/plugin/state.js b/plugin/state.js index 3f0f10b6..252c65b8 100644 --- a/plugin/state.js +++ b/plugin/state.js @@ -72,7 +72,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf, }, }) Volcanos("onaction", {help: "交互操作", list: [ - "共享工具", "生成链接", "生成脚本", "保存参数", "清空参数", "刷新数据", [ + "共享工具", "生成链接", "生成脚本", "清空参数", "刷新数据", [ "其它 ->", "复制数据", "下载数据", "清空数据", "删除工具", "摄像头", "生成图片", ], ], _init: function(can, msg, list, cb, target) {}, @@ -80,21 +80,16 @@ Volcanos("onaction", {help: "交互操作", list: [ can.Update(event, [ctx.ACTION, button].concat(can.Input([], true))) }, "共享工具": function(event, can) { var meta = can.Conf() - var ui = can.user.input(event, can, [{name: chat.TITLE, value: meta.name}], function(ev, button, data, list) { - var msg = can.request(event, {arg: [mdb.TYPE, chat.FIELD, - mdb.NAME, meta.index, mdb.TEXT, JSON.stringify(can.Input([], true)), - chat.TITLE, list[0], chat.RIVER, can.Conf(chat.RIVER), chat.STORM, can.Conf(chat.STORM), - ]}) - can.search(event, ["Header.onaction.share"]) - }); can.onlayout.figure(event, can, ui._target, true) + can.onmotion.share(event, can, [{name: chat.TITLE, value: meta.name}], [ + mdb.NAME, meta.index, mdb.TEXT, JSON.stringify(can.Input([], true)), + ]) }, "生成链接": function(event, can) { var meta = can.Conf() var pre = "/chat/cmd/"; if (can.user.mod.isPod) { pre = "/chat/pod/"+can.misc.Search(can, ice.POD)+"/cmd/" } var args = can.Option(); args._path = pre+(meta.index||can.core.Keys(meta.ctx, meta.cmd)) args._path.indexOf("/cmd/web.wiki.word") > -1 && (args = {_path: pre+args.path}) - var msg = can.request(event, {link: can.misc.MergeURL(can, args)}) - can.search(event, ["Header.onaction.share"]) + can.onmotion.share(event, can, [], [mdb.LINK, can.misc.MergeURL(can, args)]) }, "生成脚本": function(event, can, button) { var conf = can.Conf() var args = can.Input("", true).join(ice.SP); var list = [ @@ -109,10 +104,7 @@ Volcanos("onaction", {help: "交互操作", list: [ can.onmotion.story.auto(can, ui._target) can.user.copy(event, can, list[0]) }, - "保存参数": function(event, can) { var meta = can.Conf() - var msg = can.request(event, {river: can.Conf(chat.RIVER), storm: can.Conf(chat.STORM), id: meta.id}) - can.search(event, ["River.ondetail.保存参数"], function(msg) { can.user.toastSuccess(can) }, true) - }, + "保存参数": function(event, can) { can.search(event, ["River.ondetail.保存参数"]) }, "清空参数": function(event, can) { can.page.SelectArgs(can, can._option, "", function(item) { return item.value = "" }) }, diff --git a/plugin/story/spide.js b/plugin/story/spide.js index 47d84612..8fe99c33 100644 --- a/plugin/story/spide.js +++ b/plugin/story/spide.js @@ -178,25 +178,13 @@ Volcanos("ondetail", {help: "用户交互", list: [], }) }, figure: function(can, sub, msg, cb) { - can.get("Action", "size", function(left, top, width, height) { left = left||0 - if (height > window.innerHeight) { height = window.innerHeight } + can.getActionSize(function(left, top, width, height) { left = left||0 var top = 120, margin = 20; if (can.user.isMobile) { margin = 0 - if (can.user.isLandscape()) { - height += (can.user.mod.isCmd? -20: 200) - top = 24, sub.Conf(html.HEIGHT, height-top) - } else { - height += (can.user.mod.isCmd? -80: 200) - top = 48, sub.Conf(html.HEIGHT, height-top) - } - } else { - height += (can.user.mod.isCmd? 0: 300) - sub.Conf(html.HEIGHT, height-top) + top = can.user.isLandscape()? 24: 48 } - - var layout = {position: "fixed", left: left+margin, top: top} - can.onmotion.move(can, sub._target, layout) - can.page.Modify(can, sub._target, {style: layout}) - can.page.Modify(can, sub._output, {style: {"max-width": width-margin*2}}) + can.onmotion.move(can, sub._target, {position: html.FIXED, left: left+margin, top: top}) + can.page.style(can, sub._output, html.MAX_WIDTH, width-margin*2) + sub.Conf(html.HEIGHT, height-top-2*html.ACTION_HEIGHT) can.base.isFunc(cb) && cb(msg) }) }, diff --git a/plugin/story/trend.js b/plugin/story/trend.js index e48ee775..dcc6b98d 100644 --- a/plugin/story/trend.js +++ b/plugin/story/trend.js @@ -46,7 +46,7 @@ Volcanos("onaction", {help: "组件菜单", list: ["编辑", ["view", "趋势图 can.onmotion.toggle(can, can._status) }, "趋势图": function(event, can) { var height = can.Action(html.HEIGHT) - if (height == "max") { height = can.Conf(html.HEIGHT) - chat.CMD_MARGIN } + if (height == "max") { height = can.Conf(html.HEIGHT) } height = parseInt(height) var space = 10, width = parseInt(can.Conf(html.WIDTH)) diff --git a/proto.js b/proto.js index 2e610fc8..487f644b 100644 --- a/proto.js +++ b/proto.js @@ -6,7 +6,7 @@ var kit = { } } var ice = { - SP: " ", PS: "/", PT: ".", FS: ",", NL: "\n", + SP: " ", PS: "/", PT: ".", FS: ",", NL: "\n", LT: "<", GT: ">", POD: "pod", CTX: "ctx", CMD: "cmd", ARG: "arg", OPT: "opt", RUN: "run", RES: "res", ERR: "err", @@ -52,8 +52,8 @@ var ice = { var ctx = { CONTEXT: "context", COMMAND: "command", ACTION: "action", CONFIG: "config", + INDEX: "index", ARGS: "args", STYLE: "style", INPUTS: "inputs", FEATURE: "feature", - INDEX: "index", ARGS: "args", } var cli = { CODE: "code", COST: "cost", FROM: "from", BACK: "back", @@ -133,7 +133,7 @@ var chat = { SCROLL: "scroll", LEFT: "left", TOP: "top", RIGHT: "right", BOTTOM: "bottom", HEADER: "header", FOOTER: "footer", - SSO: "sso", CMD_MARGIN: 53, + SSO: "sso", libs: ["/lib/base.js", "/lib/core.js", "/lib/misc.js", "/lib/page.js", "/lib/user.js"], panel_list: [ @@ -175,6 +175,9 @@ var svg = { var html = { 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", + FIELDSET_PANEL: "fieldset.panel", FIELDSET_PLUGIN: "fieldset.plugin", FIELDSET_STORY: "fieldset.story", + OPTION_ARGS: "select.args,input.args,textarea.args", + INPUT_ARGS: "input.args,textarea.args", UPLOAD: "upload", USERNAME: "username", PASSWORD: "password", INPUT: "input", INPUT_ARGS: ".args", TEXT: "text", TEXTAREA: "textarea", SELECT: "select", BUTTON: "button", @@ -186,8 +189,10 @@ var html = { CLASS: "class", BLOCK: "block", NONE: "none", FLOAT: "float", CLEAR: "clear", STROKE_WIDTH: "stroke-width", STROKE: "stroke", FILL: "fill", FONT_SIZE: "font-size", MONOSPACE: "monospace", SCROLL: "scroll", HEIGHT: "height", WIDTH: "width", LEFT: "left", TOP: "top", RIGHT: "right", BOTTOM: "bottom", - MAX_HEIGHT: "max-height", MAX_WIDTH: "max-width", + MAX_HEIGHT: "max-height", MAX_WIDTH: "max-width", MARGIN_X: "margin-x", MARGIN_Y: "margin-y", + PLUGIN_MARGIN: 10, ACTION_HEIGHT: 26, ACTION_MARGIN: 200, HIDDEN: "hidden", SELECT: "select", + FIXED: "fixed", WSS: "wss", SVG: "svg", CANVAS: "canvas", IFRAME: "iframe", CHROME: "chrome", LIST: "list", ITEM: "item", MENU: "menu", NODE: "node", @@ -267,20 +272,27 @@ var Volcanos = shy("火山架", {iceberg: "/chat/", volcano: "/frame.js", args: }); return msg }, + setHeaderMenu: function(list, cb) { can._menu && can.page.Remove(can, can._menu) + var msg = can.request({}, {trans: can.onaction._trans}) + return can._menu = can.search(msg._event, ["Header.onimport.menu", can._name].concat(list), cb) + }, set: function(name, key, value) { var msg = can.request({}); msg.Option(key, value) return can.search(msg._event, [can.core.Keys(name, "onimport", key)]) }, get: function(name, key, cb) { - if (can.user.mod.isCmd && name == "Action" && key == "size") { - var msg = can.request({}, {left: 0, top: 0, width: window.innerWidth, height: window.innerHeight}) - return can.core.CallFunc(cb, {msg: msg}) - } return can.search({}, [can.core.Keys(name, "onexport", key)], cb) }, - getActionSize: function(cb) { can.get("Action", "size", cb) }, + getHeader: function(key, cb) { return can.get("Header", key, cb) }, + getAction: function(key, cb) { return can.get("Action", key, cb) }, + getActionSize: function(cb) { return can.get("Action", "size", cb) }, search: function(event, cmds, cb) { return can.run && can.run(event, ["_search"].concat(cmds), cb, true) }, - Conf: function(key, value) { return can.core.Value(can._conf, key, value) }, _conf: {}, + Conf: function(key, value) { var res = can._conf + for (var i = 0; i < arguments.length; i += 2) { + res = can.core.Value(can._conf, arguments[i], arguments[i+1]) + } + return res + }, _conf: {}, } if (navigator.userAgent.indexOf("MSIE") > -1) { diff --git a/publish/chrome/contexts.js b/publish/chrome/contexts.js index 204b0660..fbaf6174 100644 --- a/publish/chrome/contexts.js +++ b/publish/chrome/contexts.js @@ -84,7 +84,7 @@ setTimeout(function() { Volcanos({Option: function() { return [] }, can.request(event, {zone: location.host, id: msg.Option(mdb.ID)}) can.run(event, [chat.FIELD, mdb.MODIFY, chat.TOP, sub._target.offsetTop]) can.run(event, [chat.FIELD, mdb.MODIFY, chat.LEFT, sub._target.offsetLeft]) - can.run(event, [chat.FIELD, mdb.MODIFY, "args", JSON.stringify(sub.Input([], true))]) + can.run(event, [chat.FIELD, mdb.MODIFY, ctx.ARGS, JSON.stringify(sub.Input([], true))]) can.user.toastSuccess(can) } }, document.body)