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

opt proto

This commit is contained in:
shaoying 2021-10-15 14:46:52 +08:00
parent 7597f8654a
commit a301b690ad
8 changed files with 100 additions and 118 deletions

View File

@ -1,34 +1,31 @@
var _can_name = "/frame.js" _can_name = "/frame.js"
Volcanos("onengine", {help: "搜索引擎", list: [], _init: function(can, meta, list, cb, target) { Volcanos("onengine", {help: "搜索引擎", list: [], _init: function(can, meta, list, cb, target) {
can.run = function(event, cmds, cb) { var msg = can.request(event); cmds = cmds || [] 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) return (can.onengine[cmds[0]]||can.onengine._remote)(event, can, msg, can, cmds, cb)
} }, can.river = can.Conf(chat.RIVER)||{}
can.core.Next(list, function(item, next) { item.type = "panel" can.core.Next(list, function(item, next) { item.type = "panel"
can.onappend._init(can, item, item.list, function(panel) { can.onappend._init(can, item, item.list, function(panel) {
panel.run = function(event, cmds, cb) { var msg = panel.request(event); cmds = cmds || [] 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) return (can.onengine[cmds[0]]||can.onengine._remote)(event, can, msg, panel, cmds, cb)
}, can[item.name] = panel }, can[item.name] = panel, panel._root = can, panel._trans = panel.onaction._trans
can.core.Item(panel.onaction, function(key, item) { if (key.indexOf("on") == 0) { can.core.Item(panel.onaction, function(key, item) { if (key.indexOf("on") == 0) {
can.onengine.listen(can, key, function(msg) { can.core.CallFunc(item, {can: panel, msg: msg}) }) can.onengine.listen(can, key, function(msg) { can.core.CallFunc(item, {can: panel, msg: msg}) })
} }), panel.const(panel.onaction._const||[]), panel._trans = panel.onaction._trans } }), panel.onaction._init(panel, item, item.list, next, panel._target)
panel.onaction._init(panel, item, item.list, next, panel._target)
can.onmotion.float.auto(can, panel._output, "carte", "input") can.onmotion.float.auto(can, panel._output, "carte", "input")
}, target) }, target)
}, function() { can.onlayout.topic(can) }, function() { can.misc.Log(can.user.title(), cli.RUN, can)
can.misc.Log(can.user.title(), cli.RUN, can)
can.base.Copy(can.onengine.river, can.Conf(chat.RIVER))
can.ondaemon._init(can), can.onmotion._init(can, target), can.onkeypop._init(can, target) can.ondaemon._init(can), can.onmotion._init(can, target), can.onkeypop._init(can, target)
can.onengine.signal(can, "onmain", can.request()) can.onlayout.topic(can), can.onengine.signal(can, "onmain", can.request())
can.base.isFunc(cb) && cb() can.base.isFunc(cb) && cb()
}) })
}, },
_search: function(event, can, msg, panel, cmds, cb) { _search: function(event, can, msg, panel, cmds, cb) {
var sub, mod = can, fun = can, key = ""; can.core.List(cmds[1].split("."), function(value) { var sub, mod = can, fun = can, key = ""; can.core.List(cmds[1].split("."), function(value) {
fun && (sub = mod, mod = fun, fun = mod[value], key = value) fun && (sub = mod, mod = fun, fun = mod[value], key = value)
}); if (!sub || !mod || !fun) { }); if (!sub || !mod || !fun) { can.misc.warn("not found", cmds)
// can.misc.narn("not found", cmds)
return can.base.isFunc(cb) && cb(msg.Echo("warn: ", "not found: ", cmds)) return can.base.isFunc(cb) && cb(msg.Echo("warn: ", "not found: ", cmds))
} }
@ -41,6 +38,7 @@ Volcanos("onengine", {help: "搜索引擎", list: [], _init: function(can, meta,
_engine: function(event, can, msg, panel, cmds, cb) { return false }, _engine: function(event, can, msg, panel, cmds, cb) { return false },
_remote: function(event, can, msg, panel, cmds, cb) { _remote: function(event, can, msg, panel, cmds, cb) {
if (panel.onengine._engine(event, can, msg, panel, cmds, cb)) { return } if (panel.onengine._engine(event, can, msg, panel, cmds, cb)) { return }
can.search({follow: panel._follow, msg, cmds}, ["Footer.onimport.ncmd"])
var key = panel._name+"."+cmds.join(",") var key = panel._name+"."+cmds.join(",")
if (can.user.isLocalFile) { var msg = can.request(event); msg.Clear("append") if (can.user.isLocalFile) { var msg = can.request(event); msg.Clear("append")
@ -48,11 +46,8 @@ Volcanos("onengine", {help: "搜索引擎", list: [], _init: function(can, meta,
return can.base.isFunc(cb) && cb(msg) return can.base.isFunc(cb) && cb(msg)
} }
can.search(can.request({}, { var names = msg.Option("_names")||panel._names||((can.Conf("iceberg")||"/chat/")+panel._name)
time: can.base.Time(null, "%H:%M:%S"), follow: panel._follow, msg: msg, commands: cmds, can.misc.Run(event, can, {names: names, daemon: can.core.Keys(can.ondaemon._list[0], msg._daemon)}, cmds, function(msg) {
})._event, ["Footer.onimport.ncmd"])
can.misc.Run(event, can, {names: msg.Option("_names")||panel._names||((can.Conf("iceberg")||"/chat/")+panel._name), daemon: can.ondaemon._list[0]+"."+msg._daemon}, cmds, function(msg) {
Volcanos.meta.pack[key] = msg, delete(msg._handle), delete(msg._toast) Volcanos.meta.pack[key] = msg, delete(msg._handle), delete(msg._toast)
if (msg.result && msg.result[0] == "warn: ") { can.user.toast(can, msg.Result(), "", 10000); return } if (msg.result && msg.result[0] == "warn: ") { can.user.toast(can, msg.Result(), "", 10000); return }
can.base.isFunc(cb) && cb(msg) can.base.isFunc(cb) && cb(msg)
@ -62,15 +57,12 @@ Volcanos("onengine", {help: "搜索引擎", list: [], _init: function(can, meta,
listen: shy("监听事件", {}, [], function(can, name, cb) { listen: shy("监听事件", {}, [], function(can, name, cb) {
arguments.callee.meta[name] = (arguments.callee.meta[name]||[]).concat(cb) arguments.callee.meta[name] = (arguments.callee.meta[name]||[]).concat(cb)
}), }),
signal: shy("触发事件", function(can, name, msg) { msg = msg || can.request() signal: shy("触发事件", function(can, name, msg) { msg = msg||can.request()
can.misc.Log("signal", name, msg) can.misc.Log("signal", name, msg)
can.core.List(can.onengine.listen.meta[name], function(cb) { can.core.List(can.onengine.listen.meta[name], function(cb) {
can.core.CallFunc(cb, {msg: msg}) can.core.CallFunc(cb, {msg: msg})
}) })
}), }),
river: {}, _merge: function(can, sub) {
for (var k in sub[chat.RIVER]) { can.onengine[chat.RIVER] = sub[chat.RIVER]; break }
},
}) })
Volcanos("ondaemon", {help: "推荐引擎", list: [], _init: function(can, name) { if (can.user.isLocalFile) { return } Volcanos("ondaemon", {help: "推荐引擎", list: [], _init: function(can, name) { if (can.user.isLocalFile) { return }
can.misc.WSS(can, {type: "chrome", name: can.user.Search(can, "daemon")||name||""}, function(event, msg, cmd, arg) { if (!msg) { return } can.misc.WSS(can, {type: "chrome", name: can.user.Search(can, "daemon")||name||""}, function(event, msg, cmd, arg) { if (!msg) { return }
@ -1082,4 +1074,4 @@ Volcanos("onkeypop", {help: "键盘交互", list: [], _focus: [], _init: functio
if (target._keys.length == 0) { event.stopPropagation(), event.preventDefault() } if (target._keys.length == 0) { event.stopPropagation(), event.preventDefault() }
}, },
}) })
var _can_name = "" _can_name = ""

View File

@ -142,9 +142,8 @@ Volcanos("base", {help: "数据类型",
return now return now
}, },
Time: function(time, fmt) { var now = this.Date(time) Time: function(time, fmt) { var now = this.Date(time)
var list = ["周日", "周一", "周二", "周三", "周四", "周五", "周六"]
var list = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"] var list = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
fmt = fmt || "%y-%m-%d %H:%M:%S" fmt = fmt||"%H:%M:%S"
fmt = fmt.replace("%y", now.getFullYear()) fmt = fmt.replace("%y", now.getFullYear())
fmt = fmt.replace("%m", this.Number(now.getMonth()+1, 2)) fmt = fmt.replace("%m", this.Number(now.getMonth()+1, 2))
fmt = fmt.replace("%d", this.Number(now.getDate(), 2)) fmt = fmt.replace("%d", this.Number(now.getDate(), 2))

View File

@ -78,7 +78,7 @@ Volcanos("core", {help: "数据结构",
begin > 0 && (s? push({type: "string", text: str.slice(begin), left: s, right: ""}): push(str.slice(begin))) begin > 0 && (s? push({type: "string", text: str.slice(begin), left: s, right: ""}): push(str.slice(begin)))
return res return res
}), }),
CallFunc: shy("调用器", function(func, args, mod) { args = args || {} CallFunc: shy("调用器", function(func, args, mod) { args = args||{}
var can = args["can"]||args[0], msg = args["msg"]||args[1], cmds = args["cmds"]||[] var can = args["can"]||args[0], msg = args["msg"]||args[1], cmds = args["cmds"]||[]
// 查找调用 // 查找调用
@ -89,7 +89,8 @@ Volcanos("core", {help: "数据结构",
// 解析参数 // 解析参数
var list = [], echo = false, cb = args["cb"] var list = [], echo = false, cb = args["cb"]
this.List(func.toString().split(")")[0].split("(")[1].split(","), function(item, index) { item = item.trim(); if (item == "") { return } this.List(func.toString().split(")")[0].split("(")[1].split(","), function(item, index) { item = item.trim(); if (item == "") { return }
var arg = args[item] || msg&&msg.Option&&msg.Option(item) || can&&can.Conf&&can.Conf(item) || cmds[index] || args[index] || null var arg = msg&&msg.Option&&msg.Option(item) || event&&!(event instanceof Event)&&event[item] ||
args[item] || can&&can.Conf&&can.Conf(item) || args[index] || cmds[index] || null
if (item == "cb") { echo = true } if (item == "cb") { echo = true }
list.push(arg) list.push(arg)
}) })

View File

@ -1,5 +1,4 @@
Volcanos({name: "chat", iceberg: "/chat/", volcano: "/frame.js", Volcanos({name: "chat", panels: [
libs: ["/lib/base.js", "/lib/core.js", "/lib/misc.js", "/lib/page.js", "/lib/user.js"], panels: [
{name: "Header", help: "标题栏", pos: "head", state: ["time", "username", "avatar"]}, {name: "Header", help: "标题栏", pos: "head", state: ["time", "username", "avatar"]},
{name: "Search", help: "搜索框", pos: "auto"}, {name: "Search", help: "搜索框", pos: "auto"},
{name: "River", help: "群聊组", pos: "left", action: ["create", "refresh"]}, {name: "River", help: "群聊组", pos: "left", action: ["create", "refresh"]},

View File

@ -1,16 +1,16 @@
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg) { Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg) {
var river = can.Conf(can._RIVER), storm = can.Conf(can._STORM) var river = can.Conf(chat.RIVER), storm = can.Conf(chat.STORM)
can.onmotion.clear(can), can.core.Next(msg.Table(), function(item, next) { can.onmotion.clear(can), can.core.Next(msg.Table(), function(item, next) {
item.width = parseInt(can.Conf(can._WIDTH))-40, item.height = parseInt(can.Conf(can._HEIGHT))-40 item.width = parseInt(can.Conf(chat.WIDTH))-40, item.height = parseInt(can.Conf(chat.HEIGHT))-40
item.feature = can.base.Obj(item.feature||item.meta) item.feature = can.base.Obj(item.feature||item.meta)
item.inputs = can.base.Obj(item.inputs||item.list) item.inputs = can.base.Obj(item.inputs||item.list)
item.type = can._PLUGIN item.type = mdb.PLUGIN
can.onappend.plugin(can, item, function(sub, meta) { can.onappend.plugin(can, item, function(sub, meta) {
can.onimport._plugin(can, river, storm, sub, meta), next() can.onimport._plugin(can, river, storm, sub, meta), next()
}) })
}, function() { }, function() {
can.onaction.layout(can, can.user.Search(can, can._LAYOUT)||can.Conf(can._LAYOUT)) can.onaction.layout(can, can.user.Search(can, chat.LAYOUT)||can.Conf(chat.LAYOUT))
!can.user.isMobile && can.onimport._menu(can, msg) !can.user.isMobile && can.onimport._menu(can, msg)
}) })
@ -40,7 +40,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg)
return return
} }
can._menu && can.page.Remove(can, can._menu) can._menu && can.page.Remove(can, can._menu)
can._menu = can.search({}, ["Header.onimport.menu", can._ACTION].concat( can._menu = can.search({}, ["Header.onimport.menu", ctx.ACTION].concat(
can.base.Obj(msg.Option("menus"), [ can.base.Obj(msg.Option("menus"), [
// ["布局", "默认布局", "流动布局", "网格布局", "标签布局", "自由布局"], // ["布局", "默认布局", "流动布局", "网格布局", "标签布局", "自由布局"],
["help", "tutor", "manual", "service", "devops", "refer"], ["help", "tutor", "manual", "service", "devops", "refer"],
@ -55,8 +55,8 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg)
}, },
_share: function(can, share) { _share: function(can, share) {
share && can.run({}, ["_share", share], function(msg) { share && can.run({}, ["_share", share], function(msg) {
can.user.topic(can, can.user.Search(can, can._TOPIC)||msg.Option(can._TOPIC)||"white") can.user.topic(can, can.user.Search(can, chat.TOPIC)||msg.Option(chat.TOPIC)||"white")
can.user.title(can.user.Search(can, can._TITLE)||msg.Option(can._TITLE)) can.user.title(can.user.Search(can, chat.TITLE)||msg.Option(chat.TITLE))
can.onaction.layout(can, "auto") can.onaction.layout(can, "auto")
if (msg["index"].length == 1) { can.user.mod.isCmd = true if (msg["index"].length == 1) { can.user.mod.isCmd = true
@ -69,18 +69,18 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg)
} else { } else {
can.Conf({width: window.innerWidth, height: window.innerHeight}) can.Conf({width: window.innerWidth, height: window.innerHeight})
} }
can.Conf(can._RIVER, "_share"), can.Conf(can._STORM, share) can.Conf(chat.RIVER, "_share"), can.Conf(chat.STORM, share)
can.onimport._init(can, msg) can.onimport._init(can, msg)
}) })
}, },
}) })
Volcanos("onengine", {help: "解析引擎", list: [], _engine: function(event, page, msg, can, cmds, cb) { Volcanos("onengine", {help: "解析引擎", list: [], _engine: function(event, page, msg, can, cmds, cb) {
var list = can.onengine._river||can.onengine.river var list = can._root.river
var river = list[cmds[0]] var river = list[cmds[0]]
var storm = river && river.storm[cmds[1]] var storm = river && river.storm[cmds[1]]
if (!storm || cmds.length != 2) { return false } if (!storm || cmds.length != 2) { return false }
if (storm.index) { cmds = [can._ACTION, ctx.COMMAND].concat(storm.index) if (storm.index) { cmds = [ctx.ACTION, ctx.COMMAND].concat(storm.index)
can.run(event, cmds, cb) can.run(event, cmds, cb)
} else { } else {
can.core.List(storm.action, function(value) { can.core.List(storm.action, function(value) {
@ -101,12 +101,6 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg,
} }
can.base.isFunc(cb) && cb() can.base.isFunc(cb) && cb()
}, },
_const: [
"output", "fields",
"action", "share", "river", "storm",
"title", "topic", "layout", "width", "height", "top", "left", "scroll",
"plugin",
],
onmain: function(can, msg) { onmain: function(can, msg) {
var cmds = location.pathname.split("/").slice(1) var cmds = location.pathname.split("/").slice(1)
if (cmds[0] == cli.CMD) { if (cmds[0] == cli.CMD) {
@ -119,16 +113,16 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg,
}, },
onresize: function(can, msg, width, height) { can.Conf({width: width, height: height}) }, onresize: function(can, msg, width, height) { can.Conf({width: width, height: height}) },
onsearch: function(can, msg, word) { onsearch: function(can, msg, word) {
if (word[0] == "*" || word[0] == can._PLUGIN) { can.onexport.plugin(can, msg, word) } if (word[0] == "*" || word[0] == mdb.PLUGIN) { can.onexport.plugin(can, msg, word) }
}, },
onstorm_select: function(can, msg, river, storm) { can.onlayout._init(can) onstorm_select: function(can, msg, river, storm) { can.onlayout._init(can)
function key(name) { return can.core.Keys(can.Conf(can._RIVER), can.Conf(can._STORM), name) } function key(name) { return can.core.Keys(can.Conf(chat.RIVER), can.Conf(chat.STORM), name) }
can.page.Cache(key(can._ACTION), can._action, can._output.scrollTop+1) can.page.Cache(key(ctx.ACTION), can._action, can._output.scrollTop+1)
can.page.Cache(key(can._OUTPUT), can._output, can._output.scrollTop+1) can.page.Cache(key(chat.OUTPUT), can._output, can._output.scrollTop+1)
can.Conf(can._RIVER, river), can.Conf(can._STORM, storm) // 转场 can.Conf(chat.RIVER, river), can.Conf(chat.STORM, storm) // 转场
var position = can.page.Cache(key(can._ACTION), can._action) var position = can.page.Cache(key(ctx.ACTION), can._action)
var position = can.page.Cache(key(can._OUTPUT), can._output) var position = can.page.Cache(key(chat.OUTPUT), can._output)
if (position) { can._output.scrollTo(0, position-1); return } if (position) { can._output.scrollTo(0, position-1); return }
can.run({}, [river, storm], function(msg) { can.run({}, [river, storm], function(msg) {
@ -149,7 +143,7 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg,
"自由布局": "free", "自由布局": "free",
} }
layout = trans[layout]||layout, can.Conf(can._LAYOUT, layout) layout = trans[layout]||layout, can.Conf(chat.LAYOUT, layout)
can.page.Modify(can, can._action, {className: "action "+layout}) can.page.Modify(can, can._action, {className: "action "+layout})
can.page.Modify(can, can._output, {className: "output "+layout}) can.page.Modify(can, can._output, {className: "output "+layout})
@ -176,23 +170,23 @@ Volcanos("onexport", {help: "导出数据", list: [],
}) })
}, },
size: function(can, msg) { size: function(can, msg) {
msg.Option(can._TOP, can._target.offsetTop) msg.Option(chat.TOP, can._target.offsetTop)
msg.Option(can._LEFT, can._target.offsetLeft) msg.Option(chat.LEFT, can._target.offsetLeft)
msg.Option(can._WIDTH, can._target.offsetWidth) msg.Option(chat.WIDTH, can._target.offsetWidth)
msg.Option(can._HEIGHT, can._target.offsetHeight) msg.Option(chat.HEIGHT, can._target.offsetHeight)
msg.Option(can._SCROLL, can.user.isMobile? can._target.parentNode.parentNode.scrollTop: can._output.scrollTop) msg.Option(chat.SCROLL, can.user.isMobile? can._target.parentNode.parentNode.scrollTop: can._output.scrollTop)
}, },
layout: function(can, msg) { return can.Conf(can._LAYOUT) }, layout: function(can, msg) { return can.Conf(chat.LAYOUT) },
plugin: function(can, msg, word) { plugin: function(can, msg, word) {
var fields = (msg.Option(can._FIELDS)||"ctx,cmd,type,name,text").split(",") var fields = (msg.Option(ice.MSG_FIELDS)||"ctx,cmd,type,name,text").split(",")
can.page.Select(can, can._output, "fieldset.plugin>legend", function(item) { can.page.Select(can, can._output, "fieldset.plugin>legend", function(item) {
if (item.innerHTML.indexOf(word[1]) == -1) { return } if (item.innerHTML.indexOf(word[1]) == -1) { return }
var meta = item.parentNode.Meta var meta = item.parentNode.Meta
var list = can.page.Select(can, item.nextSibling, '.args', function(item) { return item.value||"" }) var list = can.page.Select(can, item.nextSibling, '.args', function(item) { return item.value||"" })
var data = {ctx: "web.chat", cmd: can._ACTION, var data = {ctx: "web.chat", cmd: ctx.ACTION,
type: can._PLUGIN, name: item.innerHTML, text: shy("跳转", function(event) { type: mdb.PLUGIN, name: item.innerHTML, text: shy("跳转", function(event) {
var input = can.page.Select(can, item.parentNode, "input.args")[0] var input = can.page.Select(can, item.parentNode, "input.args")[0]
input && input.focus() input && input.focus()
}), argument: JSON.stringify(list), }), argument: JSON.stringify(list),

View File

@ -48,8 +48,8 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
can.page.Modify(can, can.toast, [time.split(" ").pop(), title, content].join(" ")) can.page.Modify(can, can.toast, [time.split(" ").pop(), title, content].join(" "))
can._toast.Push({time: time, fileline: fileline, title: title, content: content}) can._toast.Push({time: time, fileline: fileline, title: title, content: content})
}, },
ncmd: function(can, msg, time, follow, commands) { const NCMD = "ncmd"; can._cmds = can._cmds || can.request() ncmd: function(can, msg, follow, cmds) { const NCMD = "ncmd"; can._cmds = can._cmds || can.request()
can._cmds.Push({time: time, follow: follow, commands: commands}) can._cmds.Push({time: can.base.Time(), follow: follow, cmds: cmds})
can.page.Select(can, can._output, can.core.Keys(html.SPAN, NCMD), function(item) { can.page.Select(can, can._output, can.core.Keys(html.SPAN, NCMD), function(item) {
item.innerHTML = can.Conf(NCMD, parseInt(can.Conf(NCMD)||"0")+1+"")+"" item.innerHTML = can.Conf(NCMD, parseInt(can.Conf(NCMD)||"0")+1+"")+""
}) })
@ -64,18 +64,18 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg,
_cmd: function(can) { _cmd: function(can) {
return can.onappend.float(can, can._cmds, function(value, key, index, line, list) { return can.onappend.float(can, can._cmds, function(value, key, index, line, list) {
var commands = can.base.Obj(line.commands); switch (line.follow) { var cmds = can.base.Obj(line.cmds); switch (line.follow) {
case "chat.Action": commands = commands.slice(2); break case "chat.Action": cmds = cmds.slice(2); break
case "chat.Footer": commands = commands.slice(2); break case "chat.Footer": cmds = cmds.slice(2); break
} }
switch (commands[0]) { switch (cmds[0]) {
case "web.wiki.word": commands = commands.slice(5); break case "web.wiki.word": cmds = cmds.slice(5); break
} }
can.search({}, ["Action.onexport.size"], function(msg, top, left, width, height) { can.search({}, ["Action.onexport.size"], function(msg, top, left, width, height) {
can.onappend.plugin(can, {index: commands[0], args: commands.slice(1), width: width, height: height-100}, function(sub) { can.onappend.plugin(can, {index: cmds[0], args: cmds.slice(1), width: width, height: height-100}, function(sub) {
sub.run = function(event, cmds, cb) { sub.run = function(event, cmds, cb) {
can.run(event, can.misc.Concat([ctx.ACTION, cli.RUN, commands[0]], cmds), cb) can.run(event, can.misc.Concat([ctx.ACTION, cli.RUN, cmds[0]], cmds), cb)
} }
can.page.Modify(can, sub._output, {style: {"max-width": width}}) can.page.Modify(can, sub._output, {style: {"max-width": width}})

View File

@ -52,7 +52,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
}, },
}) })
Volcanos("onengine", {help: "解析引擎", list: [], _engine: function(event, can, msg, panel, cmds, cb) { Volcanos("onengine", {help: "解析引擎", list: [], _engine: function(event, can, msg, panel, cmds, cb) {
var list = can.onengine._river||can.onengine.river var list = can._root.river
cmds.length == 0 && can.core.Item(list, function(key, value) { cmds.length == 0 && can.core.Item(list, function(key, value) {
msg.Push({hash: key, name: can.user.language(can) == "en"? key: value.name}) // 群组列表 msg.Push({hash: key, name: can.user.language(can) == "en"? key: value.name}) // 群组列表
}); if (cmds.length != 1 && cmds[1] != chat.TOOL) { return false } }); if (cmds.length != 1 && cmds[1] != chat.TOOL) { return false }
@ -292,7 +292,7 @@ Volcanos("onexport", {help: "导出数据", list: [],
width: function(can) { return can._target.offsetWidth }, width: function(can) { return can._target.offsetWidth },
storm: function(can, msg, word) { storm: function(can, msg, word) {
var fields = (msg.Option(ice.MSG_FIELDS)||"ctx,cmd,type,name,text").split(",") var fields = (msg.Option(ice.MSG_FIELDS)||"ctx,cmd,type,name,text").split(",")
can.core.Item(can.onengine.river, function(river, value) { can.core.Item(can._root.river, function(river, value) {
can.core.Item(value.storm, function(storm, item) { can.core.Item(value.storm, function(storm, item) {
if (word[1] != "" && word[1] != storm && word[1] != item.name) { return } if (word[1] != "" && word[1] != storm && word[1] != item.name) { return }

View File

@ -6,6 +6,7 @@ const kit = {
MDB_TYPE: "type", MDB_TYPE: "type",
MDB_NAME: "name", MDB_NAME: "name",
MDB_TEXT: "text", MDB_TEXT: "text",
MDB_HELP: "help",
MDB_LINK: "link", MDB_LINK: "link",
MDB_VALUE: "value", MDB_VALUE: "value",
@ -49,8 +50,8 @@ const web = {
const aaa = { const aaa = {
USERNAME: "username", USERNAME: "username",
USERNICK: "usernick", USERNICK: "usernick",
AVATAR: "avatar",
BACKGROUND: "background", BACKGROUND: "background",
AVATAR: "avatar",
LOGIN: "login", LOGIN: "login",
LOGOUT: "logout", LOGOUT: "logout",
@ -58,9 +59,9 @@ const aaa = {
} }
const mdb = { const mdb = {
CREATE: "create", CREATE: "create",
REMOVE: "remove",
INSERT: "insert", INSERT: "insert",
MODIFY: "modify", MODIFY: "modify",
REMOVE: "remove",
PLUGIN: "plugin", PLUGIN: "plugin",
HASH: "hash", HASH: "hash",
@ -105,6 +106,14 @@ const chat = {
TOOL: "tool", TOOL: "tool",
NODE: "node", NODE: "node",
LAYOUT: "layout",
OUTPUT: "output",
SCROLL: "scroll",
HEIGHT: "height",
WIDTH: "width",
TOP: "top",
LEFT: "left",
HEADER: "header", HEADER: "header",
TOPIC: "topic", TOPIC: "topic",
TITLE: "title", TITLE: "title",
@ -147,8 +156,8 @@ const html = {
} }
function shy(help, meta, list, cb) { function shy(help, meta, list, cb) {
var index = 0, args = arguments; function next(check) { var index = 0, args = arguments; function next(type) {
if (index < args.length && (!check || check == typeof args[index])) { if (index < args.length && (!type || type == typeof args[index])) {
return args[index++] return args[index++]
} }
} }
@ -159,12 +168,10 @@ function shy(help, meta, list, cb) {
cb.list = next("object") || [] cb.list = next("object") || []
return cb return cb
}; var _can_name = "" }; var _can_name = ""
var Volcanos = shy("火山架", {volcano: "/frame.js", args: {}, pack: {}, libs: [], cache: {}}, [], function(name, can, libs, cb) { var Volcanos = shy("火山架", {iceberg: "/chat/", volcano: "/frame.js", args: {}, pack: {}, libs: [], cache: {}}, function(name, can, libs, cb) {
var meta = arguments.callee.meta, list = arguments.callee.list var meta = arguments.callee.meta, list = arguments.callee.list
if (typeof name == "object") { var Config = name; _can_name = "" if (typeof name == "object") { var Config = name; Config.panels = Config.panels||[], Config.main = Config.main||{}
meta.libs = Config.libs, meta.volcano = Config.volcano meta.libs = ["/lib/base.js", "/lib/core.js", "/lib/misc.js", "/lib/page.js", "/lib/user.js"]
Config.panels = Config.panels||[]
Config.main = Config.main||{}
// 预加载 // 预加载
var Preload = (Config.preload||[]).concat(Config.main.list) var Preload = (Config.preload||[]).concat(Config.main.list)
@ -173,16 +180,14 @@ var Volcanos = shy("火山架", {volcano: "/frame.js", args: {}, pack: {}, libs:
}; Preload = Preload.concat(Config.plugin) }; Preload = Preload.concat(Config.plugin)
// 根模块 // 根模块
name = Config.name, can = {_follow: Config.name, _target: document.body} name = Config.name, can = {_follow: Config.name, _target: Config.target||document.body}
libs = Preload.concat(Config.libs, Config.volcano), cb = function(can) { libs = Preload.concat(Config.libs||meta.libs, Config.volcano||meta.volcano), cb = function(can) {
can.onengine._init(can, can.Conf(Config), Config.panels, function(msg) { can.onengine._init(can, can.Conf(Config), Config.panels, Config._init, can._target)
can.base.isFunc(Config._init) && Config._init(can) }, _can_name = "", can._root = can
}, can._target)
}
} }
var proto = {__proto__: meta, _name: name, _load: function(name, cb) { // 加载缓存 can = can||{}, can.__proto__ = {__proto__: meta, _name: name, _load: function(name, cb) { // 加载缓存
var cache = meta.cache[name] || []; for (list.reverse(); list.length > 0; list) { var cache = meta.cache[name]||[]; for (list.reverse(); list.length > 0; list) {
var sub = list.pop(); sub != can && cache.push(sub) var sub = list.pop(); sub != can && cache.push(sub)
}; meta.cache[name] = cache }; meta.cache[name] = cache
@ -207,37 +212,29 @@ var Volcanos = shy("火山架", {volcano: "/frame.js", args: {}, pack: {}, libs:
function next() { can._load(libs[0], each), can.require(libs.slice(1), cb, each) } function next() { can._load(libs[0], each), can.require(libs.slice(1), cb, each) }
meta.cache[libs[0]]? next(): meta._load(libs[0], next) meta.cache[libs[0]]? next(): meta._load(libs[0], next)
}, },
request: function(event, option) { event = event || {} request: function(event, option) { event = event||{}
event._msg = event._msg || can.misc.Message(event, can) var msg = event._msg||can.misc.Message(event, can); event._msg = msg
function set(key, value) { msg[key] == undefined && msg.Option(key, value) }
function set(key, value) {
if (event._msg[key] == undefined) {
event._msg.Option(key, value)
}
}
can.core.List(arguments, function(option, index) { if (index == 0) { return } can.core.List(arguments, function(option, index) { if (index == 0) { return }
can.base.isFunc(option.Option)? can.core.List(option.Option(), function(key) { can.base.isFunc(option.Option)? can.core.List(option.Option(), function(key) {
set(key, option.Option(key)) set(key, option.Option(key))
}): can.core.Item(can.base.isFunc(option)? option(): option, set) }): can.core.Item(can.base.isFunc(option)? option(): option, set)
}); return msg
}); return event._msg
}, },
get: function(name, key) { var event = {} set: function(name, key, value) {
return can.search(event, [name+".onexport."+key]) var msg = can.request({}); msg.Option(key, value)
}, return can.search(msg._event, [name+".onimport."+key])
set: function(name, key, value) { var event = {}
var msg = can.request(event); msg.Option(key, value)
return can.search(event, [name+".onimport."+key])
}, },
get: function(name, key) { return can.search({}, [name+".onexport."+key]) },
search: function(event, cmds, cb) { return can.run && can.run(event, ["_search"].concat(cmds), cb, true) }, search: function(event, cmds, cb) { return can.run && can.run(event, ["_search"].concat(cmds), cb, true) },
const: function(list) { can.core.List(typeof list == "object"? list: arguments, function(v) { can["_"+v.toUpperCase()] = v }) },
Conf: function(key, value) { return can.core.Value(can._conf, key, value) }, _conf: {}, Conf: function(key, value) { return can.core.Value(can._conf, key, value) }, _conf: {},
}; can = can || {}; can.__proto__ = proto }
if (_can_name && location.search.indexOf("debug=true") == -1) { // 加入缓存 if (_can_name) { // 加入缓存
meta.cache[_can_name] = meta.cache[_can_name] || [] meta.cache[_can_name] = meta.cache[_can_name]||[]
meta.cache[_can_name].push(can) meta.cache[_can_name].push(can)
} else { // 加入队列 } else { // 加入队列
list.push(can) list.push(can)
@ -249,20 +246,20 @@ Volcanos.meta._load = function(url, cb) {
case "css": case "css":
var item = document.createElement(kit.MDB_LINK) var item = document.createElement(kit.MDB_LINK)
item.rel = "stylesheet", item.type = "text/css" item.rel = "stylesheet", item.type = "text/css"
item.href = url; item.onload = cb item.onload = cb, item.href = url
document.head.appendChild(item) break
return item
case "js": case "js":
var item = document.createElement(ssh.SCRIPT) var item = document.createElement(ssh.SCRIPT)
item.src = url, item.onload = cb item.onload = cb, item.src = url
document.body.appendChild(item) break
return item default: return
} }
return document.body.appendChild(item), item
} }
function cmd(tool) { function cmd(tool) {
Volcanos({name: "chat", iceberg: "/chat/", volcano: "/frame.js", preload: [], Volcanos({name: "chat", panels: [
libs: ["/lib/base.js", "/lib/core.js", "/lib/misc.js", "/lib/page.js", "/lib/user.js"], {name: "cmd", help: "工作台", pos: "main", tool: tool},
panels: [{name: "cmd", help: "工作台", pos: "main", tool: tool}], main: {name: "cmd", list: []}, plugin: [ ], main: {name: "cmd", list: []}, plugin: [
"/plugin/state.js", "/plugin/state.js",
"/plugin/input.js", "/plugin/input.js",
"/plugin/table.js", "/plugin/table.js",