1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-25 16:58:06 +08:00
This commit is contained in:
IT 老营长 @云轩领航-创始人 2023-09-10 17:14:42 +08:00
parent 7d4ce180dd
commit 1cb6f755e9
5 changed files with 57 additions and 18 deletions

View File

@ -79,7 +79,7 @@ Volcanos(chat.ONENGINE, {_init: function(can, meta, list, cb, target) {
}, },
}) })
Volcanos(chat.ONDAEMON, {_init: function(can, name) { if (can.user.isLocalFile) { return } Volcanos(chat.ONDAEMON, {_init: function(can, name) { if (can.user.isLocalFile) { return }
can.misc.WSS(can, {type: html.CHROME, name: can.misc.Search(can, cli.DAEMON)||name||"", text: location.pathname, module: "shylinux.com/x/volcanos", version: can.base.trimPrefix(window._version, "?_v=")}, function(event, msg, cmd, arg, cb) { can.misc.WSS(can, {type: html.CHROME, name: can.misc.Search(can, cli.DAEMON)||name||""}, function(event, msg, cmd, arg, cb) {
var sub = can.ondaemon._list[msg.Option(ice.MSG_TARGET)]||can; can.base.isFunc(sub.ondaemon[cmd])? var sub = can.ondaemon._list[msg.Option(ice.MSG_TARGET)]||can; can.base.isFunc(sub.ondaemon[cmd])?
can.core.CallFunc(sub.ondaemon[cmd], {can: can, msg: msg, sub: sub, cmd: cmd, arg: arg, cb: cb}): can.core.CallFunc(sub.ondaemon[cmd], {can: can, msg: msg, sub: sub, cmd: cmd, arg: arg, cb: cb}):
can.onengine._search({}, can, msg, can, [chat._SEARCH, cmd].concat(arg), cb) can.onengine._search({}, can, msg, can, [chat._SEARCH, cmd].concat(arg), cb)
@ -267,7 +267,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
}, },
field: function(can, type, item, target) { type = type||html.STORY, item = item||{} field: function(can, type, item, target) { type = type||html.STORY, item = item||{}
var name = can.core.Split(item.nick||item.name||"").pop()||""; can.base.isIn(name, tcp.SERVER, tcp.CLIENT, web.STUDIO) && (name = (item.index||"").split(".").slice(-2).join(".")), name = can.core.Keys(item.space, name) var name = can.core.Split(item.nick||item.name||"").pop()||""; can.base.isIn(name, tcp.SERVER, tcp.CLIENT, web.STUDIO, mdb.SEARCH) && (name = (item.index||"").split(".").slice(-2).join(".")), name = can.core.Keys(item.space, name)
var title = item.help && item.help != name && !can.user.isEnglish(can)? name+"("+can.core.Split(item.help)[0]+")": name var title = item.help && item.help != name && !can.user.isEnglish(can)? name+"("+can.core.Split(item.help)[0]+")": name
target = can.base.isFunc(target)? target(): target target = can.base.isFunc(target)? target(): target
return can.page.Append(can, target||can._output, [{view: [type, html.FIELDSET], list: [{type: html.LEGEND, list: [item.icon && {icon: item.icon}, {text: title}]}, {view: [html.OPTION, html.FORM]}, html.ACTION, html.OUTPUT, html.STATUS]}]) return can.page.Append(can, target||can._output, [{view: [type, html.FIELDSET], list: [{type: html.LEGEND, list: [item.icon && {icon: item.icon}, {text: title}]}, {view: [html.OPTION, html.FORM]}, html.ACTION, html.OUTPUT, html.STATUS]}])
@ -509,6 +509,7 @@ Volcanos(chat.ONLAYOUT, {_init: function(can, target) { target = target||can._ro
can.user.isMobile && can.user.isLandscape() || can.page.style(can, document.body, kit.Dict(html.OVERFLOW, html.HIDDEN)) can.user.isMobile && can.user.isLandscape() || can.page.style(can, document.body, kit.Dict(html.OVERFLOW, html.HIDDEN))
}, },
expand: function(can, target, width) { var n = parseInt(target.offsetWidth/(width+20)); width = target.offsetWidth/n - 20 expand: function(can, target, width) { var n = parseInt(target.offsetWidth/(width+20)); width = target.offsetWidth/n - 20
if (width+20 >= target.offsetWidth) { n = 1, width = target.offsetWidth - 20 }
can.page.SelectChild(can, target, html.DIV_ITEM, function(target) { can.page.styleWidth(can, target, width) }) can.page.SelectChild(can, target, html.DIV_ITEM, function(target) { can.page.styleWidth(can, target, width) })
}, },
background: function(can, url, target) { can.page.style(can, target||can._root._target, "background-image", url == "" || url == "void"? "": 'url("'+url+'")') }, background: function(can, url, target) { can.page.style(can, target||can._root._target, "background-image", url == "" || url == "void"? "": 'url("'+url+'")') },

View File

@ -363,6 +363,46 @@ div.carte div.item { background-color:var(--carte-bg-color); }
div.carte div.item:hover { background-color:var(--hover-bg-color); } div.carte div.item:hover { background-color:var(--hover-bg-color); }
div.carte div.item.danger:hover { background-color:var(--danger-bg-color); color:var(--danger-fg-color); } div.carte div.item.danger:hover { background-color:var(--danger-bg-color); color:var(--danger-fg-color); }
div.carte div.item.notice:hover { background-color:var(--notice-bg-color); color:var(--notice-fg-color); } div.carte div.item.notice:hover { background-color:var(--notice-bg-color); color:var(--notice-fg-color); }
/* mobile */
body.mobile table.content { width:100%; }
body.mobile form.option>div.item { margin:0; }
body.mobile form.option>div.item.button>input { display:none; }
body.mobile fieldset>div.status { max-height:32px; overflow:hidden; }
body.mobile fieldset:not(.panel):not(.input):not(.play)>div.action>div:not(.icons) { display:none; }
body.mobile fieldset.plugin:not(.float):not(.full):not(.cmd)>form.option>div.icon:not(.delete) { display:block; }
body.mobile fieldset.plugin:not(.float):not(.full):not(.cmd)>form.option>div.button>span.icon { display:block; }
body.mobile fieldset.plugin:not(.float):not(.full):not(.cmd)>div.action>div.button>span.icon { display:inline-block; }
body.mobile fieldset.plugin:not(.float):not(.full):not(.cmd)>div.action>div.button>input { display:none; }
body.mobile fieldset.plugin:not(.float):not(.full):not(.cmd) { margin:10px 0; }
body.mobile { --header-height:48px; }
body.mobile fieldset.Header { padding:0; width:100%; position:fixed; top:0; }
body.mobile fieldset.Header>div.output { font-size:1.4rem; line-height:var(--header-height); height:var(--header-height); }
body.mobile fieldset.Header div.output div.item.text.title.search { display:none; }
body.mobile fieldset.Header div.output div.item:not(.avatar) { padding:0px 10px; }
body.mobile fieldset.Search>div.action>div.item.filter>input { width:100%; }
body.mobile fieldset.Search>div.action>div.item.filter>span { position:absolute; }
body.mobile fieldset.Search>div.action>div.item.filter { width:100%; position:relative; }
body.mobile fieldset.Search>div.output>div.content { height:400px; }
body.mobile fieldset.River { position:fixed; top:var(--header-height); z-index:100; }
body.mobile fieldset.River>div.output { font-size:1.4rem; min-width:240px; }
body.mobile fieldset.Action { margin-top:var(--header-height); }
body.mobile fieldset.Action.cmd { margin-top:0; }
body.mobile fieldset.Action>div.output { overflow-x:hidden; }
body.mobile fieldset.Action>div.output>fieldset.plugin:not(.float):not(.full):not(.cmd)>legend { margin:10px; }
body.mobile fieldset.Action>div.output>fieldset.plugin:not(.output):not(.float):not(.full):not(.cmd) { padding:0px; }
body.mobile fieldset.Footer { display:none; }
body.mobile.landscape fieldset.Header { position:unset; }
body.mobile.landscape fieldset.Action { margin-top:0; }
body.mobile fieldset.word.float>div.output>div.project { top:32px; }
body.mobile fieldset.word>div.output>fieldset.story>form.option>div.text { display:none; }
body.mobile fieldset.word>div.output { overflow-x:hidden; }
body.mobile fieldset.web.code.inner.cmd>div.output { overflow:hidden; }
body.mobile fieldset.web.wiki.portal>div.output>div.layout { display:block; }
body.mobile fieldset.web.wiki.portal>div.output>div.layout>div.nav { padding:10px; height:unset; }
body.mobile fieldset.web.wiki.portal>div.output>div.layout>div.main { padding:10px; height:unset; min-width:unset; }
body.mobile fieldset.web.wiki.portal>div.output>div.header div.story[data-name=navmenu] div.item { padding:10px; }
body.mobile fieldset.word>div.output div.story.flex { display:block; }
body.mobile fieldset.word>div.output div.story.flex>* { padding:unset; }
/* print */ /* print */
body.print { -webkit-filter: grayscale(100%); } body.print { -webkit-filter: grayscale(100%); }
body.print { background-color:white; color:black; } body.print { background-color:white; color:black; }

View File

@ -102,10 +102,11 @@ Volcanos("misc", {
} try { xhr.send(data) } catch(e) { can.misc.Warn(e), cbs && cbs(e) } } try { xhr.send(data) } catch(e) { can.misc.Warn(e), cbs && cbs(e) }
}, },
WSS: function(can, args, cb, onopen, onclose, onerror, _msg) { if (can.user.isIE) { return } WSS: function(can, args, cb, onopen, onclose, onerror, _msg) { if (can.user.isIE) { return }
var msg = can.request(); can.page.exportValue(can, msg) var msg = can.request(); can.page.exportValue(can, msg), args[ice.MSG_THEME] = can.getHeaderTheme()
can.core.List(msg.Option(), function(value) { args[value] = msg.Option(value) }) can.core.List(msg.Option(), function(value) { args[value] = msg.Option(value) })
var url = location.protocol.replace(ice.HTTP, "ws")+"//"+location.host+"/space/" var url = location.protocol.replace(ice.HTTP, "ws")+"//"+location.host+"/space/"
if (url.indexOf(html.CHROME) == 0) { url = "ws://localhost:9020/space/" } if (url.indexOf(html.CHROME) == 0) { url = "ws://localhost:9020/space/" }
args.text = location.pathname+location.search, args.module = "shylinux.com/x/volcanos", args.version = can.base.trimPrefix(window._version, "?_v=")
try { var socket = new WebSocket(can.base.MergeURL(url, args)); _msg = _msg || can.request()._caller() } catch {} try { var socket = new WebSocket(can.base.MergeURL(url, args)); _msg = _msg || can.request()._caller() } catch {}
can._socket = socket, socket.onclose = function() { can.misc.Log(html.WSS, cli.CLOSE, args) can._socket = socket, socket.onclose = function() { can.misc.Log(html.WSS, cli.CLOSE, args)
can.base.isFunc(onclose)? onclose(socket): can.core.Timer(can.base.random(3000, 100), function() { can.base.isFunc(onclose)? onclose(socket): can.core.Timer(can.base.random(3000, 100), function() {
@ -127,6 +128,7 @@ Volcanos("misc", {
can.core.CallFunc(cb, {event: event, msg: msg, cmd: msg.detail[0], arg: msg.detail.slice(1), cb: function() { msg.Reply() }}) can.core.CallFunc(cb, {event: event, msg: msg, cmd: msg.detail[0], arg: msg.detail.slice(1), cb: function() { msg.Reply() }})
} catch (e) { can.misc.Warn(e), msg.Reply() } } catch (e) { can.misc.Warn(e), msg.Reply() }
}) } }) }
return socket
}, },
Resource(can, path, pod) { Resource(can, path, pod) {
if (path.indexOf(nfs.PS) == 0 || path.indexOf(ice.HTTP) == 0) { return path } if (path.indexOf(nfs.PS) == 0 || path.indexOf(ice.HTTP) == 0) { return path }

View File

@ -246,13 +246,13 @@ Volcanos("user", {
}) })
can.misc.CookieSessid(can, "") can.misc.CookieSessid(can, "")
var ui = can.onappend.tabview(can, { var ui = can.onappend.tabview(can, {
"扫码授权": function(target) { can.misc.WSS(can, {type: aaa.LOGIN, name: "", "sess.theme": can.getHeaderTheme()}, function(cmd, arg) { "扫码授权": function(target) { var socket = can.misc.WSS(can, {type: aaa.LOGIN}, function(cmd, arg) {
if (cmd == cli.PWD) { var _cmd = " space login "+arg[0]; return can.page.Modify(can, target, arg[2]), can.page.Append(can, target, [ if (cmd == cli.PWD) { var _cmd = " space login "+arg[0]; return can.page.Modify(can, target, arg[2]), can.page.Append(can, target, [
{text: "<br/>或命令授权: "+_cmd, title: "点击复制,并后台执行此命令,即可登录", style: {cursor: "copy"}, onclick: function() { can.user.copy(event, can, _cmd) }}, {text: "<br/>或命令授权: "+_cmd, title: "点击复制,并后台执行此命令,即可登录", style: {cursor: "copy"}, onclick: function() { can.user.copy(event, can, _cmd) }},
].concat(_sso)), can.onmotion.delay(can, function() { layout() }, 10) } ].concat(_sso)), can.onmotion.delay(can, function() { layout() }, 10) }
if (cmd == ice.MSG_SESSID) { if (cmd == ice.MSG_SESSID) { can.onmotion.delay(can, function() { socket.close() })
if (!can.misc.CookieSessid(can, arg[0])) { can.user.info.sessid = arg[0] } if (!can.misc.CookieSessid(can, arg[0])) { can.user.info.sessid = arg[0] }
return can.page.Remove(can, ui._target), can.base.isFunc(cb) && cb() return can.page.Remove(can, ui._target), can.base.isFunc(cb) && cb(), cb = null
} }
}) }, }) },
"密码登录": function(target) { "密码登录": function(target) {

View File

@ -15,8 +15,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) {
}) }, }) },
_avatar: function(can, msg) { can.user.isExtension || can.user.isLocalFile || can.page.Modify(can, "div.state.avatar>img", {src: can.onexport.avatar(can)}) }, _avatar: function(can, msg) { can.user.isExtension || can.user.isLocalFile || can.page.Modify(can, "div.state.avatar>img", {src: can.onexport.avatar(can)}) },
_background: function(can, msg) { if (can.user.isExtension || can.user.isLocalFile) { return } _background: function(can, msg) { if (can.user.isExtension || can.user.isLocalFile) { return }
// can.onlayout.background(can, can.onexport.background(can)) window.parent == window? can.onlayout.background(can, can.onexport.background(can)): can.page.style(can, document.body, html.BACKGROUND_COLOR, "transparent")
// window.parent == window? can.onlayout.background(can, can.onexport.background(can)): can.page.style(can, document.body, html.BACKGROUND_COLOR, "transparent")
}, },
_search: function(can, msg, target) { _search: function(can, msg, target) {
can._search = can.onappend.input(can, {type: html.TEXT, icon: icon.SEARCH, name: mdb.SEARCH, value: can.misc.Search(can, "_search"), onkeydown: function(event) { can.onkeymap.input(event, can) can._search = can.onappend.input(can, {type: html.TEXT, icon: icon.SEARCH, name: mdb.SEARCH, value: can.misc.Search(can, "_search"), onkeydown: function(event) { can.onkeymap.input(event, can)
@ -58,14 +57,13 @@ Volcanos(chat.ONACTION, {_init: function(can) {
function show(msg) { var p = can.misc.Search(can, "redirect_uri") function show(msg) { var p = can.misc.Search(can, "redirect_uri")
if (location.pathname == "/login" && p) { return location.replace(can.base.MergeURL(p, ice.MSG_SESSID, can.misc.CookieSessid(can))) } if (location.pathname == "/login" && p) { return location.replace(can.base.MergeURL(p, ice.MSG_SESSID, can.misc.CookieSessid(can))) }
can.user.info.usernick = can.Conf(aaa.USERNICK), can.user.info.userrole = msg.Option(ice.MSG_USERROLE), can.user.info.avatar = msg.Option(aaa.AVATAR), can.user.info.background = msg.Option(aaa.BACKGROUND) can.user.info.usernick = can.Conf(aaa.USERNICK), can.user.info.userrole = msg.Option(ice.MSG_USERROLE), can.user.info.avatar = msg.Option(aaa.AVATAR), can.user.info.background = msg.Option(aaa.BACKGROUND)
can.user.info.repos = msg.Option("spide.hub") can.user.info.email = msg.Option(aaa.EMAIL), can.user.info.repos = msg.Option(nfs.REPOS)
can.user.info.email = msg.Option("email")
msg.Option(nfs.SCRIPT) && can.require(can.base.Obj(msg.Option(nfs.SCRIPT)), function(can) { can.onaction.source(can, msg) }) msg.Option(nfs.SCRIPT) && can.require(can.base.Obj(msg.Option(nfs.SCRIPT)), function(can) { can.onaction.source(can, msg) })
lang(msg, function() { can.onmotion.clear(can), can.onimport._init(can, can.request(), can._output), can.onengine.signal(can, chat.ONLOGIN) }) lang(msg, function() { can.onmotion.clear(can), can.onimport._init(can, can.request(), can._output), can.onengine.signal(can, chat.ONLOGIN) })
} }
can.run(can.request({}, {_method: web.GET}), [], function(msg) { lang(msg) can.run(can.request({}, {_method: web.GET}), [], function(msg) { lang(msg)
can.require(can.core.List(msg["theme.list"], function(item) { return "src/template/web.chat.header/theme/"+item })) can.require(can.core.List(msg["theme.list"], function(item) { return "src/template/web.chat.header/theme/"+item }))
can.onaction._menus[1] = [chat.THEME, ice.AUTO].concat(can.core.List(msg["theme.list"], function(item) { if (item == "mobile.css") { return } return can.base.trimSuffix(item, ".css") })) can.onaction._menus[1] = [chat.THEME, ice.AUTO].concat(can.core.List(msg["theme.list"], function(item) { return can.base.trimSuffix(item, ".css") }))
can.onaction._menus[2] = [aaa.LANGUAGE, ice.AUTO].concat(can.core.List(msg["language.list"], function(item) { return can.base.trimSuffix(item, ".js") })) can.onaction._menus[2] = [aaa.LANGUAGE, ice.AUTO].concat(can.core.List(msg["language.list"], function(item) { return can.base.trimSuffix(item, ".js") }))
if (can.base.beginWith(location.pathname, "/wiki/portal/", "/chat/cmd/web.wiki.portal/", "/chat/cmd/web.chat.oauth.client", "/chat/pod/20230511-golang-story/cmd/web.code.gitea.client")) { return show(msg) } if (can.base.beginWith(location.pathname, "/wiki/portal/", "/chat/cmd/web.wiki.portal/", "/chat/cmd/web.chat.oauth.client", "/chat/pod/20230511-golang-story/cmd/web.code.gitea.client")) { return show(msg) }
if (location.pathname == "/" && can.base.beginWith(msg.Option(ice.MAIN)||"", "/wiki/portal/", "/chat/cmd/web.wiki.portal/")) { return show(msg) } if (location.pathname == "/" && can.base.beginWith(msg.Option(ice.MAIN)||"", "/wiki/portal/", "/chat/cmd/web.wiki.portal/")) { return show(msg) }
@ -98,7 +96,7 @@ Volcanos(chat.ONACTION, {_init: function(can) {
shareuser: function(event, can) { can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE, mdb.TYPE, aaa.LOGIN, mdb.NAME, can.user.title(), mdb.TEXT, location.href]) }, shareuser: function(event, can) { can.user.share(can, can.request(event), [ctx.ACTION, chat.SHARE, mdb.TYPE, aaa.LOGIN, mdb.NAME, can.user.title(), mdb.TEXT, location.href]) },
toimage: function(event, can) { can.onmotion.clearCarte(can), can.user.toimage(can, can.user.title(), can._target.parentNode) }, toimage: function(event, can) { can.onmotion.clearCarte(can), can.user.toimage(can, can.user.title(), can._target.parentNode) },
webpack: function(event, can) { can.onengine.signal(can, chat.ONWEBPACK, can.request(event)) }, webpack: function(event, can) { can.onengine.signal(can, chat.ONWEBPACK, can.request(event)) },
setnick: function(event, can) { can.user.input(event, can, [{name: aaa.USERNICK, value: can.Conf(aaa.USERNICK)}], function(list) { can.runAction(event, aaa.USERNICK, [list[0]], function(msg) { usernick: function(event, can) { can.user.input(event, can, [{name: aaa.USERNICK, value: can.Conf(aaa.USERNICK)}], function(list) { can.runAction(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) 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)
}) }) }, }) }) },
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(list) { 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(list) {
@ -111,20 +109,18 @@ Volcanos(chat.ONACTION, {_init: function(can) {
can.runAction(event, aaa.EMAIL, args, function() { can.user.toastSuccess(can) }) can.runAction(event, aaa.EMAIL, args, function() { can.user.toastSuccess(can) })
}) })
}, },
fullscreen: function(event, can) { document.body.requestFullscreen() },
_params: [log.DEBUG, chat.TITLE], _params: [log.DEBUG, chat.TITLE],
_menus: ["shareuser", _menus: ["shareuser",
[chat.THEME, ice.AUTO], [chat.THEME, ice.AUTO],
[aaa.LANGUAGE, ice.AUTO], [aaa.LANGUAGE, ice.AUTO],
[nfs.SAVE, aaa.EMAIL, web.TOIMAGE, code.WEBPACK], [nfs.SAVE, aaa.EMAIL, web.TOIMAGE, code.WEBPACK],
[aaa.USER, "setnick", aaa.PASSWORD, cli.CLEAR, aaa.LOGOUT], [aaa.USER, aaa.USERNICK, aaa.PASSWORD, cli.CLEAR, aaa.LOGOUT],
"fullscreen",
], ],
_trans: kit.Dict( _trans: kit.Dict(
"shareuser", "共享用户", chat.THEME, "界面主题", aaa.LANGUAGE, "语言地区", nfs.SAVE, "保存网页", web.TOIMAGE, "生成图片", code.WEBPACK, "打包页面", "shareuser", "共享用户", chat.THEME, "界面主题", aaa.LANGUAGE, "语言地区",
aaa.USER, "用户信息", "setnick", "设置昵称", aaa.PASSWORD, "修改密码", web.CLEAR, "清除背景", aaa.LOGOUT, "退出登录", nfs.SAVE, "保存网页", aaa.EMAIL, "发送邮件", web.TOIMAGE, "生成图片", code.WEBPACK, "打包页面",
aaa.EMAIL, "发送邮件", aaa.USER, "用户信息", aaa.USERNICK, "设置昵称", aaa.PASSWORD, "修改密码", web.CLEAR, "清除背景", aaa.LOGOUT, "退出登录",
), ),
}) })