1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-25 16:58:06 +08:00
This commit is contained in:
shaoying 2021-10-18 00:38:16 +08:00
parent f3e14258a4
commit b3bec1cfaa
16 changed files with 269 additions and 393 deletions

View File

@ -1,4 +1,3 @@
_can_name = "/frame.js"
Volcanos("onengine", {help: "搜索引擎", list: [], _init: function(can, meta, list, cb, target) {
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)
@ -15,6 +14,7 @@ Volcanos("onengine", {help: "搜索引擎", list: [], _init: function(can, meta,
} }), panel.onaction._init(panel, item, item.list, next, panel._target)
can.onmotion.float.auto(can, panel._output)
panel.onkeypop._build(panel)
}, target)
}, function() { can.misc.Log(can.user.title(), cli.RUN, can)
can.ondaemon._init(can), can.onmotion._init(can, target), can.onkeypop._init(can, target)
@ -308,7 +308,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
var input = meta.action||kit.MDB_KEY; input != "auto" && can.require(["/plugin/input/"+input+".js"], function(can) {
can.core.Item(can.onfigure[input], function(key, on) { if (key.indexOf("on") != 0) { return }
target[key] = function(event) {
can.onappend._init(can, {type: html.INPUT, name: input, pos: html.FLOAT}, [], function(sub) { sub.Conf(meta)
can.onappend._init(can, {type: html.INPUT, name: input, pos: chat.FLOAT}, [], function(sub) { sub.Conf(meta)
sub.run = function(event, cmds, cb) { var msg = sub.request(event, can.Option());
(meta.run||can.run)(event, cmds, cb, true)
}
@ -619,10 +619,9 @@ Volcanos("onmotion", {help: "动态特效", list: [], _init: function(can, targe
},
})
Volcanos("onkeypop", {help: "键盘交互", list: [], _focus: [], _init: function(can, target) {
var focus = can.onkeypop._focus
var focus = can.onkeypop._focus; can.onkeypop._build(can)
// can.onengine.listen(can, "keymap.focus", function(cb) { cb? focus.push(cb): focus.pop() })
can.onengine.listen(can, "keymap.focus", function(cb) { cb? focus.push(cb): can.onkeypop._focus.length = 0 })
can.onkeypop._build(can)
target.onkeydown = function(event) { if (focus.length > 0) { return focus[focus.length-1](event) }
event.target == target && can.page.Select(can, target, "fieldset.Action>div.output", function(item) {
target._keys = can.onkeypop._parse(event, can, "normal", target._keys||[], item)
@ -649,9 +648,6 @@ Volcanos("onkeypop", {help: "键盘交互", list: [], _focus: [], _init: functio
}
var map = can.onkeypop._mode[mode]
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
}
@ -776,4 +772,3 @@ Volcanos("onkeypop", {help: "键盘交互", list: [], _focus: [], _init: functio
target.setSelectionRange(start, start)
},
})
_can_name = ""

View File

@ -64,6 +64,7 @@ Volcanos("user", {help: "用户操作", agent: {
"list": "查看", "back": "返回",
"run": "执行", "refresh": "刷新",
"share": "共享", "clear": "清空",
"done": "完成",
}[text] || text
},
toast: function(can, content, title, duration, progress) {

View File

@ -1,9 +1,9 @@
Volcanos({name: "chat", panels: [
{name: "Header", help: "标题栏", pos: "head", state: ["time", "username", "avatar"]},
{name: "Search", help: "搜索框", pos: "auto"},
{name: "River", help: "群聊组", pos: "left", action: ["create", "refresh"]},
{name: "Action", help: "工作台", pos: "main"},
{name: "Footer", help: "状态条", pos: "foot", state: ["ncmd"]},
{name: "Header", help: "标题栏", pos: chat.HEAD, state: ["time", "username", "avatar"]},
{name: "Search", help: "搜索框", pos: chat.AUTO},
{name: "River", help: "群聊组", pos: chat.LEFT, action: ["create", "refresh"]},
{name: "Action", help: "工作台", pos: chat.MAIN},
{name: "Footer", help: "状态条", pos: chat.FOOT, state: ["ncmd"]},
], main: {name: "Header", list: ["/publish/order.js"]}, plugin: [
"/plugin/state.js",
"/plugin/input.js",

View File

@ -1,10 +1,9 @@
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg) {
var river = can.Conf(chat.RIVER), storm = can.Conf(chat.STORM)
can.onmotion.clear(can), can.core.Next(msg.Table(), function(item, next) {
item.width = parseInt(can.Conf(chat.WIDTH))-40, item.height = parseInt(can.Conf(chat.HEIGHT))-40
can.onmotion.clear(can), can.core.Next(msg.Table(), function(item, next) { item.type = chat.PLUGIN
item.height = parseInt(can.Conf(chat.HEIGHT))-40, item.width = parseInt(can.Conf(chat.WIDTH))-40
item.feature = can.base.Obj(item.feature||item.meta)
item.inputs = can.base.Obj(item.inputs||item.list)
item.type = mdb.PLUGIN
can.onappend.plugin(can, item, function(sub, meta) {
can.onimport._plugin(can, river, storm, sub, meta), next()
@ -14,7 +13,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg)
!can.user.isMobile && can.onimport._menu(can, msg)
})
can.onmotion.float.auto(can, can._output, "carte")
can.onmotion.float.auto(can, can._output, chat.CARTE)
},
_plugin: function(can, river, storm, sub, meta) {
sub.run = function(event, cmds, cb) { var msg = sub.request(event); cmds = cmds||[]
@ -24,21 +23,20 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg)
})
}, can._plugins = (can._plugins||[]).concat([sub])
can.page.Append(can, can._action, [{view: ["item", "div", meta.name], onclick: function(event) {
can.page.Append(can, can._action, [{view: [html.ITEM, html.DIV, meta.name], onclick: function(event) {
can.onmotion.select(can, can._output, "fieldset.plugin", sub._target)
can.onmotion.select(can, can._action, "div.item", event.target)
}}])
can.page.Modify(can, sub._output, {style: {"max-width": meta.width}})
sub._option.dataset = sub._option.dataset || {}
sub._option.dataset = sub._option.dataset||{}
meta.id && (sub._option.dataset.id = meta.id)
sub._target.Meta = meta
},
_menu: function(can, msg) {
if (can.user.isMobile || can.user.Search(can, cli.POD)) {
return
}
if (can.user.isMobile || can.user.Search(can, cli.POD)) { return }
can._menu && can.page.Remove(can, can._menu)
can._menu = can.search({}, ["Header.onimport.menu", ctx.ACTION].concat(
can.base.Obj(msg.Option("menus"), [
@ -46,28 +44,23 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg)
["help", "tutor", "manual", "service", "devops", "refer"],
])
), function(event, button, list) {
if (list[0] == "help") {
can.user.open("/help/"+button+".shy")
} else {
can.onaction.layout(can, button)
}
list[0] == "help"? can.user.open("/help/"+button+".shy"): can.onaction.layout(can, button)
})
},
_share: function(can, share) {
share && can.run({}, ["_share", share], function(msg) {
can.user.topic(can, can.user.Search(can, chat.TOPIC)||msg.Option(chat.TOPIC)||"white")
can.user.topic(can, can.user.Search(can, chat.TOPIC)||msg.Option(chat.TOPIC))
can.user.title(can.user.Search(can, chat.TITLE)||msg.Option(chat.TITLE))
can.onaction.layout(can, "auto")
if (msg["index"].length == 1) { can.user.mod.isCmd = true
can.page.ClassList.add(can, can._target, "cmd")
can.require(["/panel/cmd.css"])
if (msg[kit.MDB_INDEX].length == 1) { can.require(["/panel/cmd.css"])
can.user.mod.isCmd = true, can.page.ClassList.add(can, can._target, "cmd")
can.page.Select(can, document.body, "fieldset.panel", function(item) {
item != can._target && can.onmotion.hidden(can, item)
})
can.Conf({width: window.innerWidth+40, height: window.innerHeight})
can.Conf({height: window.innerHeight, width: window.innerWidth+40})
} else {
can.Conf({width: window.innerWidth, height: window.innerHeight})
can.Conf({height: window.innerHeight, width: window.innerWidth})
}
can.Conf(chat.RIVER, "_share"), can.Conf(chat.STORM, share)
can.onimport._init(can, msg)
@ -102,13 +95,9 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg,
can.base.isFunc(cb) && cb()
},
onmain: function(can, msg) {
var cmds = location.pathname.split("/").slice(1)
if (cmds[0] == cli.CMD) {
can.onappend.plugin(can, {index: cmds[1]}, function(sub, meta) {
sub.run = function(event, cmds, cb) {}
})
var cmds = location.pathname.split("/").slice(1); if (cmds[0] == cli.CMD) {
can.onappend.plugin(can, {index: cmds[1]}, function(sub) { sub.run = function(event, cmds, cb) {} })
}
can.onimport._share(can, can.user.Search(can, web.SHARE))
},
onsize: function(can, msg, width, height) { can.Conf({width: width, height: height}) },

View File

@ -6,14 +6,14 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
can.onimport._toast(can, msg, target)
can.base.isFunc(cb) && cb(msg)
},
_title: function(can, msg, target) { const TITLE = chat.TITLE
_title: function(can, msg, target) {
!can.user.isMobile && can.core.List(msg.result, function(item) {
can.page.Append(can, target, [{view: [TITLE, html.DIV, item], title: "联系站长"}])
can.page.Append(can, target, [{view: [chat.TITLE, html.DIV, item], title: "联系站长"}])
})
},
_state: function(can, msg, target) { const STATE = "state"
can.core.List(can.base.Obj(can.Conf(STATE)||msg.Option(STATE), ["ncmd"]), function(item) {
can.page.Append(can, target, [{view: [STATE+" "+item, html.DIV, can.Conf(item)], list: [
_state: function(can, msg, target) {
can.core.List(can.base.Obj(msg.Option(chat.STATE)||can.Conf(chat.STATE), ["ncmd"]), function(item) {
can.page.Append(can, target, [{view: [can.base.join([chat.STATE, item]), html.DIV, can.Conf(item)], list: [
{text: [item, html.LABEL]}, {text: [": ", html.LABEL]}, {text: [can.Conf(item)||"", html.SPAN, item]},
], onclick: function(event) {
can.show = can.show? (can.page.Remove(can, can.show), null): can.onaction._cmd(can)
@ -22,7 +22,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
})
},
_toast: function(can, msg, target) {
can.toast = can.page.Append(can, target, [{view: "toast", onclick: function(event) {
can.toast = can.page.Append(can, target, [{view: chat.TOAST, onclick: function(event) {
can.show = can.show? (can.page.Remove(can, can.show), null): can.onappend.float(can, can._toast).first
can.page.Modify(can, can.show, {style: {left: "", top: "", right: 0, bottom: 32}})
}}]).first
@ -31,10 +31,10 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
can.page.Append(can, target, [{input: ["cmd", function(event) {
can.onkeypop.input(event, can); if (event.key != "Enter") { return }
switch (event.target.value) {
case "close": can.cli && can.cli.close(); break
case "clear": can.cli && can.cli.close(); break
case cli.CLOSE: can.cli && can.cli.close(); break
case cli.CLEAR: can.cli && can.cli.close(); break
default:
can.run(event, [cli.RUN].concat(can.core.Split(event.target.value+" ")), function(msg) {
can.run(event, [cli.RUN].concat(can.core.Split(event.target.value, ice.SP)), function(msg) {
can.cli && can.cli.close()
can.cli = can.onappend.float(can, msg, function(value, key, index, line, list) {
@ -44,8 +44,8 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
}]}])
},
toast: function(can, msg, title, content, fileline, time) { can._toast = can._toast || can.request()
can.page.Modify(can, can.toast, [time.split(" ").pop(), title, content].join(" "))
toast: function(can, msg, title, content, fileline, time) { can._toast = can._toast||can.request()
can.page.Modify(can, can.toast, [time.split(ice.SP).pop(), title, content].join(ice.SP))
can._toast.Push({time: time, fileline: fileline, title: title, content: content})
},
ncmd: function(can, msg, follow, cmds) { const NCMD = "ncmd"; can._cmds = can._cmds || can.request()
@ -73,15 +73,15 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg,
}
can.search({}, ["Action.onexport.size"], function(msg, top, left, width, height) {
can.onappend.plugin(can, {index: cmds[0], args: cmds.slice(1), width: width, height: height-100}, function(sub) {
can.onappend.plugin(can, {index: cmds[0], args: cmds.slice(1), height: height-100, width: width}, function(sub) {
sub.run = function(event, 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._target, {style: {top: top+100, left: left}})
can.page.Modify(can, sub._legend, {style: {display: "block"}})
can.page.ClassList.add(can, sub._target, "float")
can.page.Modify(can, sub._legend, {style: {display: html.BLOCK}})
can.page.Modify(can, sub._output, {style: {"max-width": width}})
can.page.ClassList.add(can, sub._target, chat.FLOAT)
}, document.body)
})
}).first

View File

@ -19,7 +19,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
can.onaction.Footer(can)
} else if (can.user.isExtension) {
can.onaction.River(can)
} else if (can.user.Search(can, cli.POD)) {
} else if (can.user.Search(can, ice.POD)) {
can.onaction.River(can)
can.onaction.Footer(can)
}
@ -33,32 +33,32 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
can.user.Search(can, chat.GRANT, "")
}
},
_title: function(can, msg, target) { const TITLE = chat.TITLE
can.user.title(can.user.Search(can, TITLE)||can.user.Search(can, cli.POD))
_title: function(can, msg, target) {
can.user.title(can.user.Search(can, chat.TITLE)||can.user.Search(can, cli.POD))
!can.user.isMobile && can.core.List(msg.result||["shylinux.com/x/contexts"], function(item) {
can.page.Append(can, target, [{view: [TITLE, html.DIV, item], title: "返回主页", onclick: function(event) {
can.page.Append(can, target, [{view: [chat.TITLE, html.DIV, item], title: "返回主页", onclick: function(event) {
can.onaction.title(event, can)
}}])
})
},
_state: function(can, msg, target) { const STATE = "state"
can.core.List(can.base.Obj(can.Conf(STATE)||msg.Option(STATE), [kit.MDB_TIME, aaa.USERNAME]), function(item) {
_state: function(can, msg, target) {
can.core.List(can.base.Obj(msg.Option(chat.STATE)||can.Conf(chat.STATE), [kit.MDB_TIME, aaa.USERNAME]), function(item) {
if (item == aaa.AVATAR) {
can.page.Append(can, target, [{view: [STATE+" "+item], list: [{img: can.Conf(item)||" "}], onmouseenter: function(event) {
can.page.Append(can, target, [{view: can.base.join([chat.STATE, item]), list: [{img: can.Conf(item)||ice.SP}], onmouseenter: function(event) {
can.onaction.carte(event, can, [can.page.Format(html.IMG, can.Conf(item), 160)])
}}])
return
}
can.page.Append(can, target, [{view: [STATE+" "+item, html.DIV, (can.Conf(item)||"").slice(0, 10)], onmouseenter: function(event) {
can.page.Append(can, target, [{view: [can.base.join([chat.STATE, item]), html.DIV, (can.Conf(item)||"").slice(0, 10)], onmouseenter: function(event) {
can.core.CallFunc([can.onaction, item], [event, can, item])
}, _init: function(target) {
item == kit.MDB_TIME && can.onimport._time(can, target)
}}])
})
},
_search: function(can, msg, target) { const SEARCH = "search"
var ui = can.page.Append(can, target, [{view: SEARCH, list: [{type: "input", data: {type: "text", placeholder: SEARCH}, onkeydown: function(event) {
_search: function(can, msg, target) {
var ui = can.page.Append(can, target, [{view: mdb.SEARCH, list: [{type: html.INPUT, data: {type: html.TEXT, placeholder: mdb.SEARCH}, onkeydown: function(event) {
can.onkeypop.input(event, can); switch (event.key) {
case "Enter": can.search(event, ["Search.onimport.select", "*", event.target.value]); break
}
@ -66,12 +66,11 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
can.user.isMobile && can.page.Modify(can, ui.first, {style: {float: "right"}})
},
_background: function(can, msg) {
if (can.user.isLocalFile) { return }
if (can.user.isExtension) { return }
if (can.user.isExtension || can.user.isLocalFile) { return }
can.onlayout.background(can, msg.Option(aaa.BACKGROUND), document.body)
},
_menus: function(can, msg, target) {
var menus = can.base.Obj(can.Conf(chat.MENUS)||msg.Option(chat.MENUS), [chat.HEADER, ["setting", "black", "white", "print"]])
var menus = can.base.Obj(msg.Option(chat.MENUS)||can.Conf(chat.MENUS), [chat.HEADER, ["setting", chat.BLACK, chat.WHITE, chat.PRINT]])
can.onimport.menu(can, can.user.isMobile||can.user.isExtension||can.user.Search(can, cli.POD)? [chat.HEADER, chat.RIVER]: menus, function(event, item) {
can.core.CallFunc(can.onaction[item]||function(event, can) {
can.run(event, [item], function(msg) { can.user.toast(can, "执行成功", can.user.trans(can, item)) })
@ -81,7 +80,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
_weixin: function(can, msg) { can.run({}, [ctx.ACTION, chat.AGENT], function(msg) {
can.require(can.base.Obj(msg.Option(ssh.SCRIPT)), function(can) {
wx.config({debug: msg.Option("debug") == "true",
wx.config({debug: msg.Option("debug") == ice.TRUE,
appId: msg.Option("appid"), signature: msg.Option("signature"),
nonceStr: msg.Option("noncestr"), timestamp: msg.Option("timestamp"),
@ -122,19 +121,19 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
},
menu: function(can, cmds, cb) {
return can.page.Append(can, can._output, [{type: cmds[0], list: can.core.List(cmds.slice(1), function(item) {
if (typeof item == "string") {
return {view: ["menu", html.DIV, can.user.trans(can, item)], onclick: function(event) {
if (can.base.isString(item)) {
return {view: [html.MENU, html.DIV, can.user.trans(can, item)], onclick: function(event) {
can.base.isFunc(cb) && cb(event, item, cmds)
}}
} else if (item.length > 0) {
return {view: ["menu", html.DIV, can.user.trans(can, item[0])], onmouseenter: function(event) {
return {view: [html.MENU, html.DIV, can.user.trans(can, item[0])], onmouseenter: function(event) {
can.onaction.carte(event, can, item.slice(1), function(event, button) {
can.base.isFunc(cb) && cb(event, button, item)
})
}}
} else if (typeof item == "object") {
} else if (can.base.isObject(item)) {
return item
}
}) }]).first
@ -156,7 +155,6 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, meta,
_trans: {
"river": "菜单",
"search": "搜索",
"create": "创建",
"share": "共享",
@ -173,12 +171,14 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, meta,
"print": "打印主题",
"shareuser": "共享用户",
"language": "语言",
"chinese": "中文",
"clear": "清除背景",
},
onmain: function(can, msg) {
function init() { can.run({}, [], function(msg) {
can.base.Copy(can.onaction._trans, can.base.Obj(msg.Option(chat.TRANS), {}))
can.onimport._init(can, msg, [], function(msg) { can.onengine.signal(can, "onlogin", msg) }, can._output)
can.onimport._init(can, msg, [], function(msg) { can.onengine.signal(can, chat.ONLOGIN, msg) }, can._output)
can.search({}, ["River.onmotion.toggle"])
}) }; can.search({}, ["River.onmotion.hidden"])
@ -186,7 +186,7 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, meta,
// 登录检查
can.user.isLocalFile? init(): can.run({}, [chat.CHECK], function(msg) {
can.Conf(aaa.USERNAME, msg.Option(ice.MSG_USERNAME))? init():
msg.Option("sso")? can.user.jumps(msg.Option("sso")): can.user.login(can, init, msg.Option("login"))
msg.Option(chat.SSO)? can.user.jumps(msg.Option(chat.SSO)): can.user.login(can, init, msg.Option(aaa.LOGIN))
})
},
onstorm_select: function(can, msg, river, storm) {
@ -194,34 +194,22 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, meta,
},
title: function(event, can) {
var args = {}; can.core.List([chat.TITLE, chat.TOPIC, "layout"], function(key) {
var args = {}; can.core.List([chat.TITLE, chat.TOPIC, chat.LAYOUT], function(key) {
var value = can.user.Search(can, key); value && (args[key] = value)
})
can.user.jumps(can.user.MergeURL(can, args, true))
},
carte: function(event, can, list, cb) { can.user.carte(event, can, can.onaction, list, cb) },
river: function(event, can) { can.onaction.River(can) },
black: function(event, can, button) {
can.onlayout.topic(can, button)
can.onlayout._init(can)
},
white: function(event, can, button) {
can.onlayout.topic(can, button)
can.onlayout._init(can)
},
print: function(event, can, button) {
can.onlayout.topic(can, "white print")
can.set("River", "height", -1)
can.set("Action", "height", -1)
black: function(event, can, button) { can.onlayout.topic(can, button), can.onlayout._init(can) },
white: function(event, can, button) { can.onlayout.topic(can, button), can.onlayout._init(can) },
print: function(event, can, button) { can.onlayout.topic(can, can.base.join([chat.WHITE, button]))
can.set("River", chat.HEIGHT, -1), can.set("Action", chat.HEIGHT, -1)
},
webpack: function(event, can) {
can.user.input(event, can, [
{name: "name", value: can.user.title()},
], function(ev, button, meta, list) {
can.user.input(event, can, [{name: kit.MDB_NAME, value: can.user.title()}], function(ev, button, meta, list) {
can.core.Item(Volcanos.meta.pack, function(key, msg) {
can.core.List(["_event", "_can", "_xhr", "sessid", ""], function(key) { delete(msg[key]) })
can.core.List(["_event", "_can", "_xhr", ice.MSG_SESSID, ""], function(key) { delete(msg[key]) })
})
var msg = can.request(event, {
name: meta.name, content: JSON.stringify(Volcanos.meta.pack),
@ -236,34 +224,26 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, meta,
})
},
carte: function(event, can, list, cb) { can.user.carte(event, can, can.onaction, list, cb) },
share: function(event, can, arg) { can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE].concat(arg||[])) },
username: function(event, can) {
can.onaction.carte(event, can, ["shareuser", aaa.USERNICK, "clear", aaa.LOGOUT, "english", "chinese"])
},
english: function(event, can) {
can.user.Search(can, "language", "en")
},
chinese: function(event, can) {
can.user.Search(can, "language", "zh")
},
shareuser: function(event, can) {
can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE, kit.MDB_TYPE, aaa.LOGIN])
},
share: function(event, can, arg) {
can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE].concat(arg||[]))
can.onaction.carte(event, can, ["shareuser", aaa.USERNICK, [aaa.LANGUAGE, aaa.ENGLISH, aaa.CHINESE], "clear", aaa.LOGOUT])
},
shareuser: function(event, can) { can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE, kit.MDB_TYPE, aaa.LOGIN]) },
usernick: function(event, can) {
can.user.input(event, can, [{name: aaa.USERNICK, value: can.Conf(aaa.USERNAME)}], function(ev, button, data, list, args) {
can.run(event, [aaa.USERNICK, list[0]], function(msg) {
can.page.Select(can, can._output, "div.username", function(item) {
can.page.Select(can, can._output, can.base.Keys(html.DIV, aaa.USERNAME), function(item) {
can.page.Modify(can, item, can.Conf(aaa.USERNAME, list[0]))
}), can.user.toast(can, "修改成功")
}, true)
})
},
clear: function(event, can, button) {
can.onimport.background(event, can, "")
can.onimport.avatar(event, can, "")
},
english: function(event, can) { can.user.Search(can, aaa.LANGUAGE, "en") },
chinese: function(event, can) { can.user.Search(can, aaa.LANGUAGE, "zh") },
clear: function(event, can, button) { can.onimport.background(event, can, ""), can.onimport.avatar(event, can, "") },
logout: function(event, can) { can.user.logout(can) },
River: function(can) { can.search({}, ["River.onmotion.toggle"]) },

View File

@ -1,28 +1,30 @@
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
can.onmotion.clear(can, can.ui.content)
var table = can.onappend.table(can, msg, function(value, key, index, line, array) { can.Status("count", index+1)
return {text: [key == "text" && can.base.isFunc(line.text) && line.text.help || value, "td"], onclick: function(event) {
can.onaction[can.type == "*"||event.ctrlKey? "plugin": "select"](event, can, index)
can.list = msg.Table(), can.onmotion.clear(can, can.ui.content)
var table = can.onappend.table(can, msg, function(value, key, index, line, array) { can.Status(kit.MDB_TOTAL, index+1)
return {text: [key == kit.MDB_TEXT && can.base.isFunc(line.text) && line.text.help || value, html.TD], onclick: function(event) {
can.onaction[can.type == "*"||event.ctrlKey? chat.PLUGIN: mdb.SELECT](event, can, index)
}}
}, can.ui.content, can.core.List((msg.Option("sort")||"ctx,cmd,type,name,text").split(","), function(item) {
return list.indexOf(item)
})); table && can.page.Modify(can, can.ui.display, {style: {width: table.offsetWidth}})
if (msg.Length() == 1) {
can.page.Select(can, table, "td")[0].click()
}
msg.Length() == 1 && can.page.Select(can, table, html.TD)[0].click()
},
_word: function(can, msg, cmds, fields) { can.type = cmds[0]
var res = can.request({}, {word: cmds, fields: fields.join(","), sort: msg.Option("sort"), index: msg.Option("index"), river: msg.Option("river")})
var cb = can.onaction[cmds[1]]; if (cb) { cb({}, can); return }
if (cmds[1] == "clear") { can.onaction["清空"]({}, can); return }
can.onengine.signal(can, "onsearch", res)
can.run(res._event, cmds, function(res) {
can.list = res.Table()
can.onimport._init(can, res, fields)
}), can.ui.word.setSelectionRange(0, -1)
var res = can.request({}, {
word: cmds,
fields: fields.join(","),
sort: msg.Option("sort"),
index: msg.Option("index"),
river: msg.Option("river"),
})
can.onengine.signal(can, chat.ONSEARCH, res)
can.run(res._event, cmds, function(res) { can.onimport._init(can, res, fields) })
can.onmotion.show(can), can.ui.input.focus()
can.ui.word.setSelectionRange(0, -1)
},
select: function(can, msg, cmds, cb) { can.ui.word.value = cmds[1]
@ -41,31 +43,29 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
} )
},
})
Volcanos("onaction", {help: "交互操作", list: ["关闭", "清空", "完成"], _init: function(can, meta, list, cb, target) {
Volcanos("onaction", {help: "交互操作", list: [cli.CLEAR, cli.CLOSE, cli.DONE], _init: function(can, meta, list, cb, target) {
can.base.isFunc(cb) && cb()
},
onlogin: function(can, msg) {
can.onappend._action(can, can.Conf("action")||can.onaction.list)
can.onappend._action(can, can.Conf(html.ACTION)||can.onaction.list)
can.ui = can.page.Append(can, can._output, [
{input: ["word", function(event) { can.onkeypop.input(event, can)
if (event.key == "Escape") { can.onmotion.hide(can) }
if (event.key == "Enter") { event.stopPropagation(), event.preventDefault()
if (event.shiftKey) {
var first = can.page.Select(can, can.ui.content, "tr")[1]
return can.onaction[can.type == "*"? "plugin": "select"](event, can, first.dataset.index)
if (event.shiftKey) { var first = can.page.Select(can, can.ui.content, html.TR)[1]
return can.onaction[can.type == "*"? chat.PLUGIN: html.SELECT](event, can, first.dataset.index)
}
if (event.ctrlKey) { return can.onaction["完成"](event, can) }
if (event.ctrlKey) { return can.onaction[cli.DONE](event, can) }
can.input(event, event.target.value)
}
}]},
{view: "content"}, {view: ["display", "table"]}, {view: "preview"},
])
can.page.ClassList.add(can, can.ui.display, "content")
{view: chat.CONTENT}, {view: [chat.DISPLAY, html.TABLE]}, {view: chat.PROFILE},
]), can.page.ClassList.add(can, can.ui.display, chat.CONTENT)
},
"关闭": function(event, can) { can.onmotion.hide(can) },
"清空": function(event, can) { can.onmotion.clear(can, can.ui.preview) },
"完成": function(event, can) { can.base.isFunc(can.cb) && can.cb() },
close: function(event, can) { can.onmotion.hide(can) },
clear: function(event, can) { can.onmotion.clear(can, can.ui.profile) },
done: function(event, can) { can.base.isFunc(can.cb) && can.cb() },
select: function(event, can, index) { var line = can.list[index]
if (can.base.isFunc(line.text)) { return can.onmotion.hide(can), line.text(event) }
@ -74,32 +74,31 @@ Volcanos("onaction", {help: "交互操作", list: ["关闭", "清空", "完成"]
return can.onimport.select(can, msg, [line.type, line.name, line.text], can.cb)
}
var fields = can.page.Select(can, can.ui.display, "th", function(item) { return item.innerText })
var fields = can.page.Select(can, can.ui.display, html.TH, function(item) { return item.innerText })
can.page.Append(can, can.ui.display, [{td: can.core.List(fields, function(item) {
return line[item]
}), data: {index: index}, onclick: function(event) { can.page.Remove(can, event.target.parentNode)
can.Status("selected", can.page.Select(can, can.ui.display, "tr").length-1)
}}]), can.Status("selected", can.page.Select(can, can.ui.display, "tr").length-1)
can.Status(kit.MDB_COUNT, can.page.Select(can, can.ui.display, html.TR).length-1)
}}]), can.Status(kit.MDB_COUNT, can.page.Select(can, can.ui.display, html.TR).length-1)
},
plugin: function(event, can, index) { var line = can.list[index]
if (can.base.isFunc(line.text)) { return can.onmotion.hide(can), line.text(event) }
var cmd = line.cmd == "command"? can.core.Keys(line.text, line.name): can.core.Keys(line.ctx, line.cmd)
can.onappend.plugin(can, {type: "plugin", index: cmd||msg.Option("index")}, function(sub, meta) {
can.search({}, "Action.onexport.size", function(msg, width) {
sub.Conf("width", width-60)
})
can.onappend.plugin(can, {type: chat.PLUGIN, index: cmd||msg.Option(kit.MDB_INDEX)}, function(sub, meta) {
can.search({}, "Action.onexport.size", function(msg, width) { sub.Conf(chat.WIDTH, width-60) })
sub.run = function(event, cmds, cb) { var msg = can.request(event, line)
can.run(event, can.misc.Concat([ctx.ACTION, cli.RUN, meta.index], cmds), cb)
}
}, can.ui.preview)
}, can.ui.profile)
},
})
Volcanos("onexport", {help: "导出数据", list: ["selected", "count"],
Volcanos("onexport", {help: "导出数据", list: [kit.MDB_COUNT, kit.MDB_TOTAL],
select: function(can) {
return can.page.Select(can, can.ui.display, "tr", function(tr) {
return can.page.Select(can, tr, "td", function(td) { return td.innerHTML })
return can.page.Select(can, can.ui.display, html.TR, function(tr) {
return can.page.Select(can, tr, html.TD, function(td) { return td.innerHTML })
}).slice(1)
},
})

View File

@ -1,42 +1,36 @@
var _can_name = "/plugin/input.js"
_can_name = "/plugin/input.js"
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, meta, list, cb, target) {
},
})
Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, meta, list, cb, target) {
can.base.isFunc(cb) && cb(); switch (meta.type) {
case "select": meta.value && (target.value = meta.value); break
case "button": meta.action == "auto" && target.click(); break
case html.SELECT: meta.value && (target.value = meta.value); break
case html.BUTTON: meta.action == ice.AUTO && target.click(); break
}
},
"run": function(event, can) {
var title = can.sup._name+" "+can.sup.Input([], true)
run: function(event, can) {
var title = can.sup._name+ice.SP+can.sup.Input([], true)
var toast = can.user.toast(can, "执行中...", title, -1)
can.run(event, [], function() { toast.close(), can.user.toast(can, "执行成功...", title) })
},
"refresh": function(event, can) { can.run(event) },
"list": function(event, can) { can.run(event) },
"back": function(event, can) { can.sup.onimport._back(can.sup) },
list: function(event, can) { can.run(event) },
back: function(event, can) { can.sup.onimport._back(can.sup) },
refresh: function(event, can) { can.run(event) },
onchange: function(event, can) {
if (can.Conf("type") == "select") { can.run(event) }
},
ondblclick: function(event, can) {
if (can.Conf("type") == "text") { event.target.setSelectionRange(0, -1) }
},
onclick: function(event, can) {
if (can.Conf("type") == "button") { can.run(event, [ctx.ACTION, can.Conf("name")].concat(can.sup.Input())) }
if (can.Conf(kit.MDB_TYPE) == html.BUTTON) { can.run(event, [ctx.ACTION, can.Conf(kit.MDB_NAME)].concat(can.sup.Input())) }
},
onkeydown: function(event, can) { var target = event.target
switch (can.Conf("type")) {
case "textarea": if (!event.ctrlKey) { return }
}
can.onkeypop.input(event, can, target); switch (event.key) {
case "Enter":
switch (can.Conf("type")) {
case "textarea": if (!event.ctrlKey) { return }
case "text": event.target.setSelectionRange(0, -1); break
onchange: function(event, can) {
if (can.Conf(kit.MDB_TYPE) == html.SELECT) { can.run(event) }
},
onkeydown: function(event, can) {
if (can.Conf(kit.MDB_TYPE) == html.TEXTAREA) { if (!event.ctrlKey) { return } }
can.onkeypop.input(event, can, event.target); switch (event.key) {
case lang.ENTER:
switch (can.Conf(kit.MDB_TYPE)) {
case html.TEXTAREA: if (!event.ctrlKey) { return }
case html.TEXT: event.target.setSelectionRange(0, -1); break
}; can.run(event), event.stopPropagation(), event.preventDefault(); break
case "b": if (event.ctrlKey) { can.CloneInput() } break
case "m": if (event.ctrlKey) { can.CloneField() } break
@ -44,4 +38,4 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, meta,
},
})
Volcanos("onexport", {help: "导出数据", list: []})
var _can_name = ""
_can_name = ""

View File

@ -1,16 +1,16 @@
Volcanos("onfigure", {help: "控件详情", list: [], date: {onclick: function(event, can, meta, cb, target) {
function set(now) { target.value = can.base.Time(now), can.page.Remove(can, can._target)
meta && meta.action == "auto" && can.run({})
meta && meta.action == ice.AUTO && can.run({})
}
// 添加控件
var now = target.value? new Date(target.value): new Date()
can.onappend._action(can, ["关闭",
can.onappend._action(can, [cli.CLOSE,
["hour"].concat(can.core.List(24)), ["minute"].concat(can.core.List(0, 60, 5)), ["second"].concat(can.core.List(0, 60, 5)),
"今天", "", "上一月", ["year"].concat(can.core.List(now.getFullYear() - 10, now.getFullYear() + 10)),
["month"].concat(can.core.List(1, 13)), "下一月",
], can._action, {
"关闭": function(event) { can.page.Remove(can, can._target) },
close: function(event) { can.page.Remove(can, can._target) },
"hour": function(event, can, key, value) { now.setHours(parseInt(value)||0), show(now) },
"minute": function(event, can, key, value) { now.setMinutes(parseInt(value)||0), show(now) },
"second": function(event, can, key, value) { now.setSeconds(parseInt(value)||0), show(now) },
@ -26,7 +26,7 @@ Volcanos("onfigure", {help: "控件详情", list: [], date: {onclick: function(e
"后一年": function(event) { now.setFullYear(now.getFullYear()+1), show(now) },
})
can._table = can.page.Append(can, can._output, [{view: ["content", "table"]}]).first
can._table = can.page.Append(can, can._output, [{view: [chat.CONTENT, html.TABLE]}]).first
var today = new Date(); function show(now) {
// 设置控件
can.Action("month", now.getMonth()+1)
@ -37,8 +37,8 @@ Volcanos("onfigure", {help: "控件详情", list: [], date: {onclick: function(e
// 设置组件
can.page.Appends(can, can._table, [{th: ["日", "一", "二", "三", "四", "五", "六"]}])
var tr; function add(day, type) { if (day.getDay() == 0) { tr = can.page.Append(can, can._table, [{type: "tr"}]).last }
can.page.Append(can, tr, [{text: [day.getDate(), "td", can.base.Time(today, "%y-%m-%d") == can.base.Time(day, "%y-%m-%d")? "select": type],
var tr; function add(day, type) { if (day.getDay() == 0) { tr = can.page.Append(can, can._table, [{type: html.TR}]).last }
can.page.Append(can, tr, [{text: [day.getDate(), html.TD, can.base.Time(today, "%y-%m-%d") == can.base.Time(day, "%y-%m-%d")? html.SELECT: type],
dataset: {date: day.getTime()}, onclick: function(event) {
set(now = new Date(parseInt(event.target.dataset.date)))
},

View File

@ -1,27 +1,22 @@
Volcanos("onfigure", {help: "控件详情", list: [], key: {onclick: function(event, can, meta, cb, target) {
can.run(event, [ctx.ACTION, "inputs", meta.name, target.value], function(msg) {
can.run(event, [ctx.ACTION, mdb.INPUTS, meta.name, target.value], function(msg) {
if (msg.Length() == 0) { return can.page.Remove(can, can._target) }
can.onappend._action(can, ["close", "clear"], can._action, {
"close": function(event) { can.page.Remove(can, can._target) },
"clear": function(event) { target.value = "" },
can.onappend._action(can, [cli.CLOSE, cli.CLEAR], can._action, {
close: function(event) { can.page.Remove(can, can._target) },
clear: function(event) { target.value = "" },
})
function show(msg) {
can.onmotion.clear(can)
function show(msg) { can.onmotion.clear(can)
can.onappend.table(can, msg, function(value, key, index, line) {
return {text: [value, "td"], onclick: function() {
target.value = line[key]
msg.Option("_process") == "_again"? can.run({}, [ctx.ACTION, "inputs", meta.name, target.value], function(msg) {
return {text: [value, html.TD], onclick: function() { target.value = line[key]
msg.Option(ice.MSG_PROCESS) == ice.PROCESS_AGAIN? can.run({}, [ctx.ACTION, mdb.INPUTS, meta.name, target.value], function(msg) {
show(msg)
}): can.page.Remove(can, can._target)
}}
}), can.Status("count", msg.Length())
}), can.Status(kit.MDB_COUNT, msg.Length())
}
show(msg)
can.onlayout.figure(event, can)
show(msg), can.onlayout.figure(event, can)
})
}}})

View File

@ -1,14 +1,14 @@
Volcanos("onfigure", {help: "控件详情", list: [], province: {onclick: function(event, can, meta, cb, target) {
can.require(["/require/shylinux.com/x/echarts/echarts.js","/require/shylinux.com/x/echarts/china.js"], function() {
can.onappend._action(can, ["关闭", "清空"], can._action, {
"关闭": function(event) { can.page.Remove(can, can._target) },
"清空": function(event) { target.value = "" },
can.require(["/require/github.com/shylinux/echarts/echarts.js", "/require/github.com/shylinux/echarts/china.js"], function() {
can.onappend._action(can, [cli.CLOSE, cli.CLEAR], can._action, {
close: function(event) { can.page.Remove(can, can._target) },
clear: function(event) { target.value = "" },
})
var china_chart = echarts.init(can.page.Append(can, can._output, [{type: "div", style: {width: "600px", height: "400px"}}]).first)
var china_chart = echarts.init(can.page.Append(can, can._output, [{type: html.DIVk, style: {width: "600px", height: "400px"}}]).first)
china_chart.setOption({geo: {map: 'china'}}), china_chart.on('click', function (params) {
target.value = params.name, can.page.Remove(can, can._target)
}), can.Status("count", 34)
}), can.Status(kit.MDB_COUNT, 34)
can.onlayout.figure(event, can)
})
}}, })

View File

@ -1,4 +1,4 @@
var _can_name = "/plugin/state.js"
_can_name = "/plugin/state.js"
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf, list, cb, target) {
},
_process: function(can, msg) {
@ -237,4 +237,4 @@ Volcanos("onaction", {help: "交互操作", list: [
close: function(event, can) { can.page.Remove(can, can._target) },
})
Volcanos("onexport", {help: "导出数据", list: []})
var _can_name = ""
_can_name = ""

View File

@ -1,23 +1,17 @@
var _can_name = "/plugin/table.js"
_can_name = "/plugin/table.js"
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
can.onmotion.clear(can), can.base.isFunc(cb) && cb(msg)
can.onmotion.clear(can)
can.onappend.table(can, msg)
can.onappend.board(can, msg)
can.onmotion.story.auto(can, target)
can.base.isFunc(cb) && cb(msg)
},
_process: function(can, msg) {
if (msg.Option("sess.toast")) {
can.user.toast(can, msg.Option("sess.toast"))
}
return can.core.CallFunc([can.onimport, msg.Option("_process")], [can, msg])
},
_control: function(can, msg) {
var cb = can.onimport[msg.Option("_control")]
return can.base.isFunc(cb) && cb(can, msg)
msg.Option(ice.MSG_TOAST) && can.user.toast(can, msg.Option(ice.MSG_TOAST))
return can.core.CallFunc([can.onimport, msg.Option(ice.MSG_PROCESS)], [can, msg])
},
})
Volcanos("onaction", {help: "控件交互", list: []})
Volcanos("onexport", {help: "导出数据", list: []})
var _can_name = ""
_can_name = ""

193
proto.js
View File

@ -17,9 +17,8 @@ const kit = {
MDB_LIST: "list",
}
const ice = {
SP: " ",
PT: ".",
NL: "\n",
SP: " ", PT: ".", NL: "\n",
POD: "pod", CTX: "ctx", CMD: "cmd", ARG: "arg", OPT: "opt",
TRUE: "true",
@ -28,59 +27,55 @@ const ice = {
MSG_TITLE: "sess.title",
MSG_RIVER: "sess.river",
MSG_STORM: "sess.storm",
MSG_TOAST: "sess.toast",
MSG_FIELDS: "fields",
MSG_SESSID: "sessid",
MSG_APPEND: "append",
MSG_TARGET: "_target",
MSG_HANDLE: "_handle",
MSG_ACTION: "_action",
MSG_STATUS: "_status",
MSG_HANDLE: "_handle",
MSG_DISPLAY: "_display",
MSG_PROCESS: "_process",
PROCESS_AGAIN: "_again",
AUTO: "auto",
}
const ctx = {
CONTEXT: "context",
COMMAND: "command",
CONTEXT: "context", COMMAND: "command", CONFIG: "config",
ACTION: "action",
CONFIG: "config",
}
const cli = {
RUN: "run",
POD: "pod",
CTX: "ctx",
CMD: "cmd",
ARG: "arg",
OPEN: "open",
CLOSE: "close",
START: "start",
STOP: "stop",
POD: "pod", CTX: "ctx", CMD: "cmd", ARG: "arg", OPT: "opt",
OPEN: "open", CLOSE: "close", START: "start", STOP: "stop",
CLEAR: "clear",
DONE: "done",
}
const web = {
SHARE: "share",
SPACE: "space",
}
const aaa = {
USERNAME: "username",
USERNICK: "usernick",
BACKGROUND: "background",
AVATAR: "avatar",
USERNAME: "username", USERNICK: "usernick", BACKGROUND: "background", AVATAR: "avatar",
LOGIN: "login",
LOGOUT: "logout",
INVITE: "invite",
LANGUAGE: "language", ENGLISH: "english", CHINESE: "chinese",
LOGIN: "login", LOGOUT: "logout", INVITE: "invite",
}
const mdb = {
CREATE: "create",
REMOVE: "remove",
INSERT: "insert",
MODIFY: "modify",
CREATE: "create", REMOVE: "remove", INSERT: "insert", DELETE: "delete",
MODIFY: "modify", SELECT: "select",
PLUGIN: "plugin",
SEARCH: "search",
INPUTS: "inputs",
HASH: "hash",
LIST: "list",
META: "meta", HASH: "hash", LIST: "list",
}
const ssh = {
SCRIPT: "script",
@ -96,70 +91,30 @@ const code = {
WEBPACK: "webpack",
}
const wiki = {
TITLE: "title",
BRIEF: "brief",
REFER: "refer",
SPARK: "spark",
CHART: "chart",
IMAGE: "image",
VIDEO: "video",
FIELD: "field",
SHELL: "shell",
TITLE: "title", BRIEF: "brief", REFER: "refer", SPARK: "spark",
ORDER: "order", TABLE: "table", CHART: "chart", IMAGE: "image", VIDEO: "video",
FIELD: "field", SHELL: "shell", LOCAL: "local", PARSE: "parse",
}
const chat = {
LIB: "lib",
PAGE: "page",
PANEL: "panel",
PLUGIN: "plugin",
LIB: "lib", PAGE: "page", PANEL: "panel", PLUGIN: "plugin",
STORY: "story", CARTE: "carte", INPUT: "input", FLOAT: "float",
HEAD: "head", AUTO: "auto", LEFT: "left", MAIN: "main", FOOT: "foot",
SCROLL: "scroll", HEIGHT: "height", WIDTH: "width", LEFT: "left", TOP: "top",
STORY: "story",
CARTE: "carte",
INPUT: "input",
FLOAT: "float",
LAYOUT: "layout", PROJECT: "project", CONTENT: "content", DISPLAY: "display", PROFILE: "profile",
LAYOUT: "layout",
PROJECT: "project",
CONTENT: "content",
DISPLAY: "display",
PROFILE: "profile",
PUBLIC: "public", PROTECTED: "protected", PRIVATE: "private",
USER: "user", TOOL: "tool", NODE: "node",
HEAD: "head", LEFT: "left", MAIN: "main", FOOT: "foot",
HEADER: "header", FOOTER: "footer",
ONMAIN: "onmain", ONSIZE: "onsize", ONLOGIN: "onlogin", ONSEARCH: "onsearch",
SCROLL: "scroll",
HEIGHT: "height",
WIDTH: "width",
TOP: "top",
LEFT: "left",
RIVER: "river", STORM: "storm", FIELD: "field", TOAST: "toast",
TOPIC: "topic", BLACK: "black", WHITE: "white", PRINT: "print",
USER: "user",
TOOL: "tool",
NODE: "node",
PUBLIC: "public",
PROTECTED: "protected",
PRIVATE: "private",
HEADER: "header",
ONMAIN: "onmain",
ONSIZE: "onsize",
RIVER: "river",
STORM: "storm",
FIELD: "field",
TOPIC: "topic",
BLACK: "black",
WHITE: "white",
TITLE: "title",
MENUS: "menus",
TRANS: "trans",
AGENT: "agent",
CHECK: "check",
SHARE: "share",
GRANT: "grant",
AGENT: "agent", CHECK: "check", GRANT: "grant", SHARE: "share",
TITLE: "title", STATE: "state", MENUS: "menus", TRANS: "trans",
SSO: "sso",
CMD_MARGIN: 53,
}
const team = {
@ -172,44 +127,28 @@ const mall = {
}
const html = {
FIELDSET: "fieldset",
LEGEND: "legend",
OPTION: "option",
ACTION: "action",
OUTPUT: "output",
STATUS: "status",
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",
FORM_OPTION: "form.option",
DIV_ACTION: "div.action",
DIV_OUTPUT: "div.output",
DIV_STATUS: "div.status",
INPUT: "input", INPUT_ARGS: ".args",
TEXT: "text", TEXTAREA: "textarea",
SELECT: "select",
BUTTON: "button",
SPACE: "space",
INPUT: "input", INPUT_ARGS: ".args", TEXT: "text", TEXTAREA: "textarea", SELECT: "select", BUTTON: "button",
SPACE: "space", BLOCK: "block", NONE: "none",
BR: "br",
TABLE: "table", TR: "tr", TH: "th", TD: "td",
DIV: "div",
IMG: "img",
CODE: "code",
SPAN: "span",
NONE: "none",
BLOCK: "block",
CODE: "code",
LABEL: "label",
VIDEO: "video",
FORM: "form",
FILE: "file",
LIST: "list",
ITEM: "item",
FORM: "form", FILE: "file",
LIST: "list", ITEM: "item", MENU: "menu",
}
const lang = {
STRING: "string",
OBJECT: "object",
FUNCTION: "function",
STRING: "string", OBJECT: "object", FUNCTION: "function",
ENTER: "Enter",
}
function shy(help, meta, list, cb) {
@ -219,26 +158,24 @@ function shy(help, meta, list, cb) {
}
}
cb = args[args.length-1] || function() {}
cb.help = next(lang.STRING) || ""
cb.meta = next(lang.OBJECT) || {}
cb.list = next(lang.OBJECT) || []
cb = args[args.length-1]||function() {}
cb.help = next(lang.STRING)||""
cb.meta = next(lang.OBJECT)|| {}
cb.list = next(lang.OBJECT)||[]
return cb
}; var _can_name = ""
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
if (typeof name == lang.OBJECT) { var Config = name; Config.panels = Config.panels||[], Config.main = Config.main||{}
meta.libs = ["/lib/base.js", "/lib/core.js", "/lib/misc.js", "/lib/page.js", "/lib/user.js"]
libs = [], meta.libs = ["/lib/base.js", "/lib/core.js", "/lib/misc.js", "/lib/page.js", "/lib/user.js"]
// 预加载
var Preload = Config.preload||[]
for (var i = 0; i < Config.panels.length; i++) { var panel = Config.panels[i]
panel && (Preload = Preload.concat(panel.list = panel.list || ["/panel/"+panel.name+".css", "/panel/"+panel.name+".js"]))
}; Preload = Preload.concat(Config.plugin, Config.main.list)
panel && (libs = libs.concat(panel.list = panel.list||["/panel/"+panel.name+".css", "/panel/"+panel.name+".js"]))
}; libs = libs.concat(Config.plugin, Config.main.list)
// 根模块
name = Config.name, can = {_follow: Config.name, _target: Config.target||document.body}
libs = Preload.concat(meta.libs, meta.volcano), cb = function(can) {
name = Config.name, can = {_follow: Config.name, _target: Config.target||document.body}, cb = function(can) {
can.onengine._init(can, can.Conf(Config), Config.panels, Config._init, can._target)
}, _can_name = "", can._root = can
}
@ -251,8 +188,6 @@ var Volcanos = shy("火山架", {iceberg: "/chat/", volcano: "/frame.js", args:
// 加载模块
for (var i = 0; i < cache.length; i++) { var sub = cache[i]
if (typeof cb == lang.FUNCTION && cb(can, name, sub)) { continue }
if (can[sub._name] && can[sub._name]._merge && can[sub._name]._merge(can, sub)) { continue }
if (sub._name == "onkeypop") { can[sub._name] = sub; continue }
!can[sub._name] && (can[sub._name] = {}); for (var k in sub) {
can[sub._name].hasOwnProperty(k) || (can[sub._name][k] = sub[k])
}
@ -271,7 +206,7 @@ var Volcanos = shy("火山架", {iceberg: "/chat/", volcano: "/frame.js", args:
},
request: function(event, option) { event = event||{}
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) { can.base.isUndefined(msg[key]) && msg.Option(key, value) }
can.core.List(arguments, function(option, index) { if (index == 0) { return }
can.base.isFunc(option.Option)? can.core.List(option.Option(), function(key) {
@ -280,8 +215,7 @@ var Volcanos = shy("火山架", {iceberg: "/chat/", volcano: "/frame.js", args:
}); return msg
},
set: function(name, key, value) {
var msg = can.request({}); msg.Option(key, value)
set: function(name, key, value) { var msg = can.request({}); msg.Option(key, value)
return can.search(msg._event, [can.base.Keys(name, "onimport", key)])
},
get: function(name, key) { return can.search({}, [can.base.Keys(name, "onexport", key)]) },
@ -291,8 +225,7 @@ var Volcanos = shy("火山架", {iceberg: "/chat/", volcano: "/frame.js", args:
}
if (_can_name) { // 加入缓存
meta.cache[_can_name] = meta.cache[_can_name]||[]
meta.cache[_can_name].push(can)
meta.cache[_can_name] = meta.cache[_can_name]||[], meta.cache[_can_name].push(can)
} else { // 加入队列
list.push(can)
}
@ -314,7 +247,7 @@ Volcanos.meta._load = function(url, cb) {
}
function cmd(tool) {
Volcanos({name: "chat", panels: [
{name: "cmd", help: "工作台", pos: "main", tool: tool},
{name: "cmd", help: "工作台", pos: chat.MAIN, tool: tool},
], main: {name: "cmd", list: []}, plugin: [
"/plugin/state.js",
"/plugin/input.js",

View File

@ -5,6 +5,5 @@
</head>
<body style="min-width:800px; min-height:600px; overflow:auto">
<script src="/proto.js"></script>
<script src="/frame.js"></script>
<script src="/publish/chrome/popup.js"></script>
</body>

View File

@ -1,5 +1,4 @@
Volcanos({name: "demo", iceberg: "http://localhost:9020/chat/", volcano: "/frame.js",
libs: ["/lib/base.js", "/lib/core.js", "/lib/misc.js", "/lib/page.js", "/lib/user.js"], panels: [
Volcanos({name: "demo", iceberg: "http://localhost:9020/chat/", panels: [
{name: "Header", help: "标题栏", pos: "head", state: ["time", "username"]},
{name: "Search", help: "搜索框", pos: "auto"},
{name: "River", help: "群聊组", pos: "left", action: ["create", "refresh"]},
@ -8,42 +7,39 @@ Volcanos({name: "demo", iceberg: "http://localhost:9020/chat/", volcano: "/frame
], main: {name: "Header", list: ["/publish/order.js"]}, plugin: [
"/plugin/state.js", "/plugin/input.js", "/plugin/table.js",
], river: {
"serivce": {name: "运营群", storm: {
"wx": {name: "公众号 wx", action: [
serivce: {name: "运营群", storm: {
wx: {name: "公众号 wx", action: [
{name: "微信公众号", help: "wx", index: "web.wiki.word", args: ["usr/icebergs/misc/wx/wx.shy"]},
]},
"mp": {name: "小程序 mp", action: [
mp: {name: "小程序 mp", action: [
{name: "微信小程序", help: "mp", index: "web.wiki.word", args: ["usr/icebergs/misc/mp/mp.shy"]},
]},
"lark": {name: "机器人 lark", action: [
lark: {name: "机器人 lark", action: [
{name: "飞书机器人", help: "lark", index: "web.wiki.word", args: ["usr/icebergs/misc/lark/lark.shy"]},
]},
"share": {name: "上下文 share", action: [
{name: "系统上下文", help: "shylinux/contexts", index: "web.wiki.word", args: ["usr/learning/社会/管理/20200724.shy"]},
]},
}},
"product": {name: "产品群", storm: {
"office": {name: "办公 office", action: [
product: {name: "产品群", storm: {
office: {name: "办公 office", action: [
{name: "feel", help: "影音媒体", index: "web.wiki.feel"},
{name: "draw", help: "思维导图", index: "web.wiki.draw"},
{name: "data", help: "数据表格", index: "web.wiki.data"},
{name: "plan", help: "计划任务", index: "web.team.plan"},
{name: "think", help: "智库", index: "web.wiki.word", args: ["usr/learning/"]},
{name: "index", help: "索引", index: "web.wiki.word", args: ["usr/learning/index.shy"]},
{name: "context", help: "编程", index: "web.wiki.word", args: ["usr/learning/自然/编程/index.shy"]},
{name: "context", help: "编程", index: "web.wiki.word", args: ["src/main.shy"]},
]},
"english": {name: "英汉 english", action: [
english: {name: "英汉 english", action: [
{name: "english", help: "英汉", index: "web.wiki.alpha.alpha", args: ["word", "hi"]},
{name: "chinese", help: "汉英", index: "web.wiki.alpha.alpha", args: ["line", "你好"]},
{name: "wubi", help: "五笔", index: "web.code.input.wubi", args: ["word", "wqvb"]},
{name: "wubi", help: "五笔", index: "web.code.input.wubi", args: ["line", "你好"]},
]},
"learning": {name: "学习 learning", action: [
learning: {name: "学习 learning", action: [
{name: "golang", help: "编程", index: "web.wiki.word", args: ["usr/golang-story/src/main.shy"]},
{name: "tmux", help: "粘贴", index: "web.code.tmux.text"},
{name: "study", help: "学习", index: "web.wiki.word", args: ["usr/learning/study.shy"]},
]},
"chrome": {name: "爬虫 chrome", action: [
chrome: {name: "爬虫 chrome", action: [
{name: "feel", help: "网页爬虫", index: "web.wiki.feel", args: ["spide/"], feature: {
display: "/plugin/local/wiki/feel.js",
height: 200, limit: 3,
@ -52,68 +48,69 @@ Volcanos({name: "demo", iceberg: "http://localhost:9020/chat/", volcano: "/frame
{name: "spided", help: "网页爬虫", index: "web.code.chrome.spide", args: location && location.protocol && location.protocol=="chrome-extension:"? ["1", "", "spide"]: ["1"]},
]},
}},
"project": {name: "研发群", storm: {
"studio": {name: "研发 studio", action: [
project: {name: "研发群", storm: {
studio: {name: "研发 studio", action: [
{name: "vimer", help: "编辑器", index: "web.code.vimer", args: ["src/", "main.go"]},
{name: "repos", help: "代码库", index: "web.code.git.status"},
{name: "plan", help: "任务表", index: "web.team.plan"},
{name: "contexts", help: "上下文", index: "web.wiki.word", args: ["src/main.shy"]},
{name: "ctx", help: "上下文", index: "web.wiki.word", args: ["src/main.shy"]},
]},
"cli": {name: "命令 cli", action: [
{name: "bash", help: "命令行", index: "web.wiki.word", args: ["usr/icebergs/misc/bash/bash.shy"]},
{name: "tmux", help: "命令行", index: "web.wiki.word", args: ["usr/icebergs/misc/tmux/tmux.shy"]},
{name: "git", help: "代码库", index: "web.wiki.word", args: ["usr/icebergs/misc/git/git.shy"]},
{name: "vim", help: "编辑器", index: "web.wiki.word", args: ["usr/icebergs/misc/vim/vim.shy"]},
{name: "ssh", help: "命令行", index: "web.wiki.word", args: ["usr/icebergs/base/ssh/ssh.shy"]},
{name: "zsh", help: "命令行", index: "web.wiki.word", args: ["usr/icebergs/misc/bash/zsh.shy"]},
]},
"web": {name: "网页 web", action: [
web: {name: "网页 web", action: [
{name: "HTML5", help: "浏览器", index: "web.wiki.word", args: ["usr/icebergs/misc/chrome/chrome.shy"]},
]},
"linux": {name: "系统 linux", action: [
cli: {name: "命令 cli", action: [
{name: "bash", help: "命令行", index: "web.wiki.word", args: ["usr/icebergs/misc/bash/bash.shy"]},
{name: "git", help: "代码库", index: "web.wiki.word", args: ["usr/icebergs/misc/git/git.shy"]},
{name: "vim", help: "编辑器", index: "web.wiki.word", args: ["usr/icebergs/misc/vim/vim.shy"]},
{name: "tmux", help: "命令行", index: "web.wiki.word", args: ["usr/icebergs/misc/tmux/tmux.shy"]},
]},
linux: {name: "系统 linux", action: [
{name: "idc", help: "平台", index: "web.wiki.word", args: ["usr/linux-story/idc/idc.shy"]},
{name: "iso", help: "系统", index: "web.wiki.word", args: ["usr/linux-story/iso/iso.shy"]},
{name: "iot", help: "设备", index: "web.wiki.word", args: ["usr/linux-story/iot/iot.shy"]},
{name: "cli", help: "命令", index: "web.wiki.word", args: ["usr/linux-story/cli/cli.shy"]},
{name: "linux", help: "系统", index: "web.wiki.word", args: ["usr/linux-story/src/main.shy"]},
]},
"nginx": {name: "代理 nginx", action: [
nginx: {name: "代理 nginx", action: [
{name: "nginx", help: "代理", index: "web.wiki.word", args: ["usr/nginx-story/src/main.shy"]},
]},
"context": {name: "编程 context", action: [
{name: "grafana", help: "可视化", index: "web.wiki.word", args: ["usr/golang-story/src/grafana/grafana.shy"]},
{name: "gogs", help: "代码库", index: "web.wiki.word", args: ["usr/golang-story/src/gogs/gogs.shy"]},
context: {name: "编程 context", action: [
{name: "golang", help: "编程", index: "web.wiki.word", args: ["usr/golang-story/src/main.shy"]},
]},
"redis": {name: "缓存 redis", action: [
redis: {name: "缓存 redis", action: [
{name: "redis", help: "缓存", index: "web.wiki.word", args: ["usr/redis-story/src/main.shy"]},
{name: "kafka", help: "队列", index: "web.wiki.word", args: ["usr/redis-story/src/kafka/kafka.shy"]},
]},
"mysql": {name: "数据 mysql", action: [
mysql: {name: "存储 mysql", action: [
{name: "mysql", help: "数据存储", index: "web.wiki.word", args: ["usr/mysql-story/src/main.shy"]},
{name: "clickhouse", help: "数据存储", index: "web.wiki.word", args: ["usr/mysql-story/src/clickhouse/clickhouse.shy"]},
]},
}},
"profile": {name: "测试群", storm: {
"release": {name: "发布 release", index: [
profile: {name: "测试群", storm: {
release: {name: "发布 release", index: [
"web.code.publish", "web.code.compile", "web.code.autogen",
]},
"research": {name: "测试 research", index: [
research: {name: "测试 research", index: [
"web.code.favor", "web.code.bench", "web.code.pprof",
"web.code.case",
]},
}},
"operate": {name: "运维群", storm: {
"cli": {name: "系统 cli", index: [
"qrcode", "daemon", "system", "runtime",
]},
"web": {name: "应用 web", index: [
"spide", "route", "share", "dream",
]},
"aaa": {name: "权限 aaa", index: [
operate: {name: "运维群", storm: {
aaa: {name: "权限 aaa", index: [
"user", "sess", "role", "totp",
]},
"nfs": {name: "文件 nfs", index: [
web: {name: "应用 web", index: [
"spide", "route", "share", "dream",
]},
cli: {name: "系统 cli", index: [
"qrcode", "daemon", "system", "runtime",
]},
nfs: {name: "文件 nfs", index: [
"cat", "dir", "tail", "trash",
]},
"ssh": {name: "脚本 ssh", index: [
ssh: {name: "脚本 ssh", index: [
"connect", "session", "service", "channel",
"source", "screen",
]},
}},
},