1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-25 16:58:06 +08:00

opt frame.js

This commit is contained in:
harveyshao 2022-10-27 13:19:34 +08:00
parent 10bda20cd3
commit 291243c067
11 changed files with 258 additions and 477 deletions

352
frame.js
View File

@ -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) {

View File

@ -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 }

View File

@ -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)

View File

@ -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) },

View File

@ -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)})

View File

@ -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)

View File

@ -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 ['<svg vertion="1.1" xmlns="https://www.w3.org/2000/svg" text-anchor="middle" dominant-baseline="middle"'].concat(
svg? can.core.List([html.HEIGHT, html.WIDTH, mdb.COUNT, svg.PID, svg.GRID, html.STROKE_WIDTH, html.STROKE, html.FILL, html.FONT_SIZE], function(item) {
svg? can.core.List([html.HEIGHT, html.WIDTH, mdb.COUNT, svg.PID, svg.GRID, svg.STROKE_WIDTH, svg.STROKE, svg.FILL, svg.FONT_SIZE], function(item) {
return svg.Value(item)? ice.SP + item + '="' + svg.Value(item) + '"': ""
}): [" height="+((can.ConfHeight()||450)-50)+" width="+(can.ConfWidth()||600)]).concat(['>', svg? svg.innerHTML: "", "</svg>"]).join("")
},

View File

@ -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) } }) }

View File

@ -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 }

View File

@ -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++

View File

@ -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()) {