diff --git a/frame.js b/frame.js index e1c7b784..d1232673 100644 --- a/frame.js +++ b/frame.js @@ -370,7 +370,13 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { input: function(can, item, value, target, style) { if ([html.BR, html.HR].indexOf(item.type) > -1) { return can.page.Append(can, target, [item]) } var icon = [], _item = can.base.Copy({className: "", type: "", name: ""}, item), input = can.page.input(can, _item, value) if (item.type == html.SELECT) { can.core.List(input.list, function(item) { item.inner = can.user.trans(can, item.inner, item._trans, html.INPUT) }) } - if (item.type == html.BUTTON && !input.value) { input.value = can.user.trans(can, item.name, item._trans) } + if (item.type == html.BUTTON && !input.value) { + if (item.name != item.value) { + input.value = item.value + } else { + input.value = can.user.trans(can, item.name, item._trans) + } + } input.onclick = item.onclick if (item.type == html.TEXT) { input.placeholder = can.user.trans(can, input.placeholder||input.name, item._trans, html.INPUT) @@ -653,7 +659,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { tabview: function(can, meta, list, target) { var ui = can.page.Append(can, target, [html.ACTION, html.OUTPUT]) can.onappend.style(can, html.FLEX, ui.action) can.core.List(can.base.getValid(list, can.core.Item(meta)), function(name, index) { - ui[name] = can.page.Append(can, ui.action, [{view: [html.TABS, html.DIV, name], onclick: function(event) { + ui[name] = can.page.Append(can, ui.action, [{view: [html.TABS, html.DIV, can.user.trans(can, name)], onclick: function(event) { can.onmotion.select(can, ui.action, html.DIV_TABS, event.target) if (can.onmotion.cache(can, function() { return name }, ui.output)) { return } meta[name](ui.output) }, _init: function(target) { index == 0 && can.onmotion.delay(can, function() { target.click() }) }}])._target @@ -702,8 +708,8 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { function _cb(sub, value, old) { if (value == old) { return } target.value = value, can.base.isFunc(cb) && cb(sub, value, old) } target.onkeydown = function() { if (event.key == code.ESCAPE && target._can) { return target._can.close(), target.blur() } else if (event.key == code.ENTER) { can.base.isFunc(cb) && cb(event, target.value) } } can.core.ItemCB(can.onfigure[input], function(key, on) { var last = target[key]||function() { }; target[key] = function(event) { can.misc.Event(event, can, function(msg) { - function show(sub, cb) { - can.base.isFunc(cb) && cb(sub, _cb), can.onlayout.figure(event, can, sub._target), can.onmotion.toggle(can, sub._target, true) + function show(sub, cb) { can.base.isFunc(cb) && cb(sub, _cb) + can.onlayout.figure(event, can, sub._target), can.onmotion.toggle(can, sub._target, true) sub.Status(html.HEIGHT, sub._output.offsetHeight), sub.Status(html.WIDTH, sub._output.offsetWidth) } can.core.CallFunc(on, {event: event, can: can, meta: meta, cb: _cb, target: target, sub: target._can, last: last, cbs: function(cb) { diff --git a/index.css b/index.css index 9f86406e..c730d23c 100644 --- a/index.css +++ b/index.css @@ -75,7 +75,7 @@ body.width1 { /* 320-640 手机竖屏 */ --river-width:280px; --project-width:120px; --input-width:80px; --river-margin:0; --plugin-margin:0; --button-margin:5px; --table-button:2; - --form-width:280px; + --form-width:320px; } body.width2 { /* 640-960 手机横屏 平板竖屏 笔记本调试 */ --url-input-width:160px; @@ -240,6 +240,13 @@ body>div.input { padding:var(--plugin-padding); z-index:100; } body>div.input>legend { margin-left:122px; } body>div.input td { padding:var(--table-padding); } body>div.input td:nth-child(2) { padding:var(--table-padding) 0; } + +body>div.input tr { margin:var(--button-margin); } +body.mobile>div.input tr { display:flex; flex-direction:column; margin:var(--button-margin); } +body.mobile>div.input td { padding:0 var(--button-padding); margin:var(--button-margin); } +body.mobile>div.input td:nth-child(1) { color:var(--disable-fg-color); font-size:var(--status-font-size); padding-left:var(--button-padding); margin-bottom:0; } +body.mobile>div.input td:nth-child(2) { display:none; } + body>div.input tr.img td:last-child>span { display:none; } body>div.input tr.img td:last-child>div.item { width:var(--river-width); flex-wrap:wrap; } body>div.input tr.img td:last-child>div.item>div { background-color:gray; margin:var(--input-margin); } @@ -270,8 +277,10 @@ body>div.input div.action>div.item>input[type=button] { width:112px; } body>div.input.login { flex-direction:column; } body>div.input.login>div.action { border-bottom:var(--box-border); flex-direction:row; } body>div.input.login>div.action>div.tabs { padding:var(--button-padding); } +body>div.input.login>div.action>div.tabs.select { color:unset; } body>div.input.login>div.output { text-align:center; min-height:var(--qrcode-height); min-width:var(--iframe-height); overflow:hidden; clear:both; } body>div.input.login>div.output>fieldset>div.output { background-color:transparent; } +body>div.input.login>div.output>fieldset { box-shadow:unset; } body>div.input.login>div.display { padding-top:var(--button-padding); width:100%; flex-direction:column; } body>div.input.login>div.display>label { color:var(--disable-fg-color); font-style:italic; font-size:var(--status-font-size); } body>div.input.login>div.display>span.item { font-style:italic; word-break:break-all; border-left:var(--notice-bg-color) solid 5px; padding-left:var(--button-padding); margin:var(--button-margin) 0; } @@ -360,11 +369,13 @@ div.item.button.notice input:hover[type=button] { background-color:var(--notice- div.item.button.danger input { border:var(--danger-bg-color) solid 1px; } div.item.button.notice input { border:var(--notice-bg-color) solid 1px; } div.action div.tabs:hover { - background-color:var(--output-bg-color); color:var(--hover-fg-color); + background-color:var(--hover-bg-color); + /* color:var(--hover-fg-color); */ border-top-left-radius:var(--button-margin); border-top-right-radius:var(--button-margin); } div.action div.tabs.select { - background-color:var(--output-bg-color); color:var(--hover-fg-color); + background-color:var(--output-bg-color); + /* color:var(--hover-fg-color); */ border-top-left-radius:var(--button-margin); border-top-right-radius:var(--button-margin); border-bottom:var(--hover-fg-color) solid 3px; } div.zone>div.item { background-color:var(--th-bg-color); } diff --git a/lib/page.js b/lib/page.js index 913ead68..1be74dc7 100644 --- a/lib/page.js +++ b/lib/page.js @@ -418,7 +418,7 @@ Volcanos("page", { msg.OptionDefault(ice.MSG_THEME, can.getHeaderTheme()) msg.OptionDefault(ice.MSG_BG, can.page.styleValue(can, "--plugin-bg-color", target)) msg.OptionDefault(ice.MSG_FG, can.page.styleValue(can, "--plugin-fg-color", target)) - msg.OptionDefault(ice.MSG_LANGUAGE, can.user.info.language) + can.user.info.language && msg.OptionDefault(ice.MSG_LANGUAGE, can.user.info.language) return msg }, styleValue: function(can, key, target) { const styles = getComputedStyle(target||document.body); return styles.getPropertyValue(key) }, diff --git a/lib/user.js b/lib/user.js index 6501d356..ea0df567 100644 --- a/lib/user.js +++ b/lib/user.js @@ -208,7 +208,9 @@ Volcanos("user", { can.core.CallFunc(cb, {event: can.request(event, {_handle: ice.TRUE})._event, button: button, data: data, list: list, args: args, input: action}) || action.cancel() }, _target: ui._target, _engine: function(event, can, button) { action.submit(event, can, button) }, }); - if (event && event.target) { can.onlayout.figure(event, can, ui._target) } else { + if (event && event.target) { can.onlayout.figure(event, can, ui._target) + can.user.isMobile && can.page.style(can, ui._target, html.LEFT, (can.page.width()-ui._target.offsetWidth)/2, html.TOP, can.getHeaderHeight(can)) + } else { can.getActionSize(function(left, top, height) { can.page.style(can, ui._target, html.LEFT, left||0, html.TOP, (height/4||0)) }) } can.onmotion.resize(can, ui._target), can.onmotion.delay(can, function() { action.focus() }, 300) return button === true && action.submit(event, can, html.SUBMIT), action @@ -264,17 +266,23 @@ Volcanos("user", { } can.core.Timer(1000, function() { check() }), can.onimport.theme(can) } if (cmd == cli.PWD) { if (check()) { return } can.page.ClassList.add(can, document.body, aaa.LOGIN), can._wss_name = can.ondaemon._list[0] = arg[0] - var _list = [], list = {}; _msg.Table(function(value) { if (value.order == "") {} else if (value.type == mdb.PLUGIN) { _list.push(value.name), list[value.name] = function(target) { + var _list = [], list = {}; _msg.Table(function(value) { if (value.order == "") {} else if (value.type == mdb.PLUGIN) { + can.user.trans(can, kit.Dict(value.name, value.help)) + _list.push(value.name), list[value.name] = function(target) { can.onappend.plugin(can, {space: value.space, index: value.index, args: can.core.Split(value.args), style: html.OUTPUT}, function(sub) { var run = sub.run; sub.run = function(event, cmds, cb) { var msg = can.request(event, {space: arg[0]}); can.page.exportValue(can, msg), run(event, cmds, cb) } sub.onexport.output = function() { can.page.style(can, sub._output, html.MAX_HEIGHT, ""), can.page.style(can, sub._output, html.MAX_WIDTH, "") } }, ui.output) - } } else if (value.type == cli.QRCODE) { _list.push(value.name), list[value.name] = function(target) { can.page.Modify(can, target, arg[2]) } } }) + } } else if (value.type == cli.QRCODE) { + can.user.trans(can, kit.Dict(value.name, value.help)) + _list.push(value.name), list[value.name] = function(target) { can.page.Modify(can, target, arg[2]) } } }) var ui = can.onappend.tabview(can, list, _list, can.page.Append(can, document.body, [{view: "input login float flex"}])._target) if (window.parent != window && window.innerHeight < 480) { can.onmotion.hidden(can, ui.output) } var _cmd = "space login "+arg[0]; ui.display = can.page.Append(can, ui._target, [html.DISPLAY])._target, can.onappend.style(can, html.FLEX, ui.display) - can.page.Appends(can, ui.display, [{text: ["或命令行授权: ", html.LABEL]}, {text: ["$ "+_cmd, "", html.ITEM], title: "点击复制,并后台执行此命令,即可登录", style: {cursor: "copy"}, onclick: function() { can.user.copy(event, can, _cmd) }}]) - can.page.Append(can, ui.display, [{text: ["或第三方授权: ", html.LABEL]}, {view: [["sso", html.FLEX]], list: _msg.Table(function(value) { + can.page.Appends(can, ui.display, [{text: [ + can.user.trans(can, "or command login", "或命令行授权: "), html.LABEL]}, {text: ["$ "+_cmd, "", html.ITEM], title: "点击复制,并后台执行此命令,即可登录", style: {cursor: "copy"}, onclick: function() { can.user.copy(event, can, _cmd) }}]) + can.page.Append(can, ui.display, [{text: [ + can.user.trans(can, "or oauth login", "或第三方授权: "), html.LABEL]}, {view: [["sso", html.FLEX]], list: _msg.Table(function(value) { return value.type == "oauth" && {view: [[html.ITEM, html.FLEX]], title: "点击跳转,授权登录", list: [{img: can.misc.Resource(can, value.icons)}, {text: value.name}], onclick: function() { can.user.jumps(can.base.MergeURL(value.link, ice.BACK, location.href)) }} diff --git a/panel/header.js b/panel/header.js index e60a4e9f..1a220157 100644 --- a/panel/header.js +++ b/panel/header.js @@ -74,17 +74,21 @@ Volcanos(chat.ONACTION, {_init: function(can) {}, if (window.parent == window && can.misc.Search(can, ice.MSG_SESSID) && can.misc.CookieSessid(can, can.misc.Search(can, ice.MSG_SESSID)) && !can.user.isMailMaster) { return can.misc.Search(can, ice.MSG_SESSID, "") } can.user.info.sessid = can.misc.Search(can, ice.MSG_SESSID) - function lang(msg, cb) { can.user.info.language = msg.SearchOrOption(aaa.LANGUAGE) + function lang(msg, cb) { can.user.info.language = msg.SearchOrOption(aaa.LANGUAGE)||msg.Option(ice.MSG_LANGUAGE) can.user.info.language? can.require([can.misc.Resource(can, nfs.SRC_TEMPLATE+web.CHAT_HEADER+"/language/"+can.user.info.language+".js")], cb, function(can, name, sub) { can.base.Copy(can.user._trans, sub._trans) }): cb && cb() can.onmotion.delay(can, function() { can.onimport._language(can) }) } function show(msg) { var p = can.misc.Search(can, "redirect_uri") if (p && location.pathname == web.BASIC_LOGIN) { return location.replace(can.base.MergeURL(p, ice.MSG_SESSID, can.misc.CookieSessid(can))) } var p = can.misc.Search(can, ice.BACK); if (p && location.pathname == web.CHAT_SSO) { return location.reload() } - can.user.info.userrole = msg.Option(ice.MSG_USERROLE), can.user.info.repos = msg.Option(nfs.REPOS) - can.user.info.nodetype = msg.Option(ice.MSG_NODETYPE) + can.user.info.usernick = can.Conf(aaa.USERNICK) can.user.info.username = msg.Option(ice.MSG_USERNAME) - can.user.info.usernick = can.Conf(aaa.USERNICK), can.user.info.email = msg.Option(aaa.EMAIL), can.user.info.avatar = msg.Option(aaa.AVATAR), can.user.info.background = msg.Option(aaa.BACKGROUND) + can.user.info.userrole = msg.Option(ice.MSG_USERROLE) + can.user.info.nodetype = msg.Option(ice.MSG_NODETYPE) + can.user.info.repos = msg.Option(nfs.REPOS) + can.user.info.email = msg.Option(aaa.EMAIL) + can.user.info.avatar = msg.Option(aaa.AVATAR) + can.user.info.background = msg.Option(aaa.BACKGROUND) 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: http.GET}), [], function(msg) { lang(msg), can.page.requireModules(can, [msg.Option("icon.lib")]) diff --git a/plugin/state.js b/plugin/state.js index ef6bce61..0ebd3e0e 100644 --- a/plugin/state.js +++ b/plugin/state.js @@ -107,7 +107,11 @@ Volcanos(chat.ONIMPORT, { can.page.SelectArgs(can, can._action, "", function(target) { target.value = his[i++]||"" }); break } can.Update(event) }, }) -Volcanos(chat.ONACTION, {list: ["刷新数据", "刷新界面", "切换浮动", "切换全屏", +Volcanos(chat.ONACTION, {list: [ + function(can) { if (!can.user.isMobile) { return "刷新数据" } }, + function(can) { if (!can.user.isMobile) { return "刷新界面" } }, + function(can) { if (!can.user.isMobile) { return "切换浮动" } }, + function(can) { if (!can.user.isMobile) { return "切换全屏" } }, function(can) { if (can.isCmdMode()) { return "打开首页" } }, function(can) { if (can.ConfSpace() || can.isCmdMode() && can.misc.Search(can, ice.POD)) { return "打开空间" } }, function(can) { if (!can.isCmdMode()) { return "打开链接" } },