From 726ff8c6fe21c2a05abe3d8843e4fcb3805f6efa Mon Sep 17 00:00:00 2001 From: harveyshao Date: Sat, 29 Oct 2022 23:55:09 +0800 Subject: [PATCH] opt some --- frame.js | 112 +++++++++++++++++------------------------------- lib/misc.js | 4 +- lib/page.js | 5 ++- plugin/state.js | 2 +- proto.js | 55 ++++++++++-------------- 5 files changed, 69 insertions(+), 109 deletions(-) diff --git a/frame.js b/frame.js index 412e8a06..13b8e1ac 100644 --- a/frame.js +++ b/frame.js @@ -37,7 +37,7 @@ Volcanos(chat.ONENGINE, {_init: function(can, meta, list, cb, target) { if (panel.onengine._plugin(event, can, msg, panel, cmds, cb)) { return } if (panel.onengine._static(event, can, msg, panel, cmds, cb)) { return } - var toast, _toast = msg.Option(chat._TOAST); if (_toast) { can.onmotion.delay(can, function() { toast = toast||can.user.toastProcess(msg._can, _toast) }, 1000) } + var toast, _toast = msg.Option(chat._TOAST); if (_toast) { can.onmotion.delay(can, function() { toast = toast||can.user.toastProcess(msg._can, _toast) }, 500) } msg.option = can.core.List(msg.option, function(item) { return [chat._TOAST, ice.MSG_HANDLE].indexOf(item) > -1 && delete(msg[item])? undefined: item }) can.getHeader(chat.TOPIC, function(topic) { msg.Option(chat.TOPIC, topic) }) if (can.base.isUndefined(msg._daemon)) { var sub = msg._can @@ -52,7 +52,7 @@ Volcanos(chat.ONENGINE, {_init: function(can, meta, list, cb, target) { }, _static: function(event, can, msg, panel, cmds, cb) { if (can.user.isLocalFile) { var msg = can.request(event); msg.Clear(ice.MSG_APPEND) - var res = Volcanos.meta.pack[can.core.Keys(panel._name, cmds.join(ice.FS))]; res? msg.Copy(res): can.user.toast(can, "缺失数据") + var res = Volcanos.meta.pack[can.core.Keys(panel._name, cmds.join(ice.FS))]; res? msg.Copy(res): can.user.toast(can, "miss data") return can.base.isFunc(cb) && cb(msg), true } return false }, @@ -68,7 +68,7 @@ Volcanos(chat.ONENGINE, {_init: function(can, meta, list, cb, target) { return can.core.CallFunc(p, {can: p.can||panel, msg: msg, arg: cmds.slice(n), cmds: cmds.slice(n), cb: cb}), true } return false }, - plugin: shy("添加插件", function(can, name, command) { + plugin: shy(function(can, name, command) { if (can.base.isUndefined(name)) { return } else if (can.base.isUndefined(command)) { if (!can.base.isString(name) || name.indexOf("can.") == -1) { return } return arguments.callee.meta[can.base.trimPrefix(name, "can.")] @@ -77,11 +77,11 @@ Volcanos(chat.ONENGINE, {_init: function(can, meta, list, cb, target) { return can.base.isString(item) && (item = can.core.SplitInput(item, type)), type = item.type, item }), command.can = can, arguments.callee.meta[can.base.trimPrefix(name, "can.")] = command }), - listen: shy("监听事件", function(can, name, cb) { arguments.callee.meta[name] = (arguments.callee.meta[name]||[]).concat(cb) }), - signal: shy("触发事件", function(can, name, msg) { msg = msg||can.request(); var _msg = name == chat.ONREMOTE? msg.Option("_msg"): msg - _msg.Option("log.disable") != ice.TRUE && can.misc.Log(gdb.SIGNAL, name, can._name, (msg._cmds||[]).join(ice.SP), _msg) + listen: shy(function(can, name, cb) { arguments.callee.meta[name] = (arguments.callee.meta[name]||[]).concat(cb) }), + signal: function(can, name, msg) { msg = msg||can.request(); var _msg = name == chat.ONREMOTE? msg.Option("_msg"): msg + _msg.Option(ice.LOG_DISABLE) == ice.TRUE || can.misc.Log(gdb.SIGNAL, name, can._name, (msg._cmds||[]).join(ice.SP), _msg) return can.core.List(can.onengine.listen.meta[name], function(cb) { can.core.CallFunc(cb, {event: msg._event, msg: msg}) }).length - }), + }, }) Volcanos(chat.ONDAEMON, {_init: function(can, name) { if (can.user.isLocalFile) { return } can.misc.WSS(can, {type: html.CHROME, name: can.misc.Search(can, cli.DAEMON)||name||"", text: can.user.title()}, function(event, msg, cmd, arg) { if (!msg) { return } @@ -90,15 +90,14 @@ Volcanos(chat.ONDAEMON, {_init: function(can, name) { if (can.user.isLocalFile) can.onengine._search({}, can, msg, can, [chat._SEARCH, cmd].concat(arg), function() { msg.Reply() }) }) }, _list: [""], - pwd: function(can, msg, arg) { can._wss_name = can.ondaemon._list[0] = arg[0] }, - toast: function(can, msg, sub, arg) { can.core.CallFunc(can.user.toast, [sub].concat(arg)) }, - refresh: function(can, msg, sub) { sub.Update() }, - input: function(can, msg, sub, arg) { can.page.Select(can, sub._target, "input:focus", function(target) { target.value += arg[0] }) }, + pwd: function(can, arg) { can._wss_name = can.ondaemon._list[0] = arg[0] }, + toast: function(can, sub, arg) { can.core.CallFunc(can.user.toast, [sub].concat(arg)) }, + refresh: function(can, sub) { can.base.isFunc(sub.Update) && sub.Update() }, action: function(can, msg, sub, arg) { - if (can.page.Select(can, sub._option, "input.args[name="+arg[0]+"]", function(target) { return target.focus(), target }).length > 0) { return } - var _sub = can.core.Value(sub, chat._OUTPUTS_CURRENT); if (_sub && _sub.onaction) { return _sub.onaction && _sub.onaction._daemon({}, _sub, arg) } - sub.runAction({}, arg[0], arg.slice(1)) + if (can.page.SelectInput(can, sub._option, arg[0], function(target) { return arg[1] && (target.value = arg[1]), target.focus(), target })) { return } + var _sub = can.core.Value(sub, chat._OUTPUTS_CURRENT); (_sub||sub).runAction(can.request({}, msg), arg[0], arg.slice(1)) }, + input: function(can, msg, sub, arg) { can.page.Select(can, sub._target, "input:focus", function(target) { target.value += arg[0] }) }, grow: function(can, msg, sub, arg) { if (sub.onimport && sub.onimport._grow) { sub.onimport._grow(sub, msg, can.page.Color(arg.join(""))) @@ -131,12 +130,11 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { Option: function(key, value) { return can.page.SelectArgs(can, option, key, value)[0] }, Update: function(event, cmds, cb, silent) { sub.onappend._output0(sub, sub.Conf(), event||{}, cmds||sub.Input(), cb, silent); return true }, Focus: function() { can.page.SelectOne(can, option, html.INPUT_ARGS, function(target) { target.focus() }) }, - Input: function(cmds, save) { - cmds = cmds && cmds.length > 0? cmds: can.page.SelectArgs(can, option, "").concat(can.page.SelectArgs(can, action, "")), cmds = can.base.trim(cmds) + Input: function(cmds, save) { cmds = cmds && cmds.length > 0? cmds: can.page.SelectArgs(sub), cmds = can.base.trim(cmds) return !save || cmds[0] == ctx.ACTION || can.base.Eq(sub._history[sub._history.length-1], cmds) || sub._history.push(cmds), cmds }, - Clone: function() { meta.args = can.page.SelectArgs(can, option, "").concat(can.page.SelectArgs(can, action, "")) - can.onappend._init(can, meta, list, function(sub) { can.base.isFunc(cb) && cb(sub, true), can.onmotion.delay(can, function() { sub.Focus() }) }, target) + Clone: function() { meta.args = can.page.SelectArgs(can) + can.onappend._init(can, meta, list, function(sub) { can.base.isFunc(cb) && cb(sub, true), can.onmotion.delay(can, sub.Focus) }, target) }, }, list, function(sub) { sub.Conf(meta), meta.feature = can.base.Obj(meta.feature, {}) can.page.ClassList.add(can, field, meta.index? meta.index.split(ice.PT).pop(): meta.name) @@ -145,8 +143,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { case lang.OBJECT: can.page.style(can, sub._target, style); break } sub.Mode() != meta.type && can.page.ClassList.add(can, field, sub.Mode()) - sub._trans = can.base.Copy(sub._trans||{}, can.core.Value(sub, [chat.ONACTION, chat._TRANS])) - meta.inputs && sub.onappend._option(sub, meta, sub._option, meta.msg) + sub._trans = can.base.Copy(sub._trans||{}, can.core.Value(sub, [chat.ONACTION, chat._TRANS])), meta.inputs && sub.onappend._option(sub, meta, sub._option, meta.msg) if (meta.msg) { var msg = sub.request(); msg.Copy(can.base.Obj(meta.msg)), sub.onappend._output(sub, msg, meta.display||msg.Option(ice.MSG_DISPLAY)||meta.feature.display) } sub._legend[chat.ONMOUSEENTER] = function(event) { @@ -163,27 +160,25 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { return Volcanos(item.name, {_root: can._root, _follow: can.core.Keys(can._follow, item.name), _target: can.onappend.input(can, item, args[index]||opts[item.name], option||can._option), _option: option||can._option, _action: can._action, _output: can._output, _status: can._status, + CloneField: can.Clone, CloneInput: function() { can.onmotion.focus(can, add(item)._target) }, Option: can.Option, Action: can.Action, Status: can.Status, Input: can.Input, - CloneInput: function() { can.onmotion.focus(can, add(item)._target) }, CloneField: can.Clone, }, [item.display, chat.PLUGIN_INPUT_JS], function(sub) { sub.Conf(item) sub.run = function(event, cmds, cb, silent) { var msg = can.request(event, kit.Dict(chat._TOAST, ice.PROCESS)) - if (msg.RunAction(event, sub, cmds)) { return } - if (msg.RunAction(event, can.core.Value(can, chat._OUTPUTS_CURRENT), cmds)) { return } + if (msg.RunAction(event, sub, cmds) || msg.RunAction(event, can.core.Value(can, chat._OUTPUTS_CURRENT), cmds)) { return } can.Update(event, can.Input(cmds, !silent), cb, silent) }, can._inputs[item.name] = sub, sub.sup = can can.core.ItemCB(sub.onaction, function(key, cb) { sub._target[key] = function(event) { cb(can.request(event)._event, sub) } }) can.core.ItemCB(item, function(key, cb) { sub._target[key] = function(event) { cb(can.request(event)._event, sub) } }) skip? next(): can.core.CallFunc([sub.onaction, chat._INIT], {can: sub, meta: item, cb: next, target: sub._target}); - // (item.action||can.core.Value(meta, [ctx.FEATURE, ctx.INPUTS])) && can.onappend.figure(sub, item, sub._target, function(_sub, value) { - can.onappend.figure(sub, item, sub._target, function(_sub, value) { + (item.action||can.core.Value(meta, [ctx.FEATURE, ctx.INPUTS])) && can.onappend.figure(sub, item, sub._target, function(_sub, value) { sub._target.value = value, can.onmotion.focus(can, sub._target), can.onmotion.delay(can, function() { can.Update() }) }) }) }; can.core.Next(([{type: html.BUTTON, name: cli.CLOSE}]).concat(can.base.getValid(can.core.Value(can, [chat.ONIMPORT, mdb.LIST]), can.base.Obj(meta.inputs, []))||[]), add) }, _action: function(can, list, action, meta) { meta = meta||can.onaction||{}, action = action||can._action, can.onmotion.clear(can, action) - return can.core.List(can.page.inputs(can, can.base.getValid(can.base.Obj(list), can.core.Value(can, [chat.ONACTION, mdb.LIST]), can.core.Item(meta))||[]), function(item) { + return can.core.List(can.page.inputs(can, can.base.getValid(can.base.Obj(list), can.core.Value(can, [chat.ONACTION, mdb.LIST]), meta != can.onaction? can.core.Item(meta): [])||[]), function(item) { !can.base.isUndefined(item) && can.onappend.input(can, item == ""? /* 空白 */ {type: html.SPACE}: can.base.isString(item)? /* 按键 */ {type: html.BUTTON, name: item, value: can.user.trans(can, item, meta._trans), onclick: function(event) { var cb = meta[item]||meta[chat._ENGINE]; cb? can.core.CallFunc(cb, {event: event, can: can, button: item}): can.run(event, [ctx.ACTION, item].concat(can.sup.Input())) @@ -196,20 +191,11 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { }, _output0: function(can, meta, event, cmds, cb, silent) { var msg = can.request(event); if (msg.RunAction(event, can, cmds)) { return } if (msg.Option(ice.MSG_HANDLE) != ice.TRUE && cmds && cmds[0] == ctx.ACTION && meta.feature[cmds[1]]) { var msg = can.request(event, {action: cmds[1]}) - if (can.base.isFunc(meta.feature[cmds[1]])) { return can.core.CallFunc(meta.feature[cmds[1]], {can: can, msg: msg, cmds: cmds.slice(2)}) } - return can.user.input(event, can, meta.feature[cmds[1]], function(args) { var msg = can.request(event, {_handle: ice.TRUE}, can.Option()) - can.Update(event, cmds.slice(0, 2).concat(args), cb||function() { - if (can.core.CallFunc([can.sup, chat.ONIMPORT, ice.MSG_PROCESS], {can: can.sup, msg: msg}) || silent) { return } - if (cmds[1] == mdb.CREATE || cmds[1] == mdb.INSERT) { can.Update() } else if (msg.Result().length > 0 || msg.Length() > 0) { - can.onappend.table(can, msg), can.onappend.board(can, msg) - } else { can.Update() } - }, true) - }) + return can.user.input(event, can, meta.feature[cmds[1]], function(args) { can.Update(can.request(event, {_handle: ice.TRUE}, can.Option()), cmds.slice(0, 2).concat(args)) }) } - return can.run(event, cmds, function(msg) { if (can.base.isFunc(cb)) { can.core.CallFunc(cb, {can: can, msg: msg}); return } - var sub = can.core.Value(can, chat._OUTPUTS_CURRENT)||{}, process = msg._can == can || msg._can == sub + return can.run(event, cmds, cb||function(msg) { var sub = can.core.Value(can, chat._OUTPUTS_CURRENT)||{}, process = msg._can == can || msg._can == sub if (process && can.core.CallFunc([can, chat.ONIMPORT, ice.MSG_PROCESS], {can: can, msg: msg}) || silent) { return } - if (cmds && cmds[0] == ctx.ACTION) { if (msg.Length() == 0 && msg.Result() == "") { return can.Update() } } else { can._msg = msg, msg._cmds = cmds } + if (cmds && cmds[0] == ctx.ACTION) { if (cmds[1] == mdb.CREATE || cmds[1] == mdb.INSERT || msg.Length() == 0 && msg.Result() == "") { return can.Update() } } else { can._msg = msg, msg._cmds = cmds } can.onappend._output(can, msg, meta.display||msg.Option(ice.MSG_DISPLAY)||meta.feature.display) }) }, @@ -218,9 +204,8 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { _legend: can._legend, _option: can._option, _action: can._action, _output: output, _status: can._status, Update: can.Update, Option: can.Option, Action: can.Action, Status: can.Status, }, [display, chat.PLUGIN_TABLE_JS], function(sub) { sub.Conf(can.Conf()) - sub.run = function(event, cmds, cb, silent) { var msg = can.request(event) - if (msg.RunAction(event, sub, cmds)) { return } - return can.Update(event, can.Input(cmds, !silent), cb, silent) + sub.run = function(event, cmds, cb, silent) { + can.request(event).RunAction(event, sub, cmds) || can.Update(event, can.Input(cmds, !silent), cb, silent) }, can._outputs && can._outputs.push(sub), sub.sup = can sub._index = can._index, sub._msg = msg, sub.Conf(sub._args = can.base.ParseURL(display)) @@ -230,7 +215,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { } can._display_output? can._display_output(sub, msg): can.core.CallFunc([sub, chat.ONIMPORT, chat._INIT], {can: sub, msg: msg, cb: function(msg) { can.onmotion.clear(can, can._action), can.user.isMobile && can.ConfHeight() > can.ConfWidth() && can.onmotion.hidden(can, can._action) - action === false || sub.onappend._action(sub, msg.Option(ice.MSG_ACTION)||can.Conf(ice.MSG_ACTION), action||can._action) + action === false || sub.onappend._action(sub, can.Conf(ice.MSG_ACTION)||msg.Option(ice.MSG_ACTION), action||can._action) action === false || sub.onappend._status(sub, msg.Option(ice.MSG_STATUS)), sub.onappend.tools(sub, msg) can.user.isMobile && can.isCmdMode() && can.page.style(can, can._output, html.MAX_HEIGHT, can.ConfHeight()) can.core.List([chat.FLOAT, chat.FULL, chat.CMD], function(mode) { can.page.ClassList.has(can, can._target, mode) && sub.onlayout[mode](sub) }) @@ -240,7 +225,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { }, _status: function(can, list, status) { status = status||can._status, can.onmotion.clear(can, status) can.core.List(can.base.Obj(list, can.core.Value(can, [chat.ONEXPORT, mdb.LIST])), function(item) { item = can.base.isString(item)? {name: item}: item - if (item.value && item.value.indexOf && item.value.indexOf(ice.HTTP) == 0) { item.value = can.page.Format(html.A, item.value) } + if (can.base.beginWith(item.value, ice.HTTP)) { item.value = can.page.Format(html.A, item.value) } can.page.Append(can, status, [{view: can.base.join([html.ITEM, item.name]), title: item.name, list: [ {text: [item.name, html.LABEL]}, {text: [": ", html.LABEL]}, {text: [(item.value||"")+"", html.SPAN, item.name]}, ], onclick: function(event) { can.user.copy(event, can, item.value) }}]) @@ -254,19 +239,18 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { ]}]) }, input: function(can, item, value, target, style) { - switch (item.type) { case "": return can.page.Append(can, target, [item]) + switch (item.type) { + case "": return can.page.Append(can, target, [item]) case html.SPACE: return can.page.Append(can, target, [{view: can.base.join([html.ITEM, html.SPACE])}]) } var input = can.page.input(can, can.base.Copy({}, item), value) - if (item.type == html.SELECT && item.value) { - input._init = function(target) { target.value = item.value } - } + if (item.type == html.SELECT && item.value) { input._init = function(target) { target.value = item.value } } if (item.type == html.TEXT) { input.onkeydown = item.onkeydown||function(event) { can.onkeymap.input(event, can), can.onkeymap.selectOutput(event, can), event.key == lang.ENTER && can.onkeymap.prevent(event) } } - if (item.range) { input._init = function(target) { item.mode = chat.SIMPLE - can.onappend.figure(can, item, target, function(sub, value, old) { target.value = value, can.onaction[item.name](event, can, item.name) }) - } } + if (item.range) { input._init = function(target) { can.onappend.figure(can, item, target, function(sub, value, old) { + target.value = value, can.core.CallFunc([can.onaction, item.name], [event, can, item.name]) + }) } } var br = input.type == html.TEXTAREA? [{type: html.BR, style: {clear: html.BOTH}}]: [] var title = can.Conf(can.core.Keys(ctx.FEATURE, chat.TITLE, item.name))||""; title && (input.title = title) return can.page.Append(can, target, ([{view: style||can.base.join([html.ITEM, item.type]), list: [input]}]).concat(br))[item.name] @@ -275,32 +259,16 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { var table = can.page.AppendTable(can, msg, target||can._output, msg.append, cb||function(value, key, index, line, array) { if (msg.append.length == 2 && msg.append[0] == mdb.KEY && msg.append[1] == mdb.VALUE) { if (key == mdb.VALUE) { key = line.key } line = {}, can.core.List(array, function(item) { line[item.key] = item.value }) - key == "extra.cmd" && can.onappend.plugin(can, {ctx: line["extra.ctx"], cmd: line["extra.cmd"], arg: line["extra.arg"]}, function(sub) { - sub.run = function(event, cmds, cb) { can.runActionCommand(can.request(event, line, can.Option()), can.core.Keys(line["extra.ctx"], line["extra.cmd"]), cmds, cb) } - }, target||can._output) - } - function run(cmds) { - return can.run(can.request(event, line, can.Option()), cmds, function(msg) { - if (can.core.CallFunc([can.sup, chat.ONIMPORT, ice.MSG_PROCESS], {can: can.sup, msg: msg})) { return } - if (msg.Option(ice.MSG_DISPLAY) != "") { - can.onappend._output(can.sup, msg, msg.Option(ice.MSG_DISPLAY)) - } else if (msg.Length() > 0 || msg.Result().length > 0 ) { - can.onappend.table(can, msg), can.onappend.board(can, msg) - } else { can.Update() } - }, true) } + function run(cmd, arg) { return can.run(can.request(event, line, can.Option()), [ctx.ACTION, cmd].concat(arg)) } return {text: [value, html.TD], onclick: function(event) { var target = event.target if (can.page.tagis(target, html.INPUT) && target.type == html.BUTTON) { - meta && meta[target.name]? can.user.input(can.request(event, {action: target.name}), can, meta[target.name], function(args) { - run([ctx.ACTION, target.name].concat(args)) - }): run([ctx.ACTION, target.name]) - } else if (can.sup.onimport.change(event, can.sup, key, event.target.innerText).length == 0) { - can.sup.onexport.record(can.sup, line) - } + meta && meta[target.name]? can.user.input(can.request(event, {action: target.name}), can, meta[target.name], function(args) { run(target.name, args) }): run(target.name) + } else { can.sup.onimport.change(event, can.sup, key, event.target.innerText) || can.sup.onexport.record(can.sup, line) } }, ondblclick: function(event) { if ([mdb.KEY, mdb.HASH, mdb.ID].indexOf(key) > -1) { return } - var item = can.core.List(can.Conf("feature.insert"), function(item) { if (item.name == key) { return item } })[0]||{name: key, value: value} + var item = can.core.List(can.Conf([ctx.FEATURE, mdb.INSERT]), function(item) { if (item.name == key) { return item } })[0]||{name: key, value: value} item.run = function(event, cmds, cb) { can.run(can.request(event, line), cmds, cb, true) } - can.onmotion.modifys(can, event.target, function(event, value, old) { run([ctx.ACTION, mdb.MODIFY, key, value]) }, item) + can.onmotion.modifys(can, event.target, function(event, value, old) { run(mdb.MODIFY, [key, value]) }, item) }} }); table && can.page.styleClass(can, table, chat.CONTENT) if (msg.append && msg.append[msg.append.length-1] == ctx.ACTION) { can.page.ClassList.add(can, table, ctx.ACTION) } @@ -309,7 +277,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { board: function(can, text, target) { text && text.Result && (text = text.Result()); if (!text) { return } var code = can.page.Append(can, target||can._output, [{text: [can.page.Color(text), html.DIV, html.CODE]}]).code can.page.Select(can, code, html.INPUT_BUTTON, function(target) { target.onclick = function(event) { - can.runAction(can.request(event, can.Option()), target.name, [], function(msg) { can.run() }) + can.runAction(can.request(event, can.Option()), target.name) } }); return (code.scrollBy && code.scrollBy(0, 10000)), code }, tools: function(can, msg, cb, target) { can.onimport.tool(can, can.base.Obj(msg.Option(ice.MSG_TOOLKIT), []), cb, target) }, diff --git a/lib/misc.js b/lib/misc.js index 3b2d8939..76cbb830 100644 --- a/lib/misc.js +++ b/lib/misc.js @@ -146,12 +146,12 @@ Volcanos("misc", {Message: function(event, can) { var msg = {} var res = can.request({}); res._source = (msg[ice.MSG_TARGET]||[]).reverse().slice(1)||[] res.Option({_handle: ice.TRUE, _target: (msg[ice.MSG_SOURCE]||[]).reverse().join(ice.PT)}) res.append = msg.append, can.core.List(msg.append, function(key) { res[key] = msg[key] }), res.result = (msg.result||[]).concat(can.core.List(arguments)) - res.Option("log.disable", msg.Option("log.disable")) != ice.TRUE && can.misc.Log(html.WSS, ice.MSG_RESULT, msg.result||[], msg) + res.Option(ice.LOG_DISABLE, msg.Option(ice.LOG_DISABLE)) != ice.TRUE && can.misc.Log(html.WSS, ice.MSG_RESULT, msg.result||[], msg) socket.send(JSON.stringify(res)) }, msg.detail = data.detail, msg.Copy(data) try { - msg.Option("log.disable") != ice.TRUE && can.misc.Log(html.WSS, ice.MSG_DETAIL, msg.detail, msg) + msg.Option(ice.LOG_DISABLE) != ice.TRUE && can.misc.Log(html.WSS, ice.MSG_DETAIL, msg.detail, msg) can.base.isFunc(cb) && cb(event, msg, msg.detail[0], msg.detail.slice(1)) } catch (e) { can.misc.Warn(e), msg.Reply() } } diff --git a/lib/page.js b/lib/page.js index ddfdb444..7d6fe8d0 100644 --- a/lib/page.js +++ b/lib/page.js @@ -13,8 +13,9 @@ Volcanos("page", {ClassList: { can.page.Select(can, target, html.IFRAME, function(item) { can.page.SelectAll(can, item.contentWindow.document.body, key, cb, interval, cbs) }) return can.core.List(target && target.querySelectorAll(key), cb, interval, cbs) }, - SelectInput: function(can, target, name, cb) { return can.page.Select(can, target, "input[name="+name+"]", cb) }, + SelectInput: function(can, target, name, cb) { return can.page.Select(can, target, "input[name="+name+"]", cb)[0] }, SelectArgs: function(can, option, key, cb) { + if (can.base.isUndefined(option)) { return can.page.SelectArgs(can, can._option, "").concat(can.page.SelectArgs(can, can._action, "")) } if (can.base.isUndefined(key)) { var value = {}; can.page.SelectArgs(can, option, "", function(item) { item.name && item.value && (value[item.name] = item.value) }); return [value] } if (can.base.isObject(key)) { return can.core.Item(key, function(key, value) { can.page.SelectArgs(can, option, key, value) }), [key] } if (!can.base.isFunc(cb)) { var value = cb; cb = function(item) { if (item.type == html.BUTTON) { return } return item.name && (can.base.isUndefined(value)? item.value: (item.value = value))||"" } } @@ -33,7 +34,7 @@ Volcanos("page", {ClassList: { if (can.base.isIn(k, "height", "width", "min-height", "max-height", "min-width", "max-width") && parseInt(v) < 0) { return target[key] && (target[key][k] = "") } if (can.base.isIn(k, "height", "width", "min-height", "max-height", "min-width", "max-width", "left", "top", "right", "bottom", "margin-left", "margin-top", "margin", "padding", "font-size", - ) && v && (can.base.isNumber(v) || !can.base.endWidth(v, "px"))) { v += "px" } + ) && v && (can.base.isNumber(v) || !can.base.endWith(v, "px"))) { v += "px" } target[key] && (target[key][k] = v) }) }); return target diff --git a/plugin/state.js b/plugin/state.js index 757b423b..2ead51ec 100644 --- a/plugin/state.js +++ b/plugin/state.js @@ -85,7 +85,7 @@ Volcanos(chat.ONIMPORT, {_process: function(can, msg) { return can.page.SelectArgs(can, can._option, "", function(input) { if (input.name != name || value == input.value) { return } return input.value = value, can.Update(event, can.Input([], true), cb), input - }) + })[0] }, title: function(can, title) { can.isCmdMode() && can.user.title(title) }, }) diff --git a/proto.js b/proto.js index 5eeac5ef..9843c4fb 100644 --- a/proto.js +++ b/proto.js @@ -1,10 +1,6 @@ var kit = { - Dict: function() { var res = {}; for (var i = 0; i < arguments.length; i += 2) { - if (typeof arguments[i] == "object") { - for (var k in arguments[i]) { res[k] = arguments[i][k] } i-- - } else if (arguments[i] != undefined) { - res[arguments[i]] = arguments[i+1] - } + Dict: function() { var res = {}, args = arguments; for (var i = 0; i < args.length; i += 2) { + if (typeof args[i] == "object") { for (var k in args[i]) { res[k] = args[i][k] } i-- } else if (args[i] != undefined) { res[args[i]] = args[i+1] } } return res }, proto: function(sub, sup) { return sub.__proto__ = sup, sub }, } @@ -38,7 +34,6 @@ var ice = { MSG_PROCESS: "_process", MSG_DISPLAY: "_display", MSG_TOOLKIT: "_toolkit", - PROCESS_AGAIN: "_again", MSG_TITLE: "sess.title", @@ -49,6 +44,8 @@ var ice = { MSG_USERNAME: "user.name", MSG_USERNICK: "user.nick", + + LOG_DISABLE: "log.disable", ErrWarn: "warn: ", ErrNotLogin: "not login: ", @@ -75,7 +72,7 @@ var aaa = { } var web = { SPACE: "space", DREAM: "dream", SHARE: "share", - WEBSITE: "website", REFRESH: "refresh", UPLOAD: "upload", DOWNLOAD: "download", + WEBSITE: "website", REFRESH: "refresh", CLEAR: "clear", UPLOAD: "upload", DOWNLOAD: "download", SHARE_CACHE: "/share/cache/", GET: "GET", PUT: "PUT", POST: "POST", DELETE: "DELETE", @@ -85,8 +82,7 @@ var web = { var mdb = { DICT: "dict", META: "meta", HASH: "hash", LIST: "list", - ID: "id", KEY: "key", TIME: "time", ZONE: "zone", TYPE: "type", NAME: "name", TEXT: "text", - LINK: "link", SCAN: "scan", SHOW: "show", HELP: "help", + ID: "id", KEY: "key", TIME: "time", ZONE: "zone", TYPE: "type", NAME: "name", TEXT: "text", LINK: "link", SCAN: "scan", HELP: "help", SHORT: "short", FIELD: "field", TOTAL: "total", COUNT: "count", LIMIT: "limit", INDEX: "index", VALUE: "value", EXTRA: "extra", ALIAS: "alias", EXPIRE: "expire", @@ -144,11 +140,9 @@ var chat = { libs: ["/lib/base.js", "/lib/core.js", "/lib/misc.js", "/lib/page.js", "/lib/user.js"], panel_list: [ - {name: "Header", help: "标题栏", pos: "head", state: ["time", "usernick", "avatar"]}, - {name: "River", help: "群聊组", pos: "left"}, - {name: "Action", help: "工作台", pos: "main"}, - {name: "Search", help: "搜索框", pos: "auto"}, - {name: "Footer", help: "状态条", pos: "foot", state: ["ncmd", "ntip"]}, + {name: "Header", pos: "head", state: ["time", "usernick", "avatar"]}, + {name: "River", pos: "left"}, {name: "Action", pos: "main"}, {name: "Search", pos: "auto"}, + {name: "Footer", pos: "foot", state: ["ncmd", "ntip"]}, ], plugin_list: [ "/plugin/state.js", @@ -172,7 +166,7 @@ var chat = { ONENGINE: "onengine", ONDAEMON: "ondaemon", ONAPPEND: "onappend", ONLAYOUT: "onlayout", ONMOTION: "onmotion", ONKEYMAP: "onkeymap", ONIMPORT: "onimport", ONSYNTAX: "onsyntax", ONFIGURE: "onfigure", ONACTION: "onaction", ONDETAIL: "ondetail", ONEXPORT: "onexport", ONPLUGIN: "onplugin", - ONMAIN: "onmain", ONLOGIN: "onlogin", ONSEARCH: "onsearch", ONREMOTE: "onremote", + ONMAIN: "onmain", ONLOGIN: "onlogin", ONREMOTE: "onremote", ONSEARCH: "onsearch", ONSIZE: "onsize", ONTOAST: "ontoast", ONSHARE: "onshare", ONPRINT: "onprint", ONRESIZE: "onresize", ONKEYUP: "onkeyup", ONKEYDOWN: "onkeydown", ONMOUSEENTER: "onmouseenter", ORIENTATIONCHANGE: "orientationchange", ONSTORM_SELECT: "onstorm_select", ONACTION_NOTOOL: "onaction_notool", ONACTION_TOUCH: "onaction_touch", ONACTION_CMD: "onaction_cmd", @@ -185,8 +179,8 @@ var team = { TASK: "task", PLAN: "plan", } var mall = { + COUNT: "count", PRICE: "price", ASSET: "asset", SALARY: "salary", - PRICE: "price", COUNT: "count", } var svg = { @@ -199,7 +193,7 @@ var svg = { } var html = {PLUGIN_MARGIN: 10, ACTION_HEIGHT: 31, ACTION_MARGIN: 200, 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", DIV_CONTENT: "div.content", + 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", FIELDSET_FLOAT: "fieldset.float", FIELDSET_HEAD: "fieldset.head", FIELDSET_FOOT: "fieldset.foot", FIELDSET_LEFT: "fieldset.left", FIELDSET_MAIN: "fieldset.main", OPTION_ARGS: "select.args,input.args,textarea.args", INPUT_ARGS: "input.args,textarea.args", INPUT_BUTTON: "input[type=button]", INPUT_FILE: "input[type=file]", @@ -218,18 +212,18 @@ var html = {PLUGIN_MARGIN: 10, ACTION_HEIGHT: 31, ACTION_MARGIN: 200, PAGE: "page", TABS: "tabs", MENU: "menu", NODE: "node", ZONE: "zone", LIST: "list", ITEM: "item", NAME: "name", ICON: "icon", - SHOW: "show", HIDE: "hide", AUTO: "auto", HEAD: "head", LEFT: "left", MAIN: "main", FOOT: "foot", + HEAD: "head", LEFT: "left", MAIN: "main", FOOT: "foot", AUTO: "auto", SHOW: "show", HIDE: "hide", PLUGIN: "plugin", LAYOUT: "layout", CONTENT: "content", DIV_PAGE: "div.page", DIV_TABS: "div.tabs", DIV_ZONE: "div.zone", DIV_LIST: "div.list", DIV_ITEM: "div.item", DIV_NAME: "div.name", DIV_LAYOUT_HEAD: "div.layout.head", DIV_LAYOUT_FOOT: "div.layout.foot", DIV_LAYOUT_LEFT: "div.layout.left", - DIV_CODE: "div.code", DIV_FLOAT: "div.float", TABLE_CONTENT: "table.content", + DIV_CODE: "div.code", DIV_FLOAT: "div.float", DIV_CONTENT: "div.content", TABLE_CONTENT: "table.content", } var lang = { - UNDEFINED: "undefined", STRING: "string", NUMBER: "number", BOOLEAN: "boolean", OBJECT: "object", FUNCTION: "function", - META: "Meta", ALT: "Alt", CONTROL: "Control", SHIFT: "Shift", TAB: "Tab", ENTER: "Enter", ESCAPE: "Escape", PS: "/", - ESC: "Esc", CTRL: "Ctrl", CMD: "Cmd", SPACE: "Space", BACKSPACE: "Backspace", + UNDEFINED: "undefined", STRING: "string", NUMBER: "number", BOOLEAN: "boolean", FUNCTION: "function", OBJECT: "object", + META: "Meta", ALT: "Alt", CONTROL: "Control", SHIFT: "Shift", TAB: "Tab", ENTER: "Enter", ESCAPE: "Escape", + CMD: "Cmd", CTRL: "Ctrl", SPACE: "Space", BACKSPACE: "Backspace", ESC: "Esc", PS: "/", } function shy(help, meta, list, cb) { var args = arguments, i = 0 @@ -239,7 +233,7 @@ function shy(help, meta, list, cb) { var args = arguments, i = 0 var Volcanos = shy("火山架", {iceberg: "/chat/", volcano: "/frame.js", cache: {}, pack: {}}, function(name, can, libs, cb) { var meta = arguments.callee.meta, list = arguments.callee.list; if (typeof name == lang.OBJECT) { if (name.length > 0) { return Volcanos({panels: [{name: "Header", pos: html.HIDE, state: [aaa.USERNICK]}, {name: "Action", pos: html.MAIN, tool: name}]}) } - var Config = name; name = Config.name||ice.CAN, kit.proto(meta, Config), _can_name = "" + var Config = name; name = Config.name||ice.CAN, kit.proto(meta, Config), _can_name = "", _can_path = "" meta.iceberg = Config.iceberg||meta.iceberg, meta.libs = Config.libs||chat.libs, panels = Config.panels||chat.panel_list libs = [], panels.forEach(function(p) { p && (libs = libs.concat(p.list = p.list||["/panel/"+p.name+nfs._CSS, "/panel/"+p.name+nfs._JS])) }), libs = libs.concat(Config.plugin||chat.plugin_list) cb = can||function(can) { can.onengine._init(can, can.Conf(Config), panels, Config._init, can._target) } @@ -276,13 +270,10 @@ var Volcanos = shy("火山架", {iceberg: "/chat/", volcano: "/frame.js", cache: }); return msg }, - runActionCommand: function(event, index, args, cb) { can.runAction(event, ice.RUN, can.misc.concat(can, [index], args), cb) }, - runAction: function(event, action, args, cb) { can.request(event, {_handle: ice.TRUE}, can.Option()) - can.run(event, can.misc.concat(can, [ctx.ACTION].concat(action), args), cb||function(msg) { - if (can.core.CallFunc([can, chat.ONIMPORT, ice.MSG_PROCESS], {can: can, msg: msg})) { return } - if (can.core.CallFunc([can.sup, chat.ONIMPORT, ice.MSG_PROCESS], {can: can.sup, msg: msg})) { return } - can.user.toastSuccess(can, action) - }, true) + runActionCommand: function(event, index, args, cb) { can.runAction(event, ice.RUN, can.misc.concat(can, [index], args), cb, true) }, + runAction: function(event, action, args, cb, silent) { + can.run(can.request(event, {_handle: ice.TRUE}, can.Option()), can.misc.concat(can, [ctx.ACTION].concat(action), args), cb, silent) + // can.run(can.request(event, can.Option()), can.misc.concat(can, [ctx.ACTION].concat(action), args), cb, silent) }, search: function(event, cmds, cb) { @@ -292,7 +283,7 @@ var Volcanos = shy("火山架", {iceberg: "/chat/", volcano: "/frame.js", cache: get: function(name, key, cb) { var value; can.search({}, [can.core.Keys(name, chat.ONEXPORT, key)], cb||function(msg) { value = msg.Result() }); return value }, set: function(name, key, value) { var msg = can.request(); msg.Option(key, value); return can.search(msg, [[name, chat.ONIMPORT, key]]) }, setHeaderMenu: function(list, cb) { can._menu && can.page.Remove(can, can._menu) - return can._menu = can.search(can.request({}, {trans: can.onaction._trans}), [["Header", chat.ONIMPORT, html.MENU], can._name].concat(list), cb) + return can._menu = can.search(can.request({}, {trans: can.onaction._trans}), [["Header", chat.ONIMPORT, html .MENU], can._name].concat(list), cb) }, setHeader: function(key, value) { return can.set("Header", key, value) }, getHeader: function(key, cb) { return can.get("Header", key, cb) },