From 291243c067954785eeb5fb6fa285377f5b9db58f Mon Sep 17 00:00:00 2001 From: harveyshao Date: Thu, 27 Oct 2022 13:19:34 +0800 Subject: [PATCH] opt frame.js --- frame.js | 352 +++++++++++++------------------------- lib/base.js | 31 +--- lib/core.js | 72 +++----- lib/misc.js | 30 ++-- lib/page.js | 6 +- lib/user.js | 79 +++------ plugin/local/wiki/draw.js | 50 +++--- plugin/story/pie.js | 2 +- plugin/story/spide.js | 8 +- plugin/story/trend.js | 10 +- proto.js | 95 +++------- 11 files changed, 258 insertions(+), 477 deletions(-) diff --git a/frame.js b/frame.js index 3ee0ffe3..26b464a0 100644 --- a/frame.js +++ b/frame.js @@ -1,28 +1,25 @@ Volcanos(chat.ONENGINE, {_init: function(can, meta, list, cb, target) { if (can.misc.Search(can, ice.MSG_SESSID)) { can.misc.CookieSessid(can, can.misc.Search(can, ice.MSG_SESSID)) return can.misc.Search(can, ice.MSG_SESSID, "") - } + } can.user.title(can.misc.Search(can, chat.TITLE)||can.misc.Search(can, ice.POD)||location.host) - can.require([can.volcano], null, function(can, key, sub) { can[key] = sub }) 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) - } - can.user.title(can.misc.Search(can, chat.TITLE)||can.misc.Search(can, ice.POD)||location.host) + }; can.require([can.volcano], null, function(can, key, sub) { can[key] = sub }) can.core.Next(list, function(item, next) { item.type = chat.PANEL - can.onappend._init(can, can.base.Copy(item, can.core.Value(can, [chat.RIVER, item.name])), item.list, function(panel) { - 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._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(panel, key, cmd) + can.onappend._init(can, can.base.Copy(item, can.core.Value(can, [chat.RIVER, item.name])), item.list, function(sub) { + sub.run = function(event, cmds, cb) { var msg = sub.request(event); cmds = cmds||[] + return (can.onengine[cmds[0]]||can.onengine._remote)(event, can, msg, sub, cmds, cb) + }, can[item.name] = sub + can.core.ItemCB(sub.onaction, function(key, cb) { + can.onengine.listen(can, key, function(msg) { can.core.CallFunc(cb, {can: sub, msg: msg}) }) + }), can.core.CallFunc([sub.onaction, chat._INIT], {can: sub, cb: next, target: sub._target}) + can.core.Item(sub.onplugin, function(key, cmd) { + sub.onplugin.hasOwnProperty(key) && can.base.isFunc(cmd) && can.onengine.plugin(sub, 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}) }) - }), can.core.CallFunc([panel.onaction, chat._INIT], {can: panel, cb: next, target: panel._target}) }, target) - }, function() { can.misc.Info(can.user.title(), ice.RUN, can) - can.onmotion._init(can, target), can.onkeymap._init(can) + }, function() { can.onmotion._init(can, target), can.onkeymap._init(can), can.misc.Info(can.user.title(), ice.RUN, can) can.onengine.listen(can, chat.ONSEARCH, function(msg, word) { word[0] == ctx.COMMAND && can.run(msg, ["can.command"]) }) can.onengine.signal(can, chat.ONMAIN, can.request()), can.base.isFunc(cb) && cb() }) @@ -30,34 +27,36 @@ Volcanos(chat.ONENGINE, {_init: function(can, meta, list, cb, target) { _search: function(event, can, msg, panel, cmds, cb) { var sub, mod = can, fun = can, key = ""; can.core.List(cmds[1].split(ice.PT), function(value) { fun && (sub = mod, mod = fun, fun = mod[value], key = value) - }); if (!sub || !mod || !fun) { can.misc.Warn(ice.ErrNotFound, cmds) - return can.base.isFunc(cb) && cb(msg.Echo(ice.ErrWarn, ice.ErrNotFound, cmds)) - } + }); if (!sub || !mod || !fun) { can.misc.Warn(ice.ErrNotFound, cmds); return can.base.isFunc(cb) && cb(msg.Echo(ice.ErrWarn, ice.ErrNotFound, cmds)) } return can.core.CallFunc(fun, { - event: event, can: sub, msg: msg, cmds: cmds.slice(2), cb: cb, target: sub._target, - button: key, cmd: key, arg: cmds.slice(2), list: cmds.slice(2), + event: event, can: sub, msg: msg, cmds: cmds.slice(2), cb: cb, target: sub._target, button: key, cmd: key, arg: cmds.slice(2), list: cmds.slice(2), }, mod) }, _remote: function(event, can, msg, panel, cmds, cb) { if (panel.onengine._engine(event, can, msg, panel, cmds, cb)) { return } if (panel.onengine._plugin(event, can, msg, panel, cmds, cb)) { return } - - var keys = can.core.Keys(panel._name, cmds.join(ice.FS)) - if (can.user.isLocalFile) { var msg = can.request(event); msg.Clear(ice.MSG_APPEND) - var res = Volcanos.meta.pack[keys]; res? msg.Copy(res): can.user.toast(can, "缺失数据") - return can.base.isFunc(cb) && cb(msg) - } + 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) }) } - msg.option = can.core.List(msg.option, function(item) { return {_toast: true, _handle: true}[item] && delete(msg[item])? undefined: item }) - can.onengine.signal(panel, chat.ONREMOTE, can.request({}, {_follow: panel._follow, _msg: msg, _cmds: cmds})) + 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) { can.request(event, {topic: topic}) }) + if (can.base.isUndefined(msg._daemon)) { var sub = msg._can + can.base.isUndefined(sub._daemon) && can.ondaemon._list[0] && (sub._daemon = can.ondaemon._list.push(can)-1) + if (sub._daemon) { msg.Option(ice.MSG_DAEMON, can.core.Keys(can.ondaemon._list[0], sub._daemon)) } + } can.onengine.signal(panel, chat.ONREMOTE, can.request({}, {_follow: panel._follow, _msg: msg, _cmds: cmds})) - can.getHeader("topic", function(topic) { can.request(event, {topic: topic}) }) var names = msg.Option(chat._NAMES)||panel._names||((can.Conf("iceberg")||Volcanos.meta.iceberg)+panel._name) - can.misc.Run(event, can, {names: names, daemon: msg._daemon}, cmds, function(msg) { - Volcanos.meta.pack[keys] = msg, toast && toast.close(), toast = true, can.base.isFunc(cb) && cb(msg) + can.misc.Run(event, can, {names: names, daemon: msg._daemon}, cmds, function(msg) { toast && toast.close(), toast = true + can.base.isFunc(cb) && cb(msg), Volcanos.meta.pack[can.core.Keys(panel._name, cmds.join(ice.FS))] = msg }) }, + _static: function(event, can, msg, panel, cmds, cb) { + if (can.user.isLocalFile) { var msg = can.request(event); msg.Clear(ice.MSG_APPEND) + var keys = can.core.Keys(panel._name, cmds.join(ice.FS)) + var res = Volcanos.meta.pack[keys]; res? msg.Copy(res): can.user.toast(can, "缺失数据") + return can.base.isFunc(cb) && cb(msg), true + } return false + }, _engine: function(event, can, msg, panel, cmds, cb) { return false }, _plugin: function(event, can, msg, panel, cmds, cb) { if (cmds[0] == ctx.ACTION && cmds[1] == ice.RUN) { @@ -71,8 +70,7 @@ Volcanos(chat.ONENGINE, {_init: function(can, meta, list, cb, target) { } return false }, plugin: shy("添加插件", function(can, name, command) { - if (name == undefined) { return } - if (command == undefined) { + 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.")] } @@ -88,26 +86,19 @@ Volcanos(chat.ONENGINE, {_init: function(can, meta, list, cb, target) { }) 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 } - var sub = can.ondaemon._list[msg.Option(ice.MSG_TARGET)] - can.base.isFunc(can.ondaemon[cmd])? can.core.CallFunc(can.ondaemon[cmd], { - can: can, sub: sub, msg: msg, cmd: cmd, arg: arg, cb: function() { msg.Reply() }, - }): can.onengine._search({}, can, msg, can, [chat._SEARCH, cmd].concat(arg), function() { msg.Reply() }) + var sub = can.ondaemon._list[msg.Option(ice.MSG_TARGET)]; can.base.isFunc(can.ondaemon[cmd])? + can.core.CallFunc(can.ondaemon[cmd], { can: can, sub: sub, msg: msg, cmd: cmd, arg: arg, cb: function() { msg.Reply() }, }): + 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, arg) { can.core.CallFunc(can.user.toast, [can].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] }) - }, + input: function(can, msg, sub, arg) { can.page.Select(can, sub._target, "input:focus", function(target) { target.value += arg[0] }) }, 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.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)) }, grow: function(can, msg, sub, arg) { sub.onimport._grow(sub, msg, can.page.Color(arg.join(""))) }, close: function(can, msg, sub) { can.user.close() }, @@ -149,6 +140,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, "_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) } @@ -208,21 +200,10 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { }, true) }) } - if (meta && meta.index && meta.index.indexOf("can.") == 0) { - return can.onengine._plugin(event, can, msg, can, can.misc.concat(can, [meta.index], cmds), function(msg) { - if (can.base.isFunc(cb)) { can.core.CallFunc(cb, {can: can, msg: msg}); return } - !silent && can.onappend._output(can, msg, meta.display||msg.Option(ice.MSG_DISPLAY)||meta.feature.display) - }) - } - if (can.base.isUndefined(msg._daemon) && !silent) { - can.base.isUndefined(can._daemon) && can.ondaemon._list[0] && (can._daemon = can.ondaemon._list.push(can)-1) - if (can._daemon) { msg.Option(ice.MSG_DAEMON, can.core.Keys(can.ondaemon._list[0], can._daemon)) } - } 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 if (process && can.core.CallFunc([can, chat.ONIMPORT, ice.MSG_PROCESS], {can: can, msg: msg}) || silent) { return } - if (cmds && cmds[0] == ctx.ACTION && msg.Length() == 0 && msg.Result() == "") { return can.Update() } - if (!cmds || cmds[0] != ctx.ACTION) { can._msg = msg, msg._cmds = cmds } + if (cmds && cmds[0] == ctx.ACTION) { if (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) }) }, @@ -230,18 +211,17 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { Volcanos(display, {_root: can._root, _follow: can.core.Keys(can._follow, display), _target: output, _fields: can._target, _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.Mode(can.Mode()) + }, [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) }, can._outputs && can._outputs.push(sub), sub.sup = can sub._index = can._index, sub._msg = msg, sub.Conf(sub._args = can.base.ParseURL(display)) - sub._trans = can.base.Copy(sub._trans||{}, can.core.Value(sub, "onaction._trans")) + sub._trans = can.base.Copy(sub._trans||{}, can._trans, can.core.Value(sub, [chat.ONACTION, "_trans"])) if (sub.onimport && can.base.isArray(sub.onimport.list) && sub.onimport.list.length > 0) { can.onmotion.clear(can, can._option), can.onappend._option(can, {inputs: can.page.inputs(can, sub.onimport.list) }) } - 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) @@ -263,9 +243,8 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { field: function(can, type, item, target) { type = type||html.PLUGIN, item = item||{} var name = (item.nick||item.name||"").split(ice.SP)[0], title = !item.help || can.user.language(can) == "en"? name: name+"("+item.help.split(ice.SP)[0]+")" - if (name == "word") { title = item.help.split(ice.SP)[0] } return can.page.Append(can, target||can._output, [{view: [can.base.join([type||"", item.name||"", item.pos||""]), html.FIELDSET], list: [ - name && {text: [title, html.LEGEND]}, {view: [html.OPTION, html.FORM]}, html.ACTION, html.OUTPUT, html.STATUS, + name && {text: [name == "word"? item.help.split(ice.SP)[0]: title, html.LEGEND]}, {view: [html.OPTION, html.FORM]}, html.ACTION, html.OUTPUT, html.STATUS, ]}]) }, input: function(can, item, value, target, style) { @@ -278,9 +257,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { 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) - }) + can.onappend.figure(can, item, target, function(sub, value, old) { target.value = value, 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) @@ -288,13 +265,10 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { }, table: function(can, msg, cb, target, sort) { if (msg.Length() == 0) { return } var meta = can.base.Obj(msg.Option(mdb.META)) 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 (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 }) - if (key == mdb.VALUE) { key = line.key } 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) { var msg = can.request(event, line, can.Option()) - can.runActionCommand(event, can.core.Keys(line["extra.ctx"], line["extra.cmd"]), cmds, cb) - } + 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) { @@ -328,31 +302,24 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { 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() }) - } }) - 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) + } }); 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) }, _plugin: function(can, value, meta, cb, target, field) { - meta.feature = can.base.getValid(meta.feature, can.base.Obj(value.meta))||{} meta.inputs = can.base.getValid(meta.inputs, can.base.Obj(value.list))||[] - meta.display = meta.display||value.display - meta.height = meta.height||can.ConfHeight() - meta.width = meta.width||can.ConfWidth() - meta.type = meta.type||chat.PLUGIN - meta.name = meta.name||value.name - meta.help = meta.help||value.help + meta.feature = can.base.getValid(meta.feature, can.base.Obj(value.meta))||{} + meta.display = meta.display||value.display, meta.height = meta.height||can.ConfHeight(), meta.width = meta.width||can.ConfWidth() + meta.type = meta.type||chat.PLUGIN, meta.name = meta.name||value.name, meta.help = meta.help||value.help meta.args = can.base.getValid(can.base.Obj(meta.args), can.base.Obj(meta.arg), can.base.Obj(value.args), can.base.Obj(value.arg))||[] - if (can.misc.Debug(can, "plugin", meta.index, meta.args, meta)) { debugger } + if (can.misc.Debug(can, chat.PLUGIN, meta.index, meta.args, meta)) { debugger } can.onappend._init(can, meta, [chat.PLUGIN_STATE_JS], function(sub, skip) { sub._index = value.index||meta.index sub.run = function(event, cmds, cb) { can.runActionCommand(event, sub._index, cmds, cb) } can.base.isFunc(cb) && cb(sub, meta, skip) }, target||can._output, field) }, plugin: function(can, meta, cb, target, field) { meta = meta||{}, meta.index = meta.index||can.core.Keys(meta.ctx, meta.cmd) - if (can.misc.Debug(can, "plugin", meta.index, meta.args, meta)) { debugger } + if (can.misc.Debug(can, chat.PLUGIN, meta.index, meta.args, meta)) { debugger } var p = can.onengine.plugin(can, meta.index), res = {}; function cbs(sub, meta, skip) { kit.proto(res, sub), cb(sub, meta, skip) } (meta.inputs && meta.inputs.length > 0 || meta.meta)? /* 局部命令 */ can.onappend._plugin(can, {meta: meta.meta, list: meta.list}, meta, cbs, target, field): p? /* 前端命令 */ can.onappend._plugin(can, {name: meta.index, help: p.help, meta: p.meta, list: p.list}, meta, function(sub, meta, skip) { @@ -365,17 +332,14 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { }) }); return res }, figure: function(can, meta, target, cbs) { if ([html.BUTTON, html.SELECT].indexOf(meta.type) > -1) { return } - var input = meta.action||mdb.KEY; input != ice.AUTO && can.require(["/plugin/input/"+input+".js"], function(can) { + var input = meta.action||mdb.KEY; input != ice.AUTO && can.require(["/plugin/input/"+input+nfs._JS], function(can) { can.core.ItemCB(can.onfigure[input], function(key, on) { var last = target[key]; target[key] = function(event) { on(event, can, meta, function(cb) { function _cbs(sub, value, old) { can.onmotion.hidden(can, sub._target), can.base.isFunc(cbs)? cbs(sub, value, old): target.value = value||"", can.onmotion.delay(can, function() { can.onmotion.focus(can, target) }) } if (target._can) { return can.onmotion.toggle(can, target._can._target, true), can.base.isFunc(cb) && cb(target._can, _cbs) } - can.onappend._init(can, {type: html.INPUT, name: input, pos: chat.FLOAT, mode: meta.mode}, ["/plugin/input/"+input+".js"], function(sub) { sub.Conf(meta) - sub.run = function(event, cmds, cb) { - if (meta.range) { var msg = can.request(event) - for (var i = meta.range[0]; i < meta.range[1]; i += meta.range[2]||1) { msg.Push("value", i) } cb(msg) - } else { - (meta.run||can.run)(sub.request(event, can.Option()), cmds, cb, true) - } + can.onappend._init(can, {type: html.INPUT, name: input, pos: chat.FLOAT, mode: meta.mode}, ["/plugin/input/"+input+nfs._JS], function(sub) { sub.Conf(meta) + sub.run = function(event, cmds, cb) { var msg = can.request(event) + if (meta.range) { for (var i = meta.range[0]; i < meta.range[1]; i += meta.range[2]||1) { msg.Push(mdb.VALUE, i) } cb(msg); return } + (meta.run||can.run)(sub.request(event, can.Option()), cmds, cb, true) } can.onlayout.figure({target: target}, can, sub._target), can.page.style(sub, sub._target, meta.style) target._can = sub, sub.close = function() { can.page.Remove(can, sub._target), delete(target._can) } @@ -386,26 +350,17 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { }, }) Volcanos(chat.ONLAYOUT, {_init: function(can, target) { target = target||document.body - var width = can.page.width(), height = can.page.height() - can.page.SelectChild(can, target, can.page.Keys(html.FIELDSET_HEAD, html.FIELDSET_FOOT), function(field) { - height -= field.offsetHeight - }) + var height = can.page.height(), width = can.page.width() + can.page.SelectChild(can, target, can.page.Keys(html.FIELDSET_HEAD, html.FIELDSET_FOOT), function(field) { height -= field.offsetHeight }) can.page.SelectChild(can, target, html.FIELDSET_LEFT, function(field) { can.page.styleHeight(can, field, height), can.user.isMobile || (width -= field.offsetWidth) - can.page.SelectChild(can, field, html.DIV_OUTPUT, function(output) { - can.page.styleHeight(can, output, height-html.ACTION_HEIGHT) - }) + can.page.SelectChild(can, field, html.DIV_OUTPUT, function(output) { can.page.styleHeight(can, output, height-html.ACTION_HEIGHT) }) }) can.user.isMobile || can.page.SelectChild(can, target, html.FIELDSET_MAIN, function(field) { can.page.style(can, field, html.HEIGHT, height, html.WIDTH, width) - can.page.SelectChild(can, field, html.DIV_ACTION, function(action) { - height -= action.offsetHeight - }) - can.page.SelectChild(can, field, html.DIV_OUTPUT, function(output) { - can.page.styleHeight(can, output, height) - }) - }) - can.onengine.signal(can, chat.ONSIZE, can.request({}, {width: width, height: height})) + can.page.SelectChild(can, field, html.DIV_ACTION, function(action) { height -= action.offsetHeight }) + can.page.SelectChild(can, field, html.DIV_OUTPUT, function(output) { can.page.styleHeight(can, output, height) }) + }), can.onengine.signal(can, chat.ONSIZE, can.request({}, {height: height, width: width})) }, background: function(can, url, target) { can.page.style(can, target||document.body, "background-image", url == "" || url == "void"? "": 'url("'+url+'")') }, figure: function(event, can, target, right) { if (!event || !event.target) { return {} } target = target||can._fields||can._target @@ -425,16 +380,13 @@ Volcanos(chat.ONLAYOUT, {_init: function(can, target) { target = target||documen }); return can.onmotion.move(can, target, layout), layout }, - display: function(can, target) { - return can.page.Appends(can, target||can._output, [{view: [chat.LAYOUT, html.TABLE], list: [ - {type: html.TR, list: [chat.CONTENT]}, {type: html.TR, list: [chat.DISPLAY]}, - ]}]) - }, + display: function(can, target) { return can.page.Appends(can, target||can._output, [{view: [chat.LAYOUT, html.TABLE], list: [ + {type: html.TR, list: [chat.CONTENT]}, {type: html.TR, list: [chat.DISPLAY]}, + ]}]) }, profile: function(can, target) { function toggle(view) { var show = view.style.display == html.NONE can.onmotion.toggle(can, view, show), view._toggle? view._toggle(event, show): can.onimport.layout && can.onimport.layout(can); return show - } - var gt = "❯", lt = "❮", down = lt, up = gt, button = {} + } var gt = "❯", lt = "❮", down = lt, up = gt, button = {} var ui = can.page.Append(can, target||can._output, [{view: [chat.LAYOUT, html.TABLE], list: [ {view: [chat.PROJECT, html.TD], list: [chat.PROJECT]}, {type: html.TD, list: [ {type: html.TR, list: [{type: html.TR, list: [ @@ -451,8 +403,7 @@ Volcanos(chat.ONLAYOUT, {_init: function(can, target) { target = target||documen ]}, {view: [chat.PROFILE, html.TD], list: [chat.PROFILE]}, ]}]}, {view: [chat.DISPLAY, html.TR], list: [chat.DISPLAY]} ]} - ] }]) - function set(meta, button) { can.page.Appends(can, meta.target, [{text: [button, html.DIV]}]) } + ] }]); function set(meta, button) { can.page.Appends(can, meta.target, [{text: [button, html.DIV]}]) } can.core.List([chat.PROJECT, chat.DISPLAY, chat.PROFILE], function(item) { var meta = button[item] ui[item]._hide = function() { set(meta, meta.hide) }, ui[item]._show = function() { set(meta, meta.show) } }); return can.ui = ui @@ -467,15 +418,12 @@ Volcanos(chat.ONMOTION, {_init: function(can, target) { story: { _hash: { spark: function(can, meta, target) { - meta[mdb.NAME] == html.INNER? can.onmotion.copy(can, target): can.page.Select(can, target, html.SPAN, function(item) { - can.onmotion.copy(can, item) - }) + meta[mdb.NAME] == html.INNER? can.onmotion.copy(can, target): can.page.Select(can, target, html.SPAN, function(item) { can.onmotion.copy(can, item) }) }, }, auto: function(can, target) { var that = this; target = target||can._output - can.page.Select(can, target, ".story", function(item) { var meta = item.dataset - can.page.style(can, item, can.base.Obj(meta.style)) - can.core.CallFunc(that._hash[meta.type], [can, meta, target]) + can.page.Select(can, target, wiki.STORY_ITEM, function(item) { var meta = item.dataset + can.page.style(can, item, can.base.Obj(meta.style)), can.core.CallFunc(that._hash[meta.type], [can, meta, target]) }) can.page.Select(can, target, html.INPUT_BUTTON, function(target) { if (target.value == target.name) { target.value = can.user.trans(can, target.name) } @@ -486,8 +434,7 @@ Volcanos(chat.ONMOTION, {_init: function(can, target) { }, }, - hidden: function(can, target, show) { target = target||can._target - can.page.styleDisplay(can, target, show? "": html.NONE) + hidden: function(can, target, show) { target = target||can._target, can.page.styleDisplay(can, target, show? "": html.NONE) return show? target._show && target._show(): target._hide && target._hide(), show }, toggle: function(can, target, show, hide) { target = target||can._target @@ -500,44 +447,26 @@ Volcanos(chat.ONMOTION, {_init: function(can, target) { var old = can.page.Select(can, target, name, function(target, index) { if (can.page.ClassList.has(can, target, html.SELECT)) { return index } })[0] - which != undefined && can.page.Select(can, target, name, function(target, index) { - if (can.page.ClassList.set(can, target, html.SELECT, target == which || which == index)) { - can.base.isFunc(cb) && cb(target) - } + can.base.isUndefined(which) || can.page.Select(can, target, name, function(target, index) { + if (can.page.ClassList.set(can, target, html.SELECT, target == which || which == index)) { can.base.isFunc(cb) && cb(target) } }); return old }, modify: function(can, target, cb, item) { var back = target.innerHTML if (back.length > 120 || back.indexOf(ice.NL) > -1) { return can.onmotion.modifys(can, target, cb) } - var ui = can.page.Appends(can, target, [{type: html.INPUT, value: target.innerText, style: { - width: can.base.Max(target.offsetWidth-20, 400), - }, onkeydown: function(event) { - switch (event.key) { - case lang.ENTER: target.innerHTML = event.target.value - event.target.value == back || cb(event, event.target.value, back) - break - case lang.ESCAPE: target.innerHTML = back; break - default: can.onkeymap.input(event, can) - } - }, _init: function(target) { item && can.onappend.figure(can, item, target, cb) - can.onmotion.focus(can, target), can.onmotion.delay(can, function() { target.click() }) - }}]) + var ui = can.page.Appends(can, target, [{type: html.INPUT, value: target.innerText, style: {width: can.base.Max(target.offsetWidth-20, 400)}, onkeydown: function(event) { switch (event.key) { + case lang.ENTER: target.innerHTML = event.target.value, event.target.value == back || cb(event, event.target.value, back); break + case lang.ESCAPE: target.innerHTML = back; break + default: can.onkeymap.input(event, can) + } }, _init: function(target) { item && can.onappend.figure(can, item, target, cb), can.onmotion.focus(can, target), can.onmotion.delay(can, function() { target.click() }) }}]) }, modifys: function(can, target, cb, item) { var back = target.innerHTML var ui = can.page.Appends(can, target, [{type: html.TEXTAREA, value: target.innerText, style: { height: can.base.Min(target.offsetHeight-20, 60), width: can.base.Max(target.offsetWidth-20, 400), - }, onkeydown: function(event) { - switch (event.key) { - case lang.ENTER: - if (event.ctrlKey) { target.innerHTML = event.target.value - event.target.value == back || cb(event, event.target.value, back) - } - break - case lang.ESCAPE: target.innerHTML = back; break - default: can.onkeymap.input(event, can) - } - }, _init: function(target) { item && can.onappend.figure(can, item, target) - can.onmotion.focus(can, target), can.onmotion.delay(can, function() { target.click() }) - }}]) + }, onkeydown: function(event) { switch (event.key) { + case lang.ENTER: if (event.ctrlKey) { target.innerHTML = event.target.value, event.target.value == back || cb(event, event.target.value, back) } break + case lang.ESCAPE: target.innerHTML = back; break + default: can.onkeymap.input(event, can) + } }, _init: function(target) { item && can.onappend.figure(can, item, target), can.onmotion.focus(can, target), can.onmotion.delay(can, function() { target.click() }) }}]) }, tableFilter: function(can, target, value) { can.page.Select(can, target, html.TR, function(tr, index) { index == 0 && can.page.ClassList.set(can, tr, html.HIDDEN, can.page.Select(can, tr, html.TD, function(td) { if (td.innerText.indexOf(value) > -1) { return td } }) == 0) @@ -549,32 +478,21 @@ Volcanos(chat.ONMOTION, {_init: function(can, target) { can.core.List(list, function(target) { target && target._cache_key && can.page.Cache(target._cache_key, target, target.scrollTop+1) }) var key = next(can._cache_data = can._cache_data||{}, arguments[2]._cache_key); if (!key) { return } return can.core.List(list, function(target) { if (!target) { return } - var pos = can.page.Cache(target._cache_key = key, target) - if (pos) { target.scrollTo && target.scrollTo(0, pos-1); return target } + var pos = can.page.Cache(target._cache_key = key, target); if (pos) { target.scrollTo && target.scrollTo(0, pos-1); return target } }).length > 0 }, share: function(event, can, input, args) { var _args = args - return can.user.input(event, can, input, function(args) { - can.onengine.signal(can, chat.ONSHARE, can.request(event, {args: [mdb.TYPE, chat.FIELD].concat(_args||[], args||[])})) - }) - }, - focus: function(can, target) { if (!target) { return } - target.focus(), target.setSelectionRange && target.setSelectionRange(0, target.value.length) + return can.user.input(event, can, input, function(args) { can.onengine.signal(can, chat.ONSHARE, can.request(event, {args: [mdb.TYPE, chat.FIELD].concat(_args||[], args||[])})) }) }, + focus: function(can, target) { if (!target) { return } target.focus(), target.setSelectionRange && target.setSelectionRange(0, target.value.length) }, + copy: function(can, target, cb) { target.title = "点击复制", target.onclick = function(event) { can.user.copy(event, can, target.innerText), can.base.isFunc(cb) && cb(event) } }, - copy: function(can, target, cb) { - target.title = "点击复制", target.onclick = function(event) { - can.user.copy(event, can, target.innerText), can.base.isFunc(cb) && cb(event) - } - }, move: function(can, target, layout, cb) { var begin; layout = layout||{} can.page.style(can, target, layout), target.onmousedown = function(event) { layout.height = target.offsetHeight, layout.width = target.offsetWidth layout.left = target.offsetLeft, layout.top = target.offsetTop begin = can.base.Copy({x: event.x, y: event.y}, layout) - }, target.onmouseup = function(event) { begin = null } - - target.onmousemove = function(event) { if (!begin) { return } + }, target.onmouseup = function(event) { begin = null }, target.onmousemove = function(event) { if (!begin) { return } if (event.shiftKey) { layout.height = begin.height + event.y - begin.y, layout.width = begin.width + event.x - begin.x can.page.style(can, target, html.HEIGHT, layout.height, html.WIDTH, layout.width) @@ -584,30 +502,23 @@ Volcanos(chat.ONMOTION, {_init: function(can, target) { } } }, - hide: function(can, time, cb, target) { target = target||can._target + hide: function(can, time, cb, target) { target = target||can._target, can.page.style(can, target, html.OPACITY, 1) time = can.base.isObject(time)? time: {value: 10, length: time||20} - can.page.style(can, target, html.OPACITY, 1) - can.core.Timer(time, function(event, value, index) { - can.page.style(can, target, html.OPACITY, 1-(index+1)/time.length) - }, function() { can.base.isFunc(cb) && cb(), can.page.style(can, target, html.DISPLAY, html.NONE) }) + can.core.Timer(time, function(event, value, index) { can.page.style(can, target, html.OPACITY, 1-(index+1)/time.length) }, + function() { can.base.isFunc(cb) && cb(), can.page.style(can, target, html.DISPLAY, html.NONE) }) }, - show: function(can, time, cb, target) { target = target||can._target + show: function(can, time, cb, target) { target = target||can._target, can.page.style(can, target, html.OPACITY, 0, html.DISPLAY, html.BLOCK) time = can.base.isObject(time)? time: {interval: 10, length: time||30} - can.page.style(can, target, html.OPACITY, 0, html.DISPLAY, html.BLOCK) - can.core.Timer(time, function(event, value, index) { - can.page.style(can, target, html.OPACITY, (index+1)/time.length) - }, cb) + can.core.Timer(time, function(event, value, index) { can.page.style(can, target, html.OPACITY, (index+1)/time.length) }, cb) }, }) Volcanos(chat.ONKEYMAP, {_init: function(can, target) { document.body.onclick = function(event) { if (can.page.tagis(event.target, html.SELECT, html.INPUT, html.TEXTAREA)) { return } - if (can.user.isWebview && can.page.tagis(event.target, html.A)) { + if (can.page.tagis(event.target, html.A) && can.user.isWebview) { return event.shiftKey? window.outopen(event.target.href): can.user.open(event.target.href) } - can.page.Select(can, document.body, can.page.Keys("div.carte.float", "fieldset.input.key.float"), function(target) { - can.page.Remove(can, target) - }) + can.page.Select(can, document.body, can.page.Keys("div.carte.float", "fieldset.input.key.float"), function(target) { can.page.Remove(can, target) }) } can.onkeymap._build(can), document.body.onkeydown = function(event) { var msg = can.request(event, {"model": "normal"}); if (msg.Option(ice.MSG_HANDLE) == ice.TRUE) { return } @@ -634,20 +545,14 @@ Volcanos(chat.ONKEYMAP, {_init: function(can, target) { }) }, _parse: function(event, can, mode, list, target) { list = list||[] - if (event.metaKey && !can.user.isWebview) { return } - if (["Meta", "Alt", "Control", "Shift"].indexOf(event.key) > -1) { return list } - list.push(event.key); for (var pre = 0; pre < list.length; pre++) { - if ("0" <= list[pre] && list[pre] <= "9") { continue } break - }; var count = parseInt(list.slice(0, pre).join(""))||1 - - var map = can.onkeymap._mode[mode] + if (event.metaKey && !can.user.isWebview) { return } if ([lang.META, lang.ALT, lang.CONTROL, lang.SHIFT].indexOf(event.key) > -1) { return list } + list.push(event.key); for (var pre = 0; pre < list.length; pre++) { if ("0" <= list[pre] && list[pre] <= "9") { continue } break } + var count = parseInt(list.slice(0, pre).join(""))||1, map = can.onkeymap._mode[mode] function repeat(cb, count) { list = []; for (var i = 1; i <= count; i++) { if (can.core.CallFunc(cb, {event: event, can: can, target: target, count: count})) { break } } } 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 } - var map = can.onkeymap._engine[mode]; if (!map) { return [] } - for (var i = pre; i < list.length; i++ ) { - var map = map.list[list[i]]; if (!map) { return [] } + for (var i = pre; i < list.length; i++ ) { var map = map.list[list[i]]; if (!map) { return [] } if (i == list.length-1 && can.base.isFunc(map.cb)) { repeat(map.cb, count); return [] } } return list }, @@ -665,8 +570,8 @@ Volcanos(chat.ONKEYMAP, {_init: function(can, target) { f: function(event, can, target) { can.onengine.signal(can, chat.ONOPENSEARCH, can.request({}, {type: mdb.FOREACH})) }, }, insert: { - Escape: function(event, can, target) { if (event.key == "Escape") { target.blur() } }, - Enter: function(event, can, target) { if (event.key != "Enter") { return } + Escape: function(event, can, target) { if (event.key == lang.ESCAPE) { target.blur() } }, + Enter: function(event, can, target) { if (event.key != lang.ENTER) { return } var his = target._history||[]; his.push(target.value), target._history = his, target._current = his.length can.page.tagis(event.target, html.INPUT) && can.onmotion.focus(can, target) }, @@ -682,16 +587,11 @@ Volcanos(chat.ONKEYMAP, {_init: function(can, target) { if (target.value[end] != ice.SP && target.value[i] == ice.SP) { break } } can.onkeymap.deleteText(target, i+1, end-i) }, - - n: function(event, can, target) { - var his = target._history||[], pos = target._current||0 - pos = ++pos % (his.length+1) - target._current = pos, target.value = his[pos]||"" + n: function(event, can, target) { var his = target._history||[], pos = target._current||0 + pos = ++pos % (his.length+1), target._current = pos, target.value = his[pos]||"" }, - p: function(event, can, target) { - var his = target._history||[], pos = target._current||0 - pos = --pos % (his.length+1); if (pos < 0) { pos = his.length } - target._current = pos, target.value = his[pos]||"" + p: function(event, can, target) { var his = target._history||[], pos = target._current||0 + pos = --pos % (his.length+1); if (pos < 0) { pos = his.length } target._current = pos, target.value = his[pos]||"" }, }, }, _engine: {}, @@ -700,10 +600,8 @@ Volcanos(chat.ONKEYMAP, {_init: function(can, target) { target._keys = can.onkeymap._parse(event, can, mdb.INSERT+(event.ctrlKey? "_ctrl": ""), target._keys, target) }, cursorMove: function(target, count, begin) { - if (begin != undefined) { if (begin < 0) { begin += target.value.length+1 } - target.setSelectionRange(begin, begin) - } - count != undefined && target.setSelectionRange(target.selectionStart+count, target.selectionStart+count) + if (begin != undefined) { if (begin < 0) { begin += target.value.length+1 } target.setSelectionRange(begin, begin) } + count == undefined || target.setSelectionRange(target.selectionStart+count, target.selectionStart+count) return target.selectionStart }, insertText: function(target, text) { var start = target.selectionStart @@ -717,37 +615,27 @@ Volcanos(chat.ONKEYMAP, {_init: function(can, target) { }, selectInputs: function(event, can, cb, target) { - if (["Meta", "Alt", "Control", "Shift"].indexOf(event.key) > -1) { return } - - if (event.ctrlKey) { if (target._index == undefined) { target._index = -1, target._value = target.value } + if ([lang.META, lang.ALT, lang.CONTROL, lang.SHIFT].indexOf(event.key) > -1) { return } + if (event.ctrlKey) { if (can.base.isUndefined(target._index)) { target._index = -1, target._value = target.value } function select(order) { if (order == -1) { target.value = target._value } var index = 0; return can.page.Select(can, can._output, [html.TBODY, html.TR], function(tr) { if (can.page.ClassList.has(can, tr, html.HIDDEN)) { return } - can.page.ClassList.del(can, tr, html.SELECT); if (order != index++) { return tr } - can.page.ClassList.add(can, tr, html.SELECT), can.page.Select(can, tr, html.TD, function(td, index) { - index == 0 && (target.value = td.innerText) - }); return tr + can.page.ClassList.del(can, tr, html.SELECT); if (order == index++) { can.page.ClassList.add(can, tr, html.SELECT) + can.page.Select(can, tr, html.TD, function(td, index) { index == 0 && (target.value = td.innerText) }) + } return tr }).length } var total = select(target._index); switch (event.key) { case "n": select(target._index = (target._index+2) % (total+1) - 1); break case "p": select(target._index = (target._index+total+1) % (total+1) - 1); break default: return - } - return can.Status(mdb.INDEX, target._index), can.onkeymap.prevent(event) + } return can.Status(mdb.INDEX, target._index), can.onkeymap.prevent(event) } - - target._index = -1, target._value = target.value - can.page.Select(can, can._output, [html.TBODY, html.TR], function(tr, index) { - var has = false; can.page.Select(can, tr, html.TD, function(td) { - has = has || td.innerText.indexOf(target.value)>-1 - }), can.page.ClassList.set(can, tr, html.HIDDEN, !has) - }) - - var total = can.page.Select(can, can._output, [html.TBODY, html.TR], function(tr) { - if (!can.page.ClassList.has(can, tr, html.HIDDEN)) { return tr } - }).length; total == 0 && can.base.isFunc(cb) && cb() - can.Status(kit.Dict(mdb.TOTAL, total, mdb.INDEX, target._index)) + can.page.Select(can, can._output, [html.TBODY, html.TR], function(tr, index) { var has = false + can.page.Select(can, tr, html.TD, function(td) { has = has || td.innerText.indexOf(target.value)>-1 }), can.page.ClassList.set(can, tr, html.HIDDEN, !has) + }), target._index = -1, target._value = target.value + var total = can.page.Select(can, can._output, [html.TBODY, html.TR], function(tr) { if (!can.page.ClassList.has(can, tr, html.HIDDEN)) { return tr } }).length + total == 0 && can.base.isFunc(cb) && cb(), can.Status(kit.Dict(mdb.TOTAL, total, mdb.INDEX, target._index)) }, selectOutput: function(event, can) { if (!event.ctrlKey || event.key < "0" || event.key > "9") { return } event.key == "0"? can.onimport._back(can): can.page.Select(can, can._output, html.TR, function(tr, index) { if (index == event.key) { diff --git a/lib/base.js b/lib/base.js index c55e74ba..64f8443b 100644 --- a/lib/base.js +++ b/lib/base.js @@ -9,7 +9,7 @@ Volcanos("base", { } catch (e) { return val&&val.split&&val.split(ice.FS) || def } }, Copy: function(to, from, skip) { if (!from) { return to } - if (arguments.length == 2 || typeof skip == "boolean") { + if (arguments.length == 2 || typeof skip == lang.BOOLEAN) { for (var k in from) { if (skip && to[k] != undefined) { continue } if (from[k] === "") { delete(to[k]); continue } @@ -35,9 +35,9 @@ Volcanos("base", { Args: function() { var res = [] for (var i = 0; i < arguments.length; i += 2) { if (typeof arguments[i] == lang.OBJECT) { - for (var k in arguments[i]) { res.push(encodeURIComponent(k)+"="+encodeURIComponent(arguments[i][k])) } i--; continue + for (var k in arguments[i]) { res.push(encodeURIComponent(k)+ice.EQ+encodeURIComponent(arguments[i][k])) } i--; continue } else if (arguments[i]) { - res.push(encodeURIComponent(arguments[i])+"="+encodeURIComponent(arguments[i+1])) + res.push(encodeURIComponent(arguments[i])+ice.EQ+encodeURIComponent(arguments[i+1])) } } return res.join("&") }, @@ -51,13 +51,12 @@ Volcanos("base", { for (var k in arguments[i]) { args[k] = arguments[i][k] } } } } - var list = []; for (var k in args) { k &&args[k] && list.push(encodeURIComponent(k)+"="+encodeURIComponent(args[k])) } + var list = []; for (var k in args) { k &&args[k] && list.push(encodeURIComponent(k)+ice.EQ+encodeURIComponent(args[k])) } return url.split("?")[0]+(list.length>0? "?"+list.join("&"): "") }, _parse: function(url, res) { var list = url.split("?"); res = res||{}, res["_origin"] = list[0] - list[1] && list[1].split("&").forEach(function(item) { - var ls = item.split("="); res[decodeURIComponent(ls[0])] = decodeURIComponent(ls[1]) - }); return res + list[1] && list[1].split("&").forEach(function(item) { var ls = item.split(ice.EQ); res[decodeURIComponent(ls[0])] = decodeURIComponent(ls[1]) }) + return res }, ParseURL: function(url) { var res = this._parse(url); res.link = url, res.origin = res._origin; return res }, ParseJSON: function(str) { var res; if (typeof str == lang.OBJECT) { return str } @@ -151,21 +150,9 @@ Volcanos("base", { trimPrefix: function(str, pre) { if (str.indexOf(pre) == -1) { return str } return str.slice(pre.length) }, trimSuffix: function(str, end) { var index = str.lastIndexOf(end); if (index == -1 || index+end.length != str.length) { return str } return str.slice(0, index) }, join: function(list, sp) { return (list||[]).join(sp||ice.SP) }, - joins: function(list, inner, outer) { - for (var i = 0; i < list.length; i++) { - list[i] = typeof list[i] == lang.STRING? list[i]: list[i].join(inner||ice.FS) - } return list.join(outer||ice.SP) - }, - joinKV: function(list, inner, outer) { var res = [] - for (var i = 0; i < list.length-1; i += 2) { - res.push(list[i]+(inner||": ")+list[i+1]) - } return res.join(outer||ice.SP) - }, - count: function(str, s) { var n = 0 - for (var i = 0; i < str.length; i++) { - if (str[i] == s) { n++ } - } return n - }, + joins: function(list, inner, outer) { for (var i = 0; i < list.length; i++) { list[i] = typeof list[i] == lang.STRING? list[i]: list[i].join(inner||ice.FS) } return list.join(outer||ice.SP) }, + joinKV: function(list, inner, outer) { var res = []; for (var i = 0; i < list.length-1; i += 2) { res.push(list[i]+(inner||": ")+list[i+1]) } return res.join(outer||ice.SP) }, + count: function(str, s) { var n = 0; for (var i = 0; i < str.length; i++) { if (str[i] == s) { n++ } } return n }, replaceAll: function(str) { for (var i = 1; i < arguments.length; i += 2) { if (!arguments[i]) { continue } if (str.replaceAll) { str = str.replaceAll(arguments[i], arguments[i+1]); continue } diff --git a/lib/core.js b/lib/core.js index 632d98f7..cb2bf864 100644 --- a/lib/core.js +++ b/lib/core.js @@ -47,26 +47,20 @@ Volcanos("core", { } else { begin == -1 && (begin = i) } } return begin >= 0 && (s? push({type: lang.STRING, text: str.slice(begin), left: s, right: ""}): push(str.slice(begin))), res }, - SplitInput: function(item, type) { if (typeof item == lang.OBJECT) { return item } - type = type||html.TEXT; switch (item) { - case mdb.LIST: return {type: type = html.BUTTON, name: item, action: ice.AUTO} - case ice.BACK: return {type: type = html.BUTTON, name: item} - case mdb.NAME: return {type: type = html.TEXT, name: item} - case mdb.TEXT: return {type: type = html.TEXTAREA, name: item} - default: var ls = this.Split(item, " ", ":=@"), res = {type: type, name: ls[0]}; for (var i = 1; i < ls.length; i += 2) { - switch (ls[i]) { - case ":": res[mdb.TYPE] = ls[i+1]; break - case "=": - if (res[mdb.TYPE] == html.SELECT) { res.values = this.Split(ls[i+1]) - for (var j = 1; j < res.values.length; j++) { if (res.values[0] == "" || res.values[0] == res.values[j]) { - res.value = res.values[0], res.values = res.values.slice(1); break - } } - } else { res.value = ls[i+1] } break - case "@": res[ctx.ACTION] = ls[i+1]; break - } - } return res - } - }, + SplitInput: function(item, type) { if (typeof item == lang.OBJECT) { return item } type = type||html.TEXT; switch (item) { + case mdb.LIST: return {type: type = html.BUTTON, name: item, action: ice.AUTO} + case ice.BACK: return {type: type = html.BUTTON, name: item} + case mdb.NAME: return {type: type = html.TEXT, name: item} + case mdb.TEXT: return {type: type = html.TEXTAREA, name: item} + default: var ls = this.Split(item, " ", ":=@"), res = {type: type, name: ls[0]}; for (var i = 1; i < ls.length; i += 2) { switch (ls[i]) { + case ":": res[mdb.TYPE] = ls[i+1]; break + case "=": + if (res[mdb.TYPE] == html.SELECT) { res.values = this.Split(ls[i+1]); for (var j = 1; j < res.values.length; j++) { + if (res.values[0] == "" || res.values[0] == res.values[j]) { res.value = res.values[0], res.values = res.values.slice(1); break } + } } else { res.value = ls[i+1] } break + case "@": res[ctx.ACTION] = ls[i+1]; break + } } return res + } }, CallFunc: function(func, args, mod) { args = args||{}; var can = args["can"]||args[0], msg = args["msg"]||args[1] func = typeof func == lang.FUNCTION? func: typeof func == lang.OBJECT && func.length > 0? this.Value(func[0], this.Keys(func.slice(1))): typeof func == lang.STRING? this.Value(mod||can, func): null if (typeof func != lang.FUNCTION) { if (typeof args["cb"] == lang.FUNCTION) { args["cb"]() } return } @@ -76,18 +70,16 @@ Volcanos("core", { }, List: function(list, cb, interval, cbs) { if (typeof list == lang.STRING) { list = [list] } else if (typeof list == lang.NUMBER) { // [end cb interval]|[begin end interval] - var begin = 0, end = list, step = typeof interval == lang.NUMBER? interval: 1 + var begin = 0, end = list, step = typeof interval == lang.NUMBER? interval: 1; if (typeof cb == lang.NUMBER) { begin = list, end = cb, cb = null } list = []; for (var i = begin; i < end; i += step) { list.push(i) } } list = list||[] if (interval > 0) { - function loop(i) { if (i >= list.length) { return typeof cbs == lang.FUNCTION && cbs(list) } - cb(list[i], i, list), setTimeout(function() { loop(i+1) }, interval) - } typeof cb == lang.FUNCTION && list.length > 0 && setTimeout(function() { loop(0) }, interval/4) + function loop(i) { i >= list.length? typeof cbs == lang.FUNCTION && cbs(list): cb(list[i], i, list), setTimeout(function() { loop(i+1) }, interval) } + typeof cb == lang.FUNCTION && list.length > 0 && setTimeout(function() { loop(0) }, interval/4) } else { var slice = [], res - for (var i = 0; i < list.length; i++) { - typeof cb == lang.FUNCTION? (res = cb(list[i], i, list)) != undefined && slice.push(res): slice.push(list[i]) - } list = slice + for (var i = 0; i < list.length; i++) { typeof cb == lang.FUNCTION? (res = cb(list[i], i, list)) != undefined && slice.push(res): slice.push(list[i]) } + list = slice } return list }, Next: function(list, cb, cbs) { @@ -99,27 +91,17 @@ Volcanos("core", { return next(0), list }, Item: function(obj, cb) { var list = [] - for (var k in obj) { - var res = typeof cb == lang.FUNCTION? cb(k, obj[k]): k - res != undefined && list.push(res) - } return list + for (var k in obj) { var res = typeof cb == lang.FUNCTION? cb(k, obj[k]): k; res != undefined && list.push(res) } + return list }, Items: function(obj, cb) { var list = [] - for (var k in obj) { - list = list.concat(this.List(obj[k], function(v, i) { - return typeof cb == lang.FUNCTION && cb(v, i, k, obj) - })) - } return list + for (var k in obj) { list = list.concat(this.List(obj[k], function(v, i) { return typeof cb == lang.FUNCTION && cb(v, i, k, obj) })) } + return list }, - ItemSort: function(obj, key, cb) { var list = [] - var order = [], keys = {}, vals = {}, i = 0 - for (var k in obj) { o = obj[k][key]||i++ - order.push(o), keys[o] = k, vals[o] = obj[k] - } order.sort() - for (var i in order) { var k = order[i] - var res = typeof cb == lang.FUNCTION? cb(keys[k], vals[k]): k - res != undefined && list.push(res) - } return list + ItemSort: function(obj, key, cb) { var list = [], order = [], keys = {}, vals = {}, i = 0 + for (var k in obj) { o = obj[k][key]||i++, order.push(o), keys[o] = k, vals[o] = obj[k] } order.sort() + for (var i in order) { var k = order[i], res = typeof cb == lang.FUNCTION? cb(keys[k], vals[k]): k; res != undefined && list.push(res) } + return list }, ItemCB: function(meta, cb, can, item) { var list = [] for (var k in meta) { if (k.indexOf("on") == 0 && typeof meta[k] == lang.FUNCTION) { (function(k) { list.push(k) diff --git a/lib/misc.js b/lib/misc.js index a87fcbd8..b867df28 100644 --- a/lib/misc.js +++ b/lib/misc.js @@ -4,15 +4,14 @@ Volcanos("misc", {Message: function(event, can) { var msg = {} if (msg.Option(ice.MSG_HANDLE) == ice.TRUE) { return } if (cmds && cmds[0] == ctx.ACTION && can.base.isFunc(meta[cmds[1]])) { msg.Option(ice.MSG_HANDLE, ice.TRUE) return can.core.CallFunc(meta[cmds[1]], {event: event._event||event, can: sub, msg: msg, button: cmds[1], cmd: cmds[1]}), true - } - return false + } return false }, Display: function(file) { msg.Option(ice.MSG_DISPLAY, file) }, DisplayStory: function(file) { msg.Option(ice.MSG_DISPLAY, "/plugin/story/"+file) }, OptionStatus: function() { return msg.Option(ice.MSG_STATUS) }, OptionProcess: function() { return msg.Option(ice.MSG_PROCESS) }, SearchOrOption: function(key) { return can.misc.Search(can, key)||msg.Option(key) }, - StatusTimeCount: function(obj) { msg.append && msg.Status(can.base.Copy({"time": can.base.Time(), "count": msg.Length()+"x"+msg.append.length}, obj)) }, + StatusTimeCount: function(obj) { msg.append && msg.Status(can.base.Copy(kit.Dict(mdb.TIME, can.base.Time(), mdb.COUNT, msg.Length()+"x"+msg.append.length), obj)) }, Status: function(obj) { msg.Option(ice.MSG_STATUS, JSON.stringify(can.core.Item(obj, function(key, value) { return {name: key, value: value} }))) }, Option: function(key, val) { @@ -29,9 +28,8 @@ Volcanos("misc", {Message: function(event, can) { var msg = {} }, Result: function() { if (msg.result && msg.result[0] == ice.ErrWarn) { var res = msg.result[0] - for (var i = 1; i < msg.result.length; i+=2) { - res += msg.result[i]+(msg.result[i+1]||"")+ice.SP - } return res + for (var i = 1; i < msg.result.length; i+=2) { res += msg.result[i]+(msg.result[i+1]||"")+ice.SP } + return res } return msg.result && msg.result.join("") || "" }, TableDetail: function() { var item = {hash: can.Option(mdb.HASH)} @@ -133,7 +131,7 @@ Volcanos("misc", {Message: function(event, can) { var msg = {} }, WSS: function(can, args, cb, onopen, onclose, onerror) { if (can.user.isIE) { return } var url = location.protocol.replace(ice.HTTP, "ws")+"//"+location.host+"/space/" - if (url.indexOf("chrome") == 0) { url = "ws://localhost:9020/space/" } + if (url.indexOf(html.CHROME) == 0) { url = "ws://localhost:9020/space/" } var socket = new WebSocket(can.base.MergeURL(url, args)) socket.onclose = function() { can.misc.Log(html.WSS, cli.CLOSE, args) @@ -162,9 +160,7 @@ Volcanos("misc", {Message: function(event, can) { var msg = {} } }, - MergeCache: function(can, hash) { - return can.misc.MergeURL(can, {_path: can.base.Path(web.SHARE_CACHE, hash)}, true) - }, + MergeCache: function(can, hash) { return can.misc.MergeURL(can, {_path: can.base.Path(web.SHARE_CACHE, hash)}, true) }, MergePodCmd: function(can, objs) { objs.pod = can.core.Keys(can.misc.Search(can, ice.POD), objs.pod) objs.topic = can.misc.Search(can, chat.TOPIC) @@ -239,22 +235,18 @@ Volcanos("misc", {Message: function(event, can) { var msg = {} item._name && args.push(item._name) } else if (item.Option) { filter += item.Option(log.DEBUG)||"" - } else if (arguments[i].indexOf && arguments[i].indexOf(filter||"trace") > -1) { + } else if (arguments[i].indexOf && arguments[i].indexOf(filter||log.TRACE) > -1) { output = true } args.push(arguments[i]) } if (output) { return console.debug.apply(console, args), true } }, - FileLine: function(depth, length) { length = length||9 - var file = this.fileLine(depth+1, length); return file.file+ice.DF+file.line - }, + FileLine: function(depth, length) { var file = this.fileLine(depth+1, length||9); return file.file+ice.DF+file.line }, fileLine: function(depth, length) { var list = this._stack() function split(i) { if (!list[i]) { return {} } var ls = list[i].trim().split(ice.SP).slice(-2), link = ls.slice(-1)[0]; link.indexOf("(") == 0 && (link = link.slice(1, -1)), link.indexOf("@") > -1 && (ls = link.split("@"), link = ls[1]) var path = link, file = "", line = "", cols = ""; path = link.indexOf(ice.HTTP) == 0 && (path = link.split(ice.PS).slice(3).join(ice.PS)) for (var i = path.length; i > 0; i--) { if (path[i] != ice.DF) { continue } - if (cols == "") { - cols = path.slice(i+1), path = path.slice(0, i) - } else if (line == "") { + if (cols == "") { cols = path.slice(i+1), path = path.slice(0, i) } else if (line == "") { line = path.slice(i+1), path = path.slice(0, i) file = path.split(ice.PS).slice(-length).join(ice.PS), path = path.slice(0, -file.length) break @@ -262,9 +254,7 @@ Volcanos("misc", {Message: function(event, can) { var msg = {} } return {name: ls[0], link: link, path: path, file: file, line: line, cols: cols} } if (depth < 0) { var current = split(-depth) - for (var i = -depth+1; i < list.length; i++) { var pos = split(i) - if (pos.file != current.file) { return pos } - } + for (var i = -depth+1; i < list.length; i++) { var pos = split(i); if (pos.file != current.file) { return pos } } } return split(depth)||{} }, _stack: function() { return ((new Error()).stack||"").split(ice.NL).slice(2) }, diff --git a/lib/page.js b/lib/page.js index 65502ddc..fd048293 100644 --- a/lib/page.js +++ b/lib/page.js @@ -108,7 +108,7 @@ Volcanos("page", {ClassList: { RangeTable: function(can, table, index, sort_asc) { index = can.core.List(index, function(item) { if (item > -1) { return item } }); if (index.length == 0) { return } var list = can.page.Select(can, table, html.TR, function(tr) { - return tr.style.display == html.NONE||can.page.ClassList.has(can, tr, "hide")? null: tr + return tr.style.display == html.NONE||can.page.ClassList.has(can, tr, html.HIDE)? null: tr }).slice(1) var is_time = true, is_number = true; can.core.List(list, function(tr) { var text = tr.childNodes[index[0]].innerText; is_time = is_time && Date.parse(text) > 0, is_number = is_number && !isNaN(parseInt(text)) @@ -140,8 +140,8 @@ Volcanos("page", {ClassList: { var _list = []; for (var i = 0; i < list.length; i++) { switch (list[i]) { case "": _list.push(""); break case ice.AUTO: - _list.push({type: html.BUTTON, name: "list"}) - _list.push({type: html.BUTTON, name: "back"}) + _list.push({type: html.BUTTON, name: ice.LIST}) + _list.push({type: html.BUTTON, name: ice.BACK}) break case mdb.PAGE: _list.push({type: html.TEXT, name: mdb.LIMIT, value: can._msg.Option(mdb.LIMIT)}) diff --git a/lib/user.js b/lib/user.js index 79e3dd02..b911ce34 100644 --- a/lib/user.js +++ b/lib/user.js @@ -1,8 +1,6 @@ Volcanos("user", {info: {}, agent: { chooseImage: function(can, cb) { can.base.isFunc(cb) && cb([]) }, - scanQRCode: function(can, cb) { - can.user.input(event, can, [{type: html.TEXTAREA, name: "text", text: ""}], function(list) { cb(can.base.ParseJSON(list[0])) }) - }, + scanQRCode: function(can, cb) { can.user.input(event, can, [{type: html.TEXTAREA, name: "text", text: ""}], function(list) { cb(can.base.ParseJSON(list[0])) }) }, getLocation: function(can, cb) { var call = arguments.callee; if (call._res) { return cb(call._res) } navigator.geolocation.getCurrentPosition(function(res) { cb(call._res = {latitude: parseInt(res.coords.latitude*100000), longitude: parseInt(res.coords.longitude*100000)}) @@ -38,9 +36,7 @@ Volcanos("user", {info: {}, agent: { open: function(url) { window.open(url) }, close: function(url) { window.close() }, - title: function(text) { if (window.webview) { return title(text) } - return text && (document.title = text), document.title - }, + title: function(text) { if (window.webview) { return title(text) } return text && (document.title = text), document.title }, topic: function(can, name) { can.base.isString(name) && (name = [name]) || name || [] can.user.isMobile && name.push("mobile") && can.user.isLandscape() && name.push("landscape") can.user.language(can) && name.push(can.user.language(can)) @@ -67,15 +63,12 @@ Volcanos("user", {info: {}, agent: { "clear": "清空", "refresh": "刷新", "submit": "提交", "cancel": "取消", - "Close": "关闭", - "Close others": "关闭其它", - "Close all": "关闭所有", + "Close": "关闭", "Close others": "关闭其它", "Close all": "关闭所有", }[text]||text }, time: function(can, time, fmt) { var now = can.base.Date(time) var list = can.user.language(can) == "en"? ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]: ["周日", "周一", "周二", "周三", "周四", "周五", "周六"] - if (fmt == "%W") { return list } - return can.base.Time(time, (fmt||"%y-%m-%d %H:%M:%S").replace("%w", list[now.getDay()])) + return fmt == "%W"? list: can.base.Time(time, (fmt||"%y-%m-%d %H:%M:%S").replace("%w", list[now.getDay()])) }, toastConfirm: function(can, content, title, action) { return can.user.toast(can, {content: content, title: title, action: action||[cli.CLOSE], duration: -1, width: -300}) }, @@ -91,16 +84,13 @@ Volcanos("user", {info: {}, agent: { can.user.copy(event, can, meta.title) }}, {view: "duration", title: "点击关闭", onclick: function() { action.close() }}, can.base.isObject(meta.content)? meta.content: {text: [meta.content||"", html.DIV, nfs.CONTENT]}, - html.ACTION, meta.progress != undefined && {view: "progress", style: {width: width}, list: [ + html.ACTION, can.base.isUndefined(meta.progress) && {view: "progress", style: {width: width}, list: [ {view: "current", style: {width: (meta.progress||0)/100*width}}, ]}, ] }]); can.onengine.signal(can, chat.ONTOAST, can.request({}, {time: can.misc._time(), title: meta.title, content: meta.content, fileline: can.misc.FileLine(-3)})) var action = can.onappend._action(can, meta.action && meta.action.list? meta.action.list: meta.action||[""], ui.action, { _engine: function(event, button) { can.core.CallFunc(meta.action[button]||meta.action, [event, button]) }, - open: function(event) { - if (meta.content.indexOf(ice.HTTP) == 0) { can.user.open(meta.content) } - if (meta.title.indexOf(ice.HTTP) == 0) { can.user.open(meta.title) } - }, + open: function(event) { meta.content.indexOf(ice.HTTP) == 0 && can.user.open(meta.content), meta.title.indexOf(ice.HTTP) == 0 && can.user.open(meta.title) }, close: function(event) { can.page.Remove(can, action._target), action.timer.stop = true }, timer: can.core.Timer({interval: 100, length: (parseInt(meta.duration||1000))/100}, function(event, interval, index) { if (index > 30) { ui.duration.innerHTML = parseInt(index/10)+ice.PT+(index%10)+"s..." } @@ -109,9 +99,8 @@ Volcanos("user", {info: {}, agent: { }, share: function(can, msg, cmd) { can.run(msg, cmd||[ctx.ACTION, chat.SHARE], function(msg) { - can.user.toast(can, {title: msg.Append(mdb.NAME), duration: -1, - content: msg.Append(mdb.TEXT), action: [cli.CLOSE, cli.OPEN], - }), can.user.copy(msg._event, can, msg.Append(mdb.NAME)) + can.user.toast(can, {title: msg.Append(mdb.NAME), duration: -1, content: msg.Append(mdb.TEXT), action: [cli.CLOSE, cli.OPEN]}) + can.user.copy(msg._event, can, msg.Append(mdb.NAME)) }) }, copy: function(event, can, text) { if (!text) { return } @@ -125,7 +114,7 @@ Volcanos("user", {info: {}, agent: { carte: function(event, can, meta, list, cb, parent) { meta = meta||can.ondetail||can.onaction||{}, list = can.base.getValid(list, meta.list, can.core.Item(meta))||[]; if (list.length == 0) { return } - cb = cb||function(event, button, meta) { var cb = meta[button]||meta["_engine"]; can.base.isFunc(cb) && cb(event, can, button) } + cb = cb||function(event, button, meta) { var cb = meta[button]||meta[chat._ENGINE]; can.base.isFunc(cb) && cb(event, can, button) } parent || can.page.Select(can, document.body, can.page.Keys("div.carte.float"), function(target) { can.page.Remove(can, target) }) var ui = can.page.Append(can, document.body, [{view: [[chat.CARTE, chat.FLOAT]], onmouseleave: function(event) { // can.page.Remove(can, ui._target) @@ -146,8 +135,7 @@ Volcanos("user", {info: {}, agent: { var carte = {_target: ui._target, _parent: parent, layout: can.onlayout.figure(event, can, ui._target)} return can.onkeymap.prevent(event), carte }, - carteRight: function(event, can, meta, list, cb, parent) { - var carte = can.user.carte(event, can, meta, list, cb, parent) + carteRight: function(event, can, meta, list, cb, parent) { var carte = can.user.carte(event, can, meta, list, cb, parent) return can.page.style(can, carte._target, can.onlayout.figure(event, can, carte._target, true)), carte }, @@ -159,8 +147,7 @@ Volcanos("user", {info: {}, agent: { item.type = item.type||(item.values? html.SELECT: item.name == html.TEXT? html.TEXTAREA: html.TEXT), need[item.name] = item.need item._init = function(target) { if (item.type == html.PASSWORD || item.type == html.USERNAME) { return } if (item.name && item.name != ctx.ACTION) { target.value = msg.Option(item.name)||can.Option(item.name)||target.value||"" } - item.run = item.run||function(event, cmds, cb) { - var _msg = can.request(event, {_handle: ice.TRUE, action: msg.Option(html.ACTION)}, msg, can.Option()) + item.run = item.run||function(event, cmds, cb) { var _msg = can.request(event, {_handle: ice.TRUE, action: msg.Option(html.ACTION)}, msg, can.Option()) can.page.Select(can, ui.table, html.OPTION_ARGS, function(item) { item.name && item.value && _msg.Option(item.name, item.value) }) can.run(event, cmds, cb, true) }, item._enter = function(event) { action.submit(event, can, html.SUBMIT) } @@ -192,13 +179,9 @@ Volcanos("user", {info: {}, agent: { var action = can.onappend._action(can, [{type: html.UPLOAD, onchange: function(event) { action.show(event, 0, event.target.files[0].size, 0) }}, cli.CLOSE], ui.action, { close: function(event) { can.page.Remove(can, ui._target) }, begin: function(event) { begin = new Date() - var upload = can.page.Select(can, ui.action, html.INPUT_FILE)[0] - if (upload.files.length == 0) { return upload.focus() } - var msg = can.request(event, can.Option(), {_handle: ice.TRUE}) - msg._upload = upload.files[0], msg._progress = action.show - can.runAction(event, html.UPLOAD, [], cb||function(msg) { - can.user.toastSuccess(can), can.Update(), action.close() - }) + var upload = can.page.Select(can, ui.action, html.INPUT_FILE)[0]; if (upload.files.length == 0) { return upload.focus() } + var msg = can.request(event, can.Option(), {_handle: ice.TRUE}); msg._upload = upload.files[0], msg._progress = action.show + can.runAction(event, html.UPLOAD, [], cb||function(msg) { can.user.toastSuccess(can), can.Update(), action.close() }) }, show: function (event, value, total, loaded) { ui.cost.innerHTML = can.base.Duration(new Date() - begin) @@ -240,26 +223,20 @@ Volcanos("user", {info: {}, agent: { login: function(can, cb, method, auto) { method = can.base.Obj(method, ["登录", "扫码"]) var meta = { - "登录": function(event, button, data) { - can.run({}, [aaa.LOGIN, data[html.USERNAME], data[html.PASSWORD]], function(msg) { - if (!msg.Option(ice.MSG_USERNAME)) { return can.user.toast(can, "用户名或密码错误") } - can.page.Remove(can, ui._target), can.base.isFunc(cb) && cb() - }); return true - }, - "扫码": function() { - can.misc.WSS(can, {type: html.CHROME, cmd: "pwd"}, function(event, msg, cmd, arg) { if (!msg) { return } - if (cmd == "pwd") { return can.user.toast(can, arg[2], arg[1], -1), msg.Reply() } - if (cmd == ice.MSG_SESSID) { return can.misc.CookieSessid(can, arg[0]), msg.Reply(), can.user.reload(true) } - can.search(event, msg[ice.MSG_DETAIL]||[], function(msg) { msg.Reply() }) - }) - }, - "授权": function() { - can.misc.WSS(can, {type: html.CHROME, cmd: "sso", "back": location.href}, function(event, msg, cmd, arg) { if (!msg) { return } - if (cmd == "pwd") { return location.href = arg[1] } - if (cmd == ice.MSG_SESSID) { return can.misc.CookieSessid(can, arg[0]), msg.Reply(), can.user.reload(true) } - can.search(event, msg[ice.MSG_DETAIL]||[], function(msg) { msg.Reply() }) - }) - }, + "登录": function(event, button, data) { can.run({}, [aaa.LOGIN, data[html.USERNAME], data[html.PASSWORD]], function(msg) { + if (!msg.Option(ice.MSG_USERNAME)) { return can.user.toast(can, "用户名或密码错误") } + can.page.Remove(can, ui._target), can.base.isFunc(cb) && cb() + }); return true }, + "扫码": function() { can.misc.WSS(can, {type: html.CHROME, cmd: "pwd"}, function(event, msg, cmd, arg) { if (!msg) { return } + if (cmd == "pwd") { return can.user.toast(can, arg[2], arg[1], -1), msg.Reply() } + if (cmd == ice.MSG_SESSID) { return can.misc.CookieSessid(can, arg[0]), msg.Reply(), can.user.reload(true) } + can.search(event, msg[ice.MSG_DETAIL]||[], function(msg) { msg.Reply() }) + }) }, + "授权": function() { can.misc.WSS(can, {type: html.CHROME, cmd: chat.SSO, "back": location.href}, function(event, msg, cmd, arg) { if (!msg) { return } + if (cmd == "pwd") { return location.href = arg[1] } + if (cmd == ice.MSG_SESSID) { return can.misc.CookieSessid(can, arg[0]), msg.Reply(), can.user.reload(true) } + can.search(event, msg[ice.MSG_DETAIL]||[], function(msg) { msg.Reply() }) + }) }, }; if (auto) { return meta["授权"]() } else if (method.length == 1) { meta[method[0]](); return } var ui = can.user.input({}, can, [{type: html.USERNAME}, {type: html.PASSWORD}], function(event, button, data) { return meta[button](event, button, data) }, method) diff --git a/plugin/local/wiki/draw.js b/plugin/local/wiki/draw.js index 1da55a66..e100d493 100644 --- a/plugin/local/wiki/draw.js +++ b/plugin/local/wiki/draw.js @@ -5,8 +5,8 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar can.onmotion.delay(can, function() { can.core.Item(kit.Dict( - html.STROKE_WIDTH, 2, html.STROKE, cli.YELLOW, html.FILL, cli.PURPLE, - html.FONT_SIZE, 24, html.FONT_FAMILY, html.MONOSPACE, + svg.STROKE_WIDTH, 2, svg.STROKE, cli.YELLOW, svg.FILL, cli.PURPLE, + svg.FONT_SIZE, 24, svg.FONT_FAMILY, svg.MONOSPACE, "go", ice.RUN, svg.SHAPE, svg.RECT, svg.GRID, 10, ), function(key, value) { can.svg.Value(key, can.Action(key, can.svg.Value(key)||value)) }) @@ -30,7 +30,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar }, _group: function(can, target) { var name = target.Groups() function show(event) { can.group = target - can.core.List([html.STROKE_WIDTH, html.STROKE, html.FILL, html.FONT_SIZE], function(key) { + can.core.List([svg.STROKE_WIDTH, svg.STROKE, svg.FILL, svg.FONT_SIZE], function(key) { can.Action(key, target.Value(key)||can.Action(key)) }) } @@ -230,31 +230,31 @@ Volcanos(chat.ONKEYMAP, {help: "键盘交互", sc: function(event, can) { can.Action(svg.SHAPE, svg.CIRCLE) }, se: function(event, can) { can.Action(svg.SHAPE, svg.ELLIPSE) }, - cr: function(event, can) { can.onaction._change(can, html.STROKE, cli.RED) }, - cb: function(event, can) { can.onaction._change(can, html.STROKE, cli.BLUE) }, - cg: function(event, can) { can.onaction._change(can, html.STROKE, cli.GREEN) }, - cy: function(event, can) { can.onaction._change(can, html.STROKE, cli.YELLOW) }, - cp: function(event, can) { can.onaction._change(can, html.STROKE, cli.PURPLE) }, - cc: function(event, can) { can.onaction._change(can, html.STROKE, cli.CYAN) }, - ch: function(event, can) { can.onaction._change(can, html.STROKE, cli.BLACK) }, - cw: function(event, can) { can.onaction._change(can, html.STROKE, cli.WHITE) }, + cr: function(event, can) { can.onaction._change(can, svg.STROKE, cli.RED) }, + cb: function(event, can) { can.onaction._change(can, svg.STROKE, cli.BLUE) }, + cg: function(event, can) { can.onaction._change(can, svg.STROKE, cli.GREEN) }, + cy: function(event, can) { can.onaction._change(can, svg.STROKE, cli.YELLOW) }, + cp: function(event, can) { can.onaction._change(can, svg.STROKE, cli.PURPLE) }, + cc: function(event, can) { can.onaction._change(can, svg.STROKE, cli.CYAN) }, + ch: function(event, can) { can.onaction._change(can, svg.STROKE, cli.BLACK) }, + cw: function(event, can) { can.onaction._change(can, svg.STROKE, cli.WHITE) }, - fr: function(event, can) { can.onaction._change(can, html.FILL, cli.RED) }, - fb: function(event, can) { can.onaction._change(can, html.FILL, cli.BLUE) }, - fg: function(event, can) { can.onaction._change(can, html.FILL, cli.GREEN) }, - fy: function(event, can) { can.onaction._change(can, html.FILL, cli.YELLOW) }, - fp: function(event, can) { can.onaction._change(can, html.FILL, cli.PURPLE) }, - fc: function(event, can) { can.onaction._change(can, html.FILL, cli.CYAN) }, - fh: function(event, can) { can.onaction._change(can, html.FILL, cli.BLACK) }, - fw: function(event, can) { can.onaction._change(can, html.FILL, cli.WHITE) }, + fr: function(event, can) { can.onaction._change(can, svg.FILL, cli.RED) }, + fb: function(event, can) { can.onaction._change(can, svg.FILL, cli.BLUE) }, + fg: function(event, can) { can.onaction._change(can, svg.FILL, cli.GREEN) }, + fy: function(event, can) { can.onaction._change(can, svg.FILL, cli.YELLOW) }, + fp: function(event, can) { can.onaction._change(can, svg.FILL, cli.PURPLE) }, + fc: function(event, can) { can.onaction._change(can, svg.FILL, cli.CYAN) }, + fh: function(event, can) { can.onaction._change(can, svg.FILL, cli.BLACK) }, + fw: function(event, can) { can.onaction._change(can, svg.FILL, cli.WHITE) }, }, }, _engine: {}, }) Volcanos(chat.ONACTION, {help: "组件菜单", list: [ - [html.STROKE_WIDTH, 1, 2, 3, 4, 5], - [html.STROKE, cli.RED, cli.YELLOW, cli.GREEN, cli.CYAN, cli.BLUE, cli.PURPLE, cli.BLACK, cli.WHITE], - [html.FILL, cli.RED, cli.YELLOW, cli.GREEN, cli.CYAN, cli.BLUE, cli.PURPLE, cli.BLACK, cli.WHITE, "#0000"], - [html.FONT_SIZE, 12, 16, 18, 24, 32], + [svg.STROKE_WIDTH, 1, 2, 3, 4, 5], + [svg.STROKE, cli.RED, cli.YELLOW, cli.GREEN, cli.CYAN, cli.BLUE, cli.PURPLE, cli.BLACK, cli.WHITE], + [svg.FILL, cli.RED, cli.YELLOW, cli.GREEN, cli.CYAN, cli.BLUE, cli.PURPLE, cli.BLACK, cli.WHITE, "#0000"], + [svg.FONT_SIZE, 12, 16, 18, 24, 32], ["go", ice.RUN, ice.AUTO, "manual"], ["mode", "draw", "resize"], @@ -283,7 +283,7 @@ Volcanos(chat.ONACTION, {help: "组件菜单", list: [ create: function(event, can) { can.user.input(event, can, [svg.GROUP], function(list) { var name = list[0] var group = can.onimport.group(can, name) - can.core.List([html.STROKE_WIDTH, html.STROKE, html.FILL, html.FONT_SIZE], function(name) { + can.core.List([svg.STROKE_WIDTH, svg.STROKE, svg.FILL, svg.FONT_SIZE], function(name) { group.Value(name, can.Action(name)) }) }) @@ -461,7 +461,7 @@ Volcanos(chat.ONEXPORT, {help: "导出数据", list: [svg.GROUP, "figure", "inde }, content: function(can, svg) { return ['"]).join("") }, diff --git a/plugin/story/pie.js b/plugin/story/pie.js index 8c4f8643..96d99f84 100644 --- a/plugin/story/pie.js +++ b/plugin/story/pie.js @@ -19,7 +19,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar _draw: function(can, msg, field, color, x, y, r, margin, which) { field = field||mdb.VALUE function pos(x, y, r, angle) { angle -= 90; return [x + r * Math.cos(angle * Math.PI / 180), y + r * Math.sin(angle * Math.PI / 180)] } function pie(x, y, r, begin, span, color, cb) { can.onimport.draw({}, can, {shape: svg.PATH, style: kit.Dict( - html.STROKE_WIDTH, 1, html.STROKE, color, html.FILL, color, "d", can.base.joins([ + svg.STROKE_WIDTH, 1, svg.STROKE, color, svg.FILL, color, "d", can.base.joins([ ["M", x, y], ["L"].concat(pos(x, y, r, begin)), ["A", r, r, "0", span>180? "1": "0", "1"].concat(pos(x, y, r, begin+span)), ["Z"] ], ice.SP, ice.FS), ), onmouseenter: function(event) { can.base.isFunc(cb) && cb(event) } }) } diff --git a/plugin/story/spide.js b/plugin/story/spide.js index 0cae80c1..8cdcdafc 100644 --- a/plugin/story/spide.js +++ b/plugin/story/spide.js @@ -55,7 +55,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar }, layout: function(can) { can.margin = can.margin||20 can.onmotion.clear(can), can.onimport._show(can, can.request()) - can.svg.Val(html.FONT_SIZE, can.Action("size")) + can.svg.Val(svg.FONT_SIZE, can.Action("size")) can.page.style(can, can._output, html.MAX_HEIGHT, "") can.onaction[can.Action(ice.VIEW)](event, can, can.Action(ice.VIEW)) }, @@ -84,11 +84,11 @@ Volcanos(chat.ONACTION, {help: "用户操作", list: [ _draw: function(can, tree, x, y, style) { var color = can.onimport._color(can, tree) if (!tree.name) { return } tree.view = can.onimport.draw({}, can, {shape: html.TEXT, point: [{x: x, y: y}], style: can.base.Copy(kit.Dict( - html.STROKE, color, html.FILL, color, html.TEXT_ANCHOR, "start", "inner", tree.name||tree.file, + svg.STROKE, color, svg.FILL, color, svg.TEXT_ANCHOR, "start", "inner", tree.name||tree.file, ), style), }), can.core.ItemCB(can.ondetail, tree.view, can, tree) }, _draw_vertical: function(can, tree, x, y) { tree.x = x, tree.y = y - can.onaction._draw(can, tree, x+tree.width/2, y, kit.Dict(html.TEXT_ANCHOR, "middle")) + can.onaction._draw(can, tree, x+tree.width/2, y, kit.Dict(svg.TEXT_ANCHOR, "middle")) tree.height = can.margin if (y+tree.height > can.height) { can.height = y+tree.height } @@ -103,7 +103,7 @@ Volcanos(chat.ONACTION, {help: "用户操作", list: [ }) }, _draw_horizontal: function(can, tree, x, y) { tree.x = x, tree.y = y - can.onaction._draw(can, tree, x, y+tree.height*can.margin/2, kit.Dict(html.TEXT_ANCHOR, "start")) + can.onaction._draw(can, tree, x, y+tree.height*can.margin/2, kit.Dict(svg.TEXT_ANCHOR, "start")) tree.width = tree.view&&tree.view.Val("textLength")||(tree.name||"").length*10 if (x+tree.width > can.width) { can.width = x+tree.width } diff --git a/plugin/story/trend.js b/plugin/story/trend.js index 438d14bb..827c9e6e 100644 --- a/plugin/story/trend.js +++ b/plugin/story/trend.js @@ -57,8 +57,8 @@ Volcanos(chat.ONACTION, {help: "组件菜单", list: [ [html.SPEED, 10, 20, 50, 100], ], "折线图": function(event, can) { var args = can.onimport._layout(can) - var black = can.onimport.group(can, cli.BLACK, kit.Dict(html.STROKE, cli.BLACK, html.FILL, cli.BLACK)) - var white = can.onimport.group(can, cli.WHITE, kit.Dict(html.STROKE, cli.WHITE, html.FILL, cli.WHITE)) + var black = can.onimport.group(can, cli.BLACK, kit.Dict(svg.STROKE, cli.BLACK, svg.FILL, cli.BLACK)) + var white = can.onimport.group(can, cli.WHITE, kit.Dict(svg.STROKE, cli.WHITE, svg.FILL, cli.WHITE)) can.onimport.transform(can, black), can.onimport.transform(can, white) can.core.List(can.list, function(list) { var max = list[0], min = list[0], step = (can.ConfWidth()-2*args.space)/(list.length-1) @@ -74,8 +74,8 @@ Volcanos(chat.ONACTION, {help: "组件菜单", list: [ function scale(y) { return (y - can.min)/(can.max - can.min)*(args.height-2*args.space) } function order(index, x, y) { return {x: args.space+args.step*index+x, y: args.height-args.space-scale(y)} } - var black = can.onimport.group(can, cli.BLACK, kit.Dict(html.STROKE, cli.BLACK, html.FILL, cli.BLACK)) - var white = can.onimport.group(can, cli.WHITE, kit.Dict(html.STROKE, cli.WHITE, html.FILL, cli.WHITE)) + var black = can.onimport.group(can, cli.BLACK, kit.Dict(svg.STROKE, cli.BLACK, svg.FILL, cli.BLACK)) + var white = can.onimport.group(can, cli.WHITE, kit.Dict(svg.STROKE, cli.WHITE, svg.FILL, cli.WHITE)) can.core.Next(can.list, function(line, next, index) { can.Status(line) can.onimport.draw({}, can, {shape: svg.LINE, point: [ @@ -110,7 +110,7 @@ Volcanos(chat.ONACTION, {help: "组件菜单", list: [ can.onimport.draw({}, can, {shape: svg.RECT, point: [ {x: args.space+args.step*index+width*which+2, y: args.height-args.space-scale(key, parseInt(line[key]))}, {x: args.space+args.step*index+width*(which+1)+2, y: args.height-args.space}, - ], style: kit.Dict(html.STROKE_WIDTH, 1, html.STROKE, cli.WHITE, html.FILL, cli.WHITE, svg.RX, 0, svg.RY, 0), _init: function(view) { + ], style: kit.Dict(svg.STROKE_WIDTH, 1, svg.STROKE, cli.WHITE, svg.FILL, cli.WHITE, svg.RX, 0, svg.RY, 0), _init: function(view) { can.core.ItemCB(can.ondetail, function(key, cb) { view[key] = function(event) { cb(event, can, line) } }) }}), can.core.Timer(parseInt(can.Action(html.SPEED)), next) }), which++ diff --git a/proto.js b/proto.js index 6236c84f..2fd9d529 100644 --- a/proto.js +++ b/proto.js @@ -105,6 +105,7 @@ var nfs = { DIR: "dir", CAT: "cat", DEFS: "defs", TRASH: "trash", SCRIPT: "script", CONTENT: "content", DIR_ROOT: "dir_root", PWD: "./", HTML: "html", CSS: "css", JS: "js", GO: "go", SH: "sh", CSV: "csv", JSON: "json", ZML: "zml", IML: "iml", TXT: "txt", PNG: "png", + _CSS: ".css", _JS: ".js", } var tcp = { HOST: "host", PORT: "port", @@ -191,77 +192,43 @@ var mall = { var svg = { GROUP: "group", PID: "pid", GRID: "grid", SHAPE: "shape", TEXT: "text", RECT: "rect", LINE: "line", CIRCLE: "circle", ELLIPSE: "ellipse", + STROKE_WIDTH: "stroke-width", STROKE: "stroke", FILL: "fill", FONT_SIZE: "font-size", FONT_FAMILY: "font-family", MONOSPACE: "monospace", TEXT_ANCHOR: "text-anchor", G: "g", X: "x", Y: "y", R: "r", RX: "rx", RY: "ry", CX: "cx", CY: "cy", X1: "x1", Y1: "y1", X2: "x2", Y2: "y2", PATH: "path", PATH2V: "path2v", PATH2H: "path2h", M: "M", Q: "Q", T: "T", } -var html = { - // FIELDSET +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", 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]", - // HTML - UPLOAD: "upload", USERNAME: "username", PASSWORD: "password", INPUT: "input", TEXT: "text", TEXTAREA: "textarea", SELECT: "select", BUTTON: "button", - FORM: "form", FILE: "file", SPACE: "space", CLICK: "click", SUBMIT: "submit", CANCEL: "cancel", - DIV: "div", IMG: "img", CODE: "code", SPAN: "span", VIDEO: "video", + FORM: "form", FILE: "file", CLICK: "click", SUBMIT: "submit", CANCEL: "cancel", UPLOAD: "upload", USERNAME: "username", PASSWORD: "password", TABLE: "table", THEAD: "thead", TBODY: "tbody", TR: "tr", TH: "th", TD: "td", BR: "br", UL: "ul", LI: "li", - A: "a", LABEL: "label", INNER: "inner", TITLE: "title", - H1: "h1", H2: "h2", H3: "h3", + H1: "h1", H2: "h2", H3: "h3", A: "a", LABEL: "label", INNER: "inner", TITLE: "title", + SPAN: "span", CODE: "code", DIV: "div", IMG: "img", VIDEO: "video", SPACE: "space", WSS: "wss", SVG: "svg", CANVAS: "canvas", IFRAME: "iframe", CHROME: "chrome", - // CSS - CLASS: "class", DISPLAY: "display", BLOCK: "block", NONE: "none", + CLASS: "class", DISPLAY: "display", BLOCK: "block", NONE: "none", HIDDEN: "hidden", TOGGLE: "toggle", HEIGHT: "height", WIDTH: "width", PADDING: "padding", MARGIN: "margin", LEFT: "left", TOP: "top", RIGHT: "right", BOTTOM: "bottom", MIN_HEIGHT: "min-height", MAX_HEIGHT: "max-height", MAX_WIDTH: "max-width", MIN_WIDTH: "min-width", MARGIN_TOP: "margin-top", MARGIN_X: "margin-x", MARGIN_Y: "margin-y", - STROKE_WIDTH: "stroke-width", STROKE: "stroke", FILL: "fill", FONT_SIZE: "font-size", FONT_FAMILY: "font-family", MONOSPACE: "monospace", TEXT_ANCHOR: "text-anchor", - SELECT: "select", HIDDEN: "hidden", TOGGLE: "toggle", - FLOAT: "float", CLEAR: "clear", BOTH: "both", - BACKGROUND: "background", - OVERFLOW: "overflow", - OPACITY: "opacity", - SCROLL: "scroll", - SPEED: "speed", - FIXED: "fixed", - PLUGIN_MARGIN: 10, ACTION_HEIGHT: 31, ACTION_MARGIN: 200, + BACKGROUND: "background", OPACITY: "opacity", OVERFLOW: "overflow", SCROLL: "scroll", SPEED: "speed", FLOAT: "float", CLEAR: "clear", BOTH: "both", - PAGE: "page", TABS: "tabs", - MENU: "menu", NODE: "node", - ZONE: "zone", NAME: "name", - LIST: "list", ITEM: "item", - ICON: "icon", - - HIDE: "hide", SHOW: "show", AUTO: "auto", - HEAD: "head", LEFT: "left", MAIN: "main", FOOT: "foot", + 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", 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_CODE: "div.code", - DIV_TOGGLE: "div.toggle", - DIV_LAYOUT_HEAD: "div.layout.head", - DIV_LAYOUT_LEFT: "div.layout.left", - DIV_LAYOUT_FOOT: "div.layout.foot", - TABLE_CONTENT: "table.content", - DIV_FLOAT: "div.float", - - ESCAPE: "Escape", ENTER: "Enter", TAB: "Tab", - _CSS: ".css", _JS: ".js", + 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", } var lang = { - UNDEFINED: "undefined", - STRING: "string", NUMBER: "number", - OBJECT: "object", FUNCTION: "function", - ESCAPE: "Escape", ENTER: "Enter", TAB: "Tab", - CONTROL: "Control", SHIFT: "Shift", - PS: "/", + 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: "/", } function shy(help, meta, list, cb) { var args = arguments, i = 0 @@ -269,21 +236,14 @@ function shy(help, meta, list, cb) { var args = arguments, i = 0 return cb = typeof args[args.length-1] == lang.FUNCTION? args[args.length-1]: function() {}, cb.help = next(lang.STRING)||"", cb.meta = next(lang.OBJECT)||{}, cb.list = next(lang.OBJECT)||[], cb }; var _can_name = "", _can_path = "" 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", help: "标题栏", pos: html.HIDE, state: [aaa.USERNICK]}, - {name: "Action", help: "工作台", pos: html.MAIN, tool: name}, - {name: "Search", help: "搜索框", pos: html.AUTO}, - ]}) } + 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 = "" 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+html._CSS, "/panel/"+p.name+html._JS])) }) - libs = libs.concat(Config.plugin||chat.plugin_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) } can = {_follow: name, _target: Config.target||meta.target, _height: Config.height||meta._height, _width: Config.width||meta._width} } - var proto = {_path: _can_path, _name: name, _load: function(name, cbs) { var cache = meta.cache[name]||[] for (list.reverse(); list.length > 0; list) { var sub = list.pop(); sub != can && cache.push(sub) } meta.cache[name] = cache cache.forEach(function(sub) { var name = sub._name; if (typeof cbs == lang.FUNCTION && cbs(can, name, sub)) { return } @@ -292,14 +252,14 @@ var Volcanos = shy("火山架", {iceberg: "/chat/", volcano: "/frame.js", cache: }, requireModules: function(libs, cb, cbs) { for (var i = 0; i < libs.length; i++) { if (libs[i].indexOf(ice.HTTP) == 0 || libs[i].indexOf(ice.PS) == 0) { continue } - if (libs[i].indexOf(html._CSS) == -1 && libs[i].indexOf(html._JS) == -1) { libs[i] = libs[i]+"/lib/"+libs[i]+html._JS } + if (libs[i].indexOf(nfs._CSS) == -1 && libs[i].indexOf(nfs._JS) == -1) { libs[i] = libs[i]+"/lib/"+libs[i]+nfs._JS } libs[i] = "/require/node_modules/"+libs[i] } can.require(libs, cb, cbs) }, require: function(libs, cb, cbs) { if (!libs || libs.length == 0) { return typeof cb == lang.FUNCTION && setTimeout(function() { cb(can) }, 10) } if (libs[0] == undefined) { return can.require(libs.slice(1), cb, cbs) } - if (libs[0] == "") { libs[0] = can._name.replace(html._JS, html._CSS) } + if (libs[0] == "") { libs[0] = can._name.replace(nfs._JS, nfs._CSS) } if (libs[0][0] != ice.PS && libs[0].indexOf(ice.HTTP) != 0) { libs[0] = can._name.slice(0, can._name.lastIndexOf(ice.PS)+1)+libs[0] } var name = (libs[0].indexOf(ice.HTTP) == 0? libs[0]: libs[0].split("?")[0]).toLowerCase() function next() { can._load(name, cbs), can.require(libs.slice(1), cb, cbs) } @@ -331,7 +291,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, "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) }, @@ -354,20 +314,17 @@ var Volcanos = shy("火山架", {iceberg: "/chat/", volcano: "/frame.js", cache: for (var i = 0; i < arguments.length; i += 2) { if (typeof key == lang.OBJECT) { res = can.core.Value(can._conf, arguments[i]), i--; continue } res = can.core.Value(can._conf, arguments[i], arguments[i+1]) - } return res == undefined && key.indexOf(ctx.FEATURE+ice.PT) == -1? can.Conf(can.core.Keys(ctx.FEATURE, key)): res + } return can.base.isUndefined(res) && key.indexOf(ctx.FEATURE+ice.PT) == -1? can.Conf(can.core.Keys(ctx.FEATURE, key)): res }, _conf: {}, - }; can = can||{}, kit.proto(can, proto), kit.proto(proto, meta) + }; can = can||{}, kit.proto(can, proto), kit.proto(proto, meta), _can_path = _can_name||_can_path if (_can_name) { meta.cache[_can_name] = meta.cache[_can_name]||[], meta.cache[_can_name].push(can) } else { list.push(can) } - - _can_path = _can_name||_can_path if (libs && libs.length > 0) { for (var i = 0; i < libs.length; i++) { if (libs[i] == undefined) { continue } - if (libs[i] == "") { libs[i] = _can_path.replace(html._JS, html._CSS) } + if (libs[i] == "") { libs[i] = _can_path.replace(nfs._JS, nfs._CSS) } if (libs[i][0] != ice.PS && libs[i].indexOf(ice.HTTP) != 0) { libs[i] = _can_path.slice(0, _can_path.lastIndexOf(ice.PS)+1)+libs[i] } } } if (can._follow) { libs = libs.concat(meta.libs, meta.volcano) } return can.require(libs, cb), can }) - try { if (typeof(window) == lang.OBJECT) { // chrome Volcanos.meta.target = document.body, Volcanos.meta._height = window.innerHeight, Volcanos.meta._width = window.innerWidth Volcanos.meta._load = function(url, cb) { switch (url.split("?")[0].split(ice.PT).pop().toLowerCase()) {