diff --git a/frame.js b/frame.js index ec648e5a..bb77b97a 100644 --- a/frame.js +++ b/frame.js @@ -74,14 +74,24 @@ Volcanos(chat.ONENGINE, {_init: function(can, meta, list, cb, target) { Volcanos(chat.ONDAEMON, {_init: function(can, name, type, cbs) { if (can.user.isLocalFile) { return } return can.misc.WSS(can, {type: type||web.PORTAL, name: name||can.misc.Search(can, cli.DAEMON)||""}, function(event, msg, cmd, arg, cb) { if (cbs && can.core.CallFunc(cbs, {event: event, msg: msg, cmd: cmd, arg: arg, cb: cb})) { return } - var sub = can.ondaemon._list[can.core.Keys(msg[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.onengine._search({}, can, msg, can, [chat._SEARCH, cmd].concat(arg), cb) + var sub = can.ondaemon._list[can.core.Keys(msg[ice.MSG_TARGET])]||can; + sub.sub && can.base.isFunc(sub.sub.ondaemon[cmd])? can.core.CallFunc(sub.sub.ondaemon[cmd], {can: can, msg: msg, sub: sub, cmd: cmd, arg: arg, cb: cb}): + 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.onengine._search({}, can, msg, can, [chat._SEARCH, cmd].concat(arg), cb) }) }, _list: [""], pwd: function(can, arg) { can.misc.sessionStorage(can, "can.daemon", can._wss_name = can.ondaemon._list[0] = arg[0]) }, close: function(can, msg, sub) { can.user.close() }, exit: function(can, msg, sub) { can.user.close() }, toast: function(can, sub, arg, cb) { can.core.CallFunc(can.user.toast, [sub].concat(arg)) }, - refresh: function(can, sub) { can.base.isFunc(sub.Update) && sub.Update() }, + online: function(can, sub) { debugger }, + refresh: function(can, msg, sub, arg) { + if (arg[0] == "confirm") { + can.user.toastConfirm(can, arg[1]||"reload?", sub.ConfIndex(), function(event, button) { + can.base.isFunc(sub.Update) && sub.Update() + }) + } else { + can.base.isFunc(sub.Update) && sub.Update() + } + }, grant: function(can, msg, sub, arg) { var toast = can.user.toast(can, {duration: arg[1]||10000, content: "grant "+arg[0], action: shy({ confirm: function(event) { toast.close(), can.run(can.request(event, {name: arg[0]}), [ctx.ACTION, ctx.RUN, web.SPACE, aaa.LOGIN]) }, diff --git a/index.css b/index.css index ad3e3e6d..96df11de 100644 --- a/index.css +++ b/index.css @@ -134,7 +134,7 @@ kbd { padding:0 var(--input-padding); } img.qrcode { width:var(--qrcode-width); } /* output style */ div.title>div.status { line-height:20px; display:flex; } -div.title>div.status>div.item { font-size:var(--status-font-size); font-weight:normal; float:left; padding:0 var(--input-padding); } +div.title>div.status>div.item { font-size:var(--status-font-size); font-weight:normal; white-space:pre; padding:0 var(--input-padding); display:flex; float:left; } div.title>div.status>div.item.restart { background-color:var(--notice-bg-color); color:var(--notice-fg-color) !important; opacity:0.4; } div.title>div.status>div.item.access { background-color:var(--danger-bg-color); color:var(--danger-fg-color) !important; opacity:0.4; } div.title>div.status>div.item:not(:hover) { color:var(--disable-fg-color); } @@ -146,7 +146,7 @@ div.output.card>div.item:hover { background-color:var(--plugin-bg-color); color: div.output.card>div.item.stop { color:var(--disable-fg-color); } div.output.card>div.item>div.title { font-size:var(--legend-font-size); font-weight:bold; padding-bottom:var(--input-padding); display:flex; align-items:center; overflow:hidden; } div.output.card>div.item>div.title>div.title>span { padding:var(--input-padding); } -div.output.card>div.item>div.title>img { height:var(--header-height); width:var(--header-height); float:left; } +div.output.card>div.item>div.title>img { height:var(--header-height); width:var(--header-height); margin:0; float:left; } div.output.card>div.item>div.title>img.jpg { padding:var(--input-padding); } div.item img.jpg { padding:var(--input-padding); } div.output.card>div.item>div.content { white-space:pre; font-size:var(--status-font-size); padding:var(--input-padding); height:var(--header-height); } @@ -195,11 +195,16 @@ div.content>div.toggle.display { left:20%; bottom:-52px; rotate:90deg; border-to div.project:not(.toggle) { width:var(--project-width); flex:0 0 var(--project-width); } div.profile:not(.toggle) { width:50%; flex:0 0 50%; } /* fieldset */ -fieldset>div.action>div.friend { display:block; margin-left:10px !important; } -fieldset>div.action>div.friend { display:block; margin-right:10px !important; overflow:hidden; } -fieldset>div.action>div.friend img { height:var(--action-height); transition:all 1s; float:right; } -fieldset>div.action>div.friend:not(:hover) img:not(:first-child) { margin-right:-20px; } -fieldset>div.action>div.friend:hover img:not(:first-child) { margin-right:var(--input-margin); } +fieldset>div.action>div.online { display:block; margin-left:10px !important; } +fieldset>div.action>div.online { display:block; margin-right:10px !important; overflow:hidden; position:relative; } +fieldset>div.action>div.online span { background-color:var(--hover-bg-color); color:var(--hover-fg-color); font-size:var(--status-font-size); position:absolute; bottom:0; } +fieldset>div.action>div.online img { height:var(--action-height); transition:margin-right 1s; float:right; } +fieldset>div.action>div.online img:hover { background-color:var(--hover-bg-color); } +fieldset>div.action>div.online:not(:hover) img:not(:first-child) { margin-right:-20px; } +body.mobile fieldset>div.action>div.online img:not(:first-child) { margin-right:-20px; } +body.width6 fieldset>div.action>div.online:not(:hover) img:not(:first-child) { margin-right:var(--input-margin); } +fieldset>div.action>div.online:hover img:not(:first-child) { margin-right:var(--input-margin); } +fieldset>div.action>div.online:hover { background-color:unset; } fieldset>form.option>div.item:not(.icon) { margin-right:var(--button-margin); } fieldset>div.action>div.item:not(:last-child) { margin-right:var(--button-margin); } fieldset.input>legend { display:none; } @@ -474,7 +479,7 @@ input[type=button] { border-radius:var(--button-radius); } fieldset>form.option>div.item.select { border-radius:var(--button-radius); } fieldset>form.option>div.item.button { border-radius:var(--button-radius); } fieldset>div.action div.item.button { border-radius:var(--button-radius); } -fieldset>div.action div.item.button:last-child { margin-right:20px; } +fieldset>div.action>div.item.button:last-child { margin-right:20px; } fieldset>div.action div.item.select:not(.button):not(.cmds) { border-radius:var(--button-radius); border-bottom:var(--notice-bg-color) solid 3px; } fieldset:not(.input):not(.panel):not(.full):not(.cmd) { border-radius:var(--plugin-radius); } fieldset>div.status>legend:not(:hover):not(.select) { border-radius:0; } diff --git a/lib/user.js b/lib/user.js index 5758730f..72ec5e6c 100644 --- a/lib/user.js +++ b/lib/user.js @@ -76,7 +76,7 @@ Volcanos("user", { return fmt == "%W"? list: can.base.Time(time, (fmt||"%y-%m-%d %H:%M:%S").replace("%w", list[now.getDay()])) }, toastConfirm: function(can, content, title, action) { - if (!action.list || action.list.length == 0) { action = shy({confirm: action}, [html.CANCEL, html.CONFIRM], function() {}) } + if (!action.list || action.list.length == 0) { action = shy({confirm: action}, [html.CANCEL, html.CONFIRM]) } var carte = can.user.toast(can, {content: content, title: title, action: action||[cli.CLOSE], duration: -1}) can.page.style(can, carte._target, html.TOP, 200, html.BOTTOM, ""); return carte }, @@ -99,7 +99,10 @@ Volcanos("user", { ] }]); can.onengine.signal(can, chat.ONTOAST, can.request({}, {time: can.misc._time(), title: meta.title, content: meta.content})) meta.action.meta && can.core.Item(meta.action.meta, function(key, cb) { cb.help && can.core.Value(meta.action.meta, ["_trans", key], cb.help) }) var action = can.onappend._action(can, meta.action.list? meta.action.list.reverse(): meta.action, ui.action, {_trans: meta.action.meta? meta.action.meta._trans: {}, - _engine: function(event, button) { can.core.CallFunc(meta.action.meta? meta.action.meta[button]: meta.action, [event, button]) }, + _engine: function(event, button) { + can.core.CallFunc(meta.action.meta? meta.action.meta[button]: meta.action, [event, button]) + action.close(event) + }, open: function(event) { meta.content.indexOf(ice.HTTP) == 0 && can.user.open(meta.content), meta.title.indexOf(ice.HTTP) == 0 && can.user.open(meta.title) }, close: function(event) { action.timer.stop = true, can.page.Remove(can, ui._target) }, cancel: function(event) { action.timer.stop = true, can.page.Remove(can, ui._target) }, diff --git a/plugin/local/code/vimer.js b/plugin/local/code/vimer.js index 2c561664..e0d455fd 100644 --- a/plugin/local/code/vimer.js +++ b/plugin/local/code/vimer.js @@ -2,6 +2,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { if (can.user.mod.isPod) can.require(["/plugin/local/code/inner.js"], function(can) { can.onimport._last_init(can, msg, function() { can.onengine.listen(can, "tabview.line.select", function(msg) { can.onaction._selectLine(can) }) can.db.undo = [], can.db.redo = [], can.onimport._input(can), cb && cb(msg) + can.onimport._online(can) }) }) }, _input: function(can) { var ui = can.page.Append(can, can.ui.content.parentNode, [ diff --git a/plugin/table.js b/plugin/table.js index f1f57be6..ed519db3 100644 --- a/plugin/table.js +++ b/plugin/table.js @@ -226,29 +226,23 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { }, sub.onaction.close = function() { can.onmotion.hidden(can, target) }, can.base.isFunc(cb) && cb(sub) }, target, field) }, - _online: function(can, delay) { - can.onmotion.delay(can, function() { - if (!can.ui.friend) { - if (can.isCmdMode()) { - can.ui.friend = can.page.Append(can, can._action, ["item friend"])._target - } else { - var p = can.page.SelectOne(can, can._action, "div.item._space").nextSibling - can.ui.friend = can.page.insertBefore(can, ["item friend"], p, can._action) - } + _online: function(can, delay) { can.onmotion.delay(can, function() { + if (!can.ui.online) { + if (can.isCmdMode()) { + can.ui.online = can.page.Append(can, can._action, ["item online"])._target + } else { + var p = can.page.SelectOne(can, can._action, "div.item._space"); p = p? p.nextSibling: p + can.ui.online = can.page.insertBefore(can, ["item online"], p, can._action) } - can._root.Header.run(can.request({}, {_space: can.ConfSpace(), _index: can.ConfIndex()}), [ctx.ACTION, web.ONLINE], function(msg) { - can.page.Appends(can, can.ui.friend, msg.Table(function(value, index) { - return index < 5 && {img: can.misc.Resource(can, - value.username == can.user.info.username? value.icons: value.avatar||"usr/icons/contexts.png"), - title: [ - [value.usernick, value.username].join(" "), - [value.agent, value.system, value.ip].join(" "), - ].join("\n")} - })) - }) - can.onimport._online(can, 30000) - }, delay) - }, + } + can._root.Header.run(can.request({}, {_space: can.ConfSpace()||can.misc.Search(can, ice.POD), _index: can.ConfIndex()}), [ctx.ACTION, web.ONLINE], function(msg) { + can.page.Appends(can, can.ui.online, msg.Table(function(value, index) { + return index < 5 && {img: can.misc.Resource(can, value.username == can.user.info.username? value.icons: value.avatar||"usr/icons/contexts.png"), + title: [[value.usernick, value.username].join(lex.SP), [value.agent, value.system, value.ip].join(lex.SP)].join(lex.NL)} + })) + can.page.Append(can, can.ui.online, [{text: msg.Length()+""}]) + }), can.onimport._online(can, 30000) + }, delay) }, }) Volcanos(chat.ONLAYOUT, { _init: function(can, height, width) {