1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-25 08:48:06 +08:00
volcanos/panel/header.js
2022-07-04 10:36:13 +08:00

266 lines
12 KiB
JavaScript

Volcanos(chat.ONIMPORT, {help: "导入数据", list: [], _init: function(can, msg, cb, target) {
can.Conf(aaa.USERNICK, msg.Option(aaa.USERNICK)||msg.Option(ice.MSG_USERNICK)||msg.Option(ice.MSG_USERNAME)||can.Conf(aaa.USERNICK))
can.user.info.usernick = can.Conf(aaa.USERNICK)
can.user.info.avatar = msg.Option(aaa.AVATAR)
can.ondaemon._init(can)
can.onlayout.topic(can, can.Conf("topic"))
if (can.user.mod.isCmd) {
can.onmotion.hidden(can, can._fields)
can.page.ClassList.add(can, can._root._target, "simple")
}
can.onmotion.clear(can)
can.onimport._agent(can, msg, target)
can.onimport._grant(can, msg, target)
if (can.Conf("display") != "simple") {
can.onimport._title(can, msg, target)
can.onimport._state(can, msg, target)
can.onimport._search(can, msg, target)
can.onimport._background(can, msg, target)
can.onimport._avatar(can, msg, target)
can.onimport._menus(can, msg, target)
}
can.base.isFunc(cb) && cb(msg)
},
_agent: function(can, msg, target) { if (!msg.Option(nfs.SCRIPT)) { return }
can.require(can.base.Obj(msg.Option(nfs.SCRIPT)), function(can) { can.onaction.source(can, msg) })
},
_grant: function(can, msg, target) {
if (can.misc.Search(can, chat.GRANT)) {
if (can.user.confirm(chat.GRANT+ice.SP+can.misc.Search(can, chat.GRANT))) {
can.run(event, [ctx.ACTION, chat.GRANT, web.SPACE, can.misc.Search(can, chat.GRANT)])
}
can.misc.Search(can, chat.GRANT, "")
}
},
_title: function(can, msg, target) {
!can.user.isMobile && can.core.List(can.base.getValid(msg.result, can.Conf(chat.TITLE)||["shylinux.com/x/contexts"]), function(item) {
can.page.Append(can, target, [{view: [chat.TITLE, html.DIV, item], title: "返回主页", onclick: function(event) {
can.onaction.title(event, can)
}, onmouseenter: function(event) { var list = msg.Table()
can.user.carte(event, can, {}, can.core.List(list, function(item) { return item.name }), function(event, item, meta, index) {
event.shiftKey? can.user.open(list[index].path): can.user.jumps(list[index].path)
})
}}])
})
},
_state: function(can, msg, target) {
can.core.List(can.base.Obj(msg.Option(chat.STATE)||can.Conf(chat.STATE), [mdb.TIME, aaa.USERNICK]), function(item) {
if (item == aaa.AVATAR ) { if (can.user.isLocalFile) { return }
can.page.Append(can, target, [{view: can.base.join([chat.STATE, item]), list: [{img: ice.SP}], onmouseenter: function(event) {
if (msg.Option(aaa.AVATAR).indexOf("http") == 0) {
can.onaction.carte(event, can, [can.page.Format(html.IMG, msg.Option(aaa.AVATAR), 160)])
} else {
can.onaction.carte(event, can, [can.page.Format(html.IMG, "/share/local/avatar", 160)])
}
}}]); return
}
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 == mdb.TIME && can.onimport._time(can, target) }}])
})
},
_search: function(can, msg, target) {
var ui = can.onappend.input(can, {type: html.TEXT, name: mdb.SEARCH, onkeydown: function(event) {
can.onkeymap.input(event, can); switch (event.key) {
case lang.ENTER: can.onengine.signal(can, "onopensearch", can.request(event, {type: "*", word: event.target.value}))
}
}}, "", target, "title search").parentNode
can.page.Append(can, target, [{type: "search", list: [{view: ["menu", "div", can.user.trans(can, "search")], onclick: function() {
can.onengine.signal(can, "onopensearch", can.request(event, {type: "*", word: ""}))
}}] }])
can.user.isMobile && can.page.style(can, ui, {float: html.RIGHT})
},
_background: function(can, msg) {
if (can.Conf("background") == "_") { return }
if (can.user.isExtension || can.user.isLocalFile) { return }
msg.Option(aaa.BACKGROUND) && can.onlayout.background(can, "/share/local/background", can._root._target)
},
_avatar: function(can, msg) { if (can.user.isExtension || can.user.isLocalFile) { return } if (!msg.Option(aaa.AVATAR)) { return }
if (msg.Option(aaa.AVATAR).indexOf("http") == 0) {
can.page.Modify(can, "div.state.avatar>img", {src: msg.Option(aaa.AVATAR)})
} else {
can.page.Modify(can, "div.state.avatar>img", {src: "/share/local/avatar"})
}
},
_menus: function(can, msg, target) {
can.setHeaderMenu(can.user.mod.isPod||can.user.isExtension||can.user.isMobile? [ctx.CONFIG]:
can.base.Obj(msg.Option(chat.MENUS)||can.Conf(chat.MENUS), can.onaction._menus), function(event, button) {
can.core.CallFunc(can.onaction[button]||function(event, can) {
can.run(event, [button], function(msg) { can.user.toast(can, "执行成功", can.user.trans(can, button)) })
}, {event: event, can: can, button: button})
})
},
_time: function(can, target) {
can.core.Timer({interval: 500}, function() { can.onimport.time(can, target) })
can.onappend.figure(can, {action: "date", style: {"min-width": 306}}, target, function(sub) {
can.get("Action", "size", function(msg, top) {
can.page.style(can, sub._target, {top: top, right: 0, left: null})
})
}), target.onmouseenter = target.click
},
time: function(can, target) { can.onlayout.topic(can)
target.innerHTML = can.user.time(can, null, "%w %H:%M:%S")
},
topic: function(can, topic) { can.onlayout.topic(can, can._topic = topic) },
background: function(event, can, url) { if (can.user.isExtension || can.user.isLocalFile) { return }
can.run(event, [ctx.ACTION, aaa.BACKGROUND, url], function(msg) { can.onimport._background(can, msg) })
},
avatar: function(event, can, url) { if (can.user.isExtension || can.user.isLocalFile) { return }
can.run(event, [ctx.ACTION, aaa.AVATAR, url], function(msg) { can.onimport._avatar(can, msg) })
},
menu: function(can, cmds, cb, trans) {
return can.page.Append(can, can._output, [{type: cmds[0], list: can.core.List(cmds.slice(1), function(item) {
if (can.base.isString(item)) {
return {view: [html.MENU, html.DIV, can.user.trans(can, item, trans)], onclick: function(event) {
can.base.isFunc(cb) && cb(event, item, cmds)
}}
} else if (can.base.isArray(item)) {
var list = can.core.List(item, function(value, index) { return can.user.trans(can, value, trans) })
return {view: [html.MENU, html.DIV, can.user.trans(can, list[0], trans)], onmouseenter: function(event) {
can.onaction.carte(event, can, list.slice(1), function(event, button, meta, index) {
can.base.isFunc(cb) && cb(event, item[index+1], item)
}, trans)
}}
} else if (can.base.isObject(item)) {
return item
}
}) }]).first
},
})
Volcanos(chat.ONPLUGIN, {help: "注册插件", list: [],
"topic": shy("主题", {
"demo": function(can, msg, cmds) { can.onlayout.topic(can, cmds[0]) },
}, ["topic:select=white,black", "run:button", "demo:button"], function(can, msg, cmds) {
can.onlayout.topic(can, cmds[0])
}),
})
Volcanos(chat.ONACTION, {help: "交互数据", list: [], _init: function(can, cb, target) {
can.base.isFunc(cb) && cb()
},
_menus: [["setting", chat.BLACK, chat.WHITE, chat.PRINT, code.WEBPACK, "toimage", ctx.CONFIG]],
_trans: {
"search": "搜索",
"setting": "设置",
"black": "黑色主题",
"white": "白色主题",
"print": "打印主题",
"webpack": "打包页面",
"toimage": "生成图片",
"config": "拉取配置",
"shareuser": "共享用户",
"setnick": "设置昵称",
"password": "修改密码",
"language": "语言地区", "chinese": "中文",
"clear": "清除背景",
"logout": "退出登录",
},
onmain: function(can, msg) {
can.run({}, [], function(msg) {
if (!can.Conf(aaa.USERNICK, msg.Option(ice.MSG_USERNICK)||msg.Option(ice.MSG_USERNAME))) {
msg.Option(chat.SSO)? can.user.jumps(msg.Option(chat.SSO)): can.user.login(can, function() {
can.onengine.signal(can, chat.ONMAIN, msg)
}, msg.Option(aaa.LOGIN), msg.Option("login.dev"))
return // 登录认证
}
can.base.Copy(can.onaction._trans, can.base.Obj(msg.Option(chat.TRANS), {}))
can.onimport._init(can, msg, function(msg) { can.onengine.signal(can, chat.ONLOGIN, msg) }, can._output)
})
},
onsearchfocus: function(can) { can.page.Select(can, can._output, ["div.search", html.INPUT], function(target) { target.focus() }) },
onwebpack: function(can, msg) { can.onaction[code.WEBPACK](msg._event, can) },
onstorm_select: function(can, msg, river, storm) { can.Conf(chat.RIVER, river), can.Conf(chat.STORM, storm) },
onaction_cmd: function(can, msg) { can.onmotion.hidden(can) },
title: function(event, can) {
var args = {}; can.core.List([chat.TITLE, chat.TOPIC, chat.LAYOUT], function(key) {
var value = can.misc.Search(can, key); value && (args[key] = value)
})
can.user.jumps(can.misc.MergeURL(can, args, true))
},
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, [chat.WHITE, button])
can.setRiver(html.HEIGHT, -1), can.setAction(html.HEIGHT, -1)
},
webpack: function(event, can) {
can.user.input(event, can, [{name: 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", ice.MSG_SESSID, ""], function(key) { delete(msg[key]) })
})
var msg = can.request(event, {
topic: can._topic, layout: can.getAction(chat.LAYOUT),
river: can.Conf(chat.RIVER), storm: can.Conf(chat.STORM),
name: meta.name, content: JSON.stringify(Volcanos.meta.pack),
args: "name,topic,layout,river,storm",
})
var toast = can.user.toastProcess(can, "打包中...", code.WEBPACK)
can.runAction(event, code.WEBPACK, [], function(msg) {
toast.close(), can.user.toastSuccess(can, "打包成功", code.WEBPACK)
can.user.download(can, "/share/local/"+msg.Result(), name, "html")
})
})
},
toimage: function(event, can, button) {
can.onmotion.toimage(event, can, can.user.title(), can._root._target)
},
config: function(event, can) {
can.user.input(event, can, [{name: "scope", value: "etc/local.shy"}], function(ev, button, meta, list, args) {
can.runAction(event, ctx.CONFIG, args, function(msg) { can.user.jumps(msg.Result()) })
})
},
carte: function(event, can, list, cb, trans) { can.user.carte(event, can, can.onaction, list, cb) },
share: function(event, can, args) {
can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE].concat(args||[],
[chat.RIVER, can.Conf(chat.RIVER), chat.STORM, can.Conf(chat.STORM)]))
},
usernick: function(event, can) {
can.user.mod.isPod || can.user.isExtension || can.user.isLocalFile || can.onaction.carte(event, can, ["shareuser", "setnick", "password", [aaa.LANGUAGE, aaa.CHINESE, aaa.ENGLISH], cli.CLEAR, aaa.LOGOUT])
},
shareuser: function(event, can) { can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE, mdb.TYPE, aaa.LOGIN]) },
setnick: function(event, can) {
var ui = can.user.input(event, can, [{name: aaa.USERNICK, value: can.Conf(aaa.USERNICK)}], function(ev, button, data, list, args) {
can.run(event, [aaa.USERNICK, list[0]], function(msg) {
can.page.Select(can, can._output, can.core.Keys(html.DIV, aaa.USERNICK), function(item) {
can.page.Modify(can, item, can.Conf(aaa.USERNICK, list[0]))
}), can.user.toastSuccess(can)
}, true)
})
can.user.isMobile && can.page.style(can, ui._target, {top: 40, right: 0, left: ""})
},
password: function(event, can) {
var ui = can.user.input(event, can, [{name: html.PASSWORD, type: html.PASSWORD, action: ice.AUTO}, {name: html.PASSWORD, type: html.PASSWORD, action: ice.AUTO}], function(ev, button, data, list, args) {
if (list[0] != list[1]) {
can.user.toast(can, "密码不一致")
ui.focus()
return true
}
can.run(event, [aaa.PASSWORD, list[0]], function(msg) {
can.user.toastSuccess(can)
}, true)
})
can.user.isMobile && can.page.style(can, ui._target, {top: 40, right: 0, left: ""})
},
chinese: function(event, can) { can.misc.Search(can, aaa.LANGUAGE, "zh") },
english: function(event, can) { can.misc.Search(can, aaa.LANGUAGE, "en") },
clear: function(event, can) { can.onimport.background(event, can, ""), can.onimport.avatar(event, can, ""), can.user.reload(true) },
logout: function(event, can) { can.user.logout(can) },
})
Volcanos(chat.ONEXPORT, {help: "导出数据", list: [],
height: function(can) { return can._target.offsetHeight },
topic: function(can) { return can._topic },
})