From 51d98031c1ef4276813c6b58c0aafd09ae6e836c Mon Sep 17 00:00:00 2001 From: shy Date: Thu, 4 Apr 2024 13:49:10 +0800 Subject: [PATCH] add some --- index.css | 8 ++------ lib/user.js | 2 +- panel/action.css | 3 ++- panel/action.js | 33 ++++++++++++------------------- panel/header.js | 3 ++- plugin/local/code/inner/syntax.js | 6 ++---- plugin/state.js | 2 +- 7 files changed, 23 insertions(+), 34 deletions(-) diff --git a/index.css b/index.css index 918a5c48..722a4ccc 100644 --- a/index.css +++ b/index.css @@ -434,12 +434,8 @@ div.item.button.danger input:hover[type=button] { background-color:var(--danger- div.item.button.notice input:hover[type=button] { background-color:var(--notice-bg-color); color:var(--notice-fg-color); } 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(--hover-bg-color); - border-top-left-radius:var(--button-margin); border-top-right-radius:var(--button-margin); -} -div.action div.tabs.select { background-color:var(--hover-bg-color); - border-top-left-radius:var(--plugin-radius); border-top-right-radius:var(--plugin-radius); border-bottom:var(--notice-bg-color) solid 3px; -} +div.action div.tabs:hover { background-color:var(--hover-bg-color); } +div.action div.tabs.select { background-color:var(--hover-bg-color); border-bottom:var(--notice-bg-color) solid 3px; } div.zone>div.item { background-color:var(--th-bg-color); } div.zone>div.list>div.zone>div.item { background-color:var(--th-bg-color); } div.tabs div { background-color:var(--plugin-bg-color); } diff --git a/lib/user.js b/lib/user.js index eb12c042..cef3372c 100644 --- a/lib/user.js +++ b/lib/user.js @@ -178,7 +178,7 @@ Volcanos("user", { } return item })}]); can.onkeymap.prevent(event), can.page.Select(can, ui._target, html.IMG, function(target) { target.onload = function() { can.onlayout.figure(event, can, ui._target) } }) - var carte = {_target: ui._target, _parent: parent, layout: can.onlayout.figure(event, can, ui._target, parent, 200), close: function() { can.page.Remove(can, ui._target) }} + var carte = {_target: ui._target, _parent: parent, layout: can.onlayout.figure(event, can, ui._target, parent), close: function() { can.page.Remove(can, ui._target) }} return parent && (parent._sub = carte), carte }, carteRight: function(event, can, meta, list, cb, parent) { var carte = can.user.carte(event, can, meta, list, cb, parent) diff --git a/panel/action.css b/panel/action.css index f6404670..03f5e337 100644 --- a/panel/action.css +++ b/panel/action.css @@ -8,7 +8,8 @@ fieldset.Action.tabs>div.output>fieldset.plugin:not(.select) { display:none; } fieldset.Header div.Action { display:contents; } /* fieldset.Action.tabview:not(.cmd)>div.output>fieldset.plugin>legend { float:left !important; background-color:transparent; } */ fieldset.Action.tabview:not(.cmd)>div.output>fieldset.plugin>legend { float:left !important; } -fieldset.Action.tabview>div.output>fieldset.plugin:not(.select):not(:only-child) { display:none; } +/* fieldset.Action.tabview>div.output>fieldset.plugin:not(.select):not(:only-child) { display:none; } */ +fieldset.Action.tabview>div.output>fieldset.plugin:not(.select) { display:none; } fieldset.Action.vertical>div.output>fieldset.plugin { float:left; } fieldset.Action.horizon>div.output>fieldset.plugin { float:left; } fieldset.Action.horizon>div.output>fieldset.plugin>div.status { display:none; } diff --git a/panel/action.js b/panel/action.js index 2b6c4800..5a0e9d96 100644 --- a/panel/action.js +++ b/panel/action.js @@ -1,29 +1,24 @@ (function() { const ALL = "all", TABS = "tabs", TABVIEW = "tabview", VERTICAL = "vertical", HORIZON = "horizon", GRID = "grid", FREE = "free", FLOW = "flow", PAGE = "page", CAN_LAYOUT = "can.layout" Volcanos(chat.ONIMPORT, {_init: function(can, msg) { var river = can.Conf(chat.RIVER), storm = can.Conf(chat.STORM), list = can.db.list - can.onmotion.clear(can), can.core.Next(msg.Table(), function(item, next, index) { item.type = chat.PLUGIN, item.mode = can.Mode(); if (item.deleted == ice.TRUE) { return next() } - item.width = can.ConfWidth()-can.Conf(html.MARGIN_X); if (item.style == html.OUTPUT) { item.width = can.ConfWidth()-2*html.PLUGIN_MARGIN-2*html.PLUGIN_PADDING } + var _select; can.onmotion.clear(can), can.onaction.layout(can, list[3]) + can.core.Next(msg.Table(), function(item, next, index) { item.type = chat.PLUGIN, item.mode = can.Mode(); if (item.deleted == ice.TRUE) { return next() } if (msg.Length() == 1) { item.height = can.ConfHeight()-can.Conf(html.MARGIN_Y), can.base.isIn(item.index, web.CHAT_MACOS_DESKTOP, web.CHAT_MESSAGE, web.WIKI_PORTAL) && (item.style = html.OUTPUT) } - list.length == 0 && can.user.info.nodetype == web.SERVER && item._command == web.DREAM && (list = [river, storm, item.index]) + list.length == 0 && can.user.info.nodetype == web.SERVER && item._command == web.DREAM && (list = [river, storm, item._command]) can.onappend.plugin(can, item, function(sub, meta, skip) { if (meta.index == "can._notfound" && !can.misc.isDebug(can)) { return skip || next() } + sub.run = function(event, cmds, cb) { return can.run(can.request(event, {pod: meta.pod||meta.space}), (can.base.beginWith(meta.index, "can.")? [meta.index]: [river, storm, meta.id||meta.index]).concat(cmds), cb) } sub.onexport.output = function() { msg.Length() > 1 && can.onexport.isauto(can) && can.page.style(can, sub._output, html.HEIGHT, "", html.MAX_HEIGHT, "") } - sub.onaction._close = function() { can.onengine.signal(can, chat.ONACTION_REMOVE, can.request({river: river, storm: storm}, item)), can.page.Remove(can, sub._target) } - sub.run = function(event, cmds, cb) { return can.run(can.request(event, {pod: meta.space||meta.pod}), (can.base.beginWith(meta.index, "can.")? [meta.index]: [river, storm, meta.id||meta.index]).concat(cmds), cb) } - can.user.isChrome && (can.ondaemon._list[sub._daemon = can.core.Keys(river, storm, index)] = sub) - can._plugins = (can._plugins||[]).concat([sub]), can.onimport._tabs(can, sub, meta), skip || next() + can.onaction.layout(can, list[3]), can.onimport._tabs(can, sub, meta), can._plugins = (can._plugins||[]).concat([sub]) + can.onexport.layout(can) && list[0] == river && list[1] == storm? (can.base.isIn(list[2], sub.ConfIndex()) && (sub._tabs.click(), _select = sub)): + (index == 0 && (sub._tabs.click())), _select = _select||sub, skip || next() }) - }, function() { if (can.isCmdMode()) { return } can.user.mod.isCmd = false, can.page.ClassList.del(can, document.body, ice.CMD) - can.onaction.layout(can, list[3]); if (can.user.isMobile) { return } - can.onexport.layout(can) && list[0] == river && list[1] == storm && can.core.List(can._plugins, function(sub) { - can.base.isIn(list[2], sub.Conf(ctx.INDEX), sub.Conf("_command")||sub.Conf(ctx.INDEX)) && sub._tabs.click() - }) - }) + }, function() { can.onaction.layout(can, list[3]), _select._tabs.click() }) }, _tabs: function(can, sub, meta) { var tabs = [{view: [html.ITEM, "", can.user.trans(can, meta.name, meta.help)], title: meta.help, onclick: function(event) { can._current = sub can.onmotion.select(can, can._output, html.FIELDSET_PLUGIN, sub._target), can.onmotion.select(can, can._action, html.DIV_ITEM, sub._tabs), can.onmotion.select(can, can._header_tabs, html.DIV_ITEM, sub._header_tabs) can.onmotion.delay(can, function() { sub._header_tabs.scrollIntoViewIfNeeded() }) var layout = can.onexport.layout(can); layout == FREE || (can._output.scrollTop = sub._target.offsetTop-10) - can.isCmdMode() || can.misc.SearchHash(can, can.Conf(chat.RIVER), can.Conf(chat.STORM), sub.Conf("_command")||meta.index, layout) + can.isCmdMode() || can.misc.SearchHash(can, can.Conf(chat.RIVER), can.Conf(chat.STORM), sub.ConfIndex(), layout) sub.onimport.size(sub, can.ConfHeight()-can.Conf(html.MARGIN_Y), can.ConfWidth()-can.Conf(html.MARGIN_X), can.onexport.isauto(can)) }, oncontextmenu: sub._legend.onclick}]; sub._header_tabs = can.page.Append(can, can._header_tabs, tabs)._target, sub._tabs = can.page.Append(can, can._action, tabs)._target }, @@ -41,8 +36,7 @@ Volcanos(chat.ONACTION, {_init: function(can, target) { can.db.list = can.misc.S }) can._toast = can.page.Append(can, can._target, ["toast"])._target }, - onsize: function(can, msg, height, width) { - can.Conf({height: can.base.Min(height, 240), width: width}) + onsize: function(can, msg, height, width) { can.Conf({height: can.base.Min(height, 240), width: width}) can.page.style(can, can._toast, html.MAX_HEIGHT, can.page.height()-can.getHeaderHeight()-can.getFooterHeight()-(html.PLUGIN_MARGIN+html.PLUGIN_PADDING+html.ACTION_HEIGHT)) }, onlogin: function(can, msg) { @@ -110,14 +104,14 @@ Volcanos(chat.ONACTION, {_init: function(can, target) { can.db.list = can.misc.S can._root.River && can._river_show === false && can.onmotion.hidden(can, can._root.River._target), skip || can.onlayout._init(can) can.getActionSize(function(height, width) { var cb = can.onlayout[button]; can.base.isFunc(cb) && cb(can, height, width) || can.onlayout._plugin(can, button) }) }, - // _menus: [[html.LAYOUT, ALL, TABS, TABVIEW, VERTICAL, HORIZON, GRID, FREE, FLOW, PAGE], web.STORE, web.DREAM, web.DESKTOP, web.PORTAL], _menus: [[html.LAYOUT, ALL, TABS, TABVIEW, VERTICAL, HORIZON, GRID, FREE, FLOW, PAGE]], _trans: kit.Dict(html.LAYOUT, "布局", ALL, "详情布局", TABS, "标签布局", TABVIEW, "标签分屏", VERTICAL, "上下分屏", HORIZON, "左右分屏", GRID, "网格布局", FREE, "自由布局", FLOW, "流动布局", PAGE, "网页布局"), }) Volcanos(chat.ONLAYOUT, { tabs: function(can, height, width) { can.ConfHeight(height+html.ACTION_HEIGHT), can.ConfWidth(width) }, tabview: function(can, height, width) { can.ConfHeight(height+html.ACTION_HEIGHT), can.ConfWidth(width), can.onmotion.toggle(can, can._header_tabs, true) - can.page.SelectOne(can, can._header_tabs, html.DIV_ITEM_SELECT) || can.page.Select(can, can._header_tabs, html.DIV_ITEM, function(target, index) { index == 0 && target.click() }) + can.page.SelectOne(can, can._header_tabs, html.DIV_ITEM_SELECT) + // || can.page.Select(can, can._header_tabs, html.DIV_ITEM, function(target, index) { index == 0 && target.click() }) }, horizon: function(can, height, width) { can.ConfHeight(height), can.ConfWidth(width/2) }, vertical: function(can, height, width) { can.ConfHeight(height/2), can.ConfWidth(width) }, @@ -200,8 +194,7 @@ Volcanos(chat.ONKEYMAP, { toggleLayout: function(can, layout) { can.onaction.layout(can, can.onexport.layout(can) == layout? ice.AUTO: layout) }, }) Volcanos(chat.ONPLUGIN, { - _plugin: shy("插件", [mdb.NAME, ice.LIST, ice.BACK]), - _filter: shy("表格", [ice.LIST, html.FILTER]), + _plugin: shy("插件", [mdb.NAME, ice.LIST, ice.BACK]), _filter: shy("表格", [ice.LIST, html.FILTER]), _notfound: shy("缺失", [ctx.INDEX, web.SPACE, ice.LIST], function(can, msg, arg) { msg.Echo("not found "+arg[0]+" "+arg[1]) }), layout: shy("界面布局", {_init: function(can) { can.Option(chat.LAYOUT, can.getAction(chat.LAYOUT)) }}, ["layout:select=auto,tabs,tabview,horizon,vertical,grid,free,flow,page", ctx.RUN], function(can, msg, arg) { can.onaction.layout(can, arg[0]) }), }) diff --git a/panel/header.js b/panel/header.js index b0bd1cbb..9a68faa1 100644 --- a/panel/header.js +++ b/panel/header.js @@ -3,7 +3,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { }, _title: function(can, msg, target) { can.core.List(can.base.getValid(can.Conf(chat.TITLE)||msg.result, [ decodeURIComponent(can.misc.Search(can, ice.POD)||location.host)]), function(item) { - can.page.Append(can, target, [{view: [[html.ITEM, chat.TITLE, html.FLEX]], list: [{img: can.misc.ResourceFavicon(can)}, {text: item}], title: "返回主页", onclick: function(event) { can.onaction.title(event, can) }}]) + can.page.Append(can, target, [{view: [[html.ITEM, chat.TITLE, html.FLEX]], list: [{img: can.user.info.favicon||can.misc.ResourceFavicon(can)}, {text: item}], title: "返回主页", onclick: function(event) { can.onaction.title(event, can) }}]) }) }, _state: function(can, msg, target) { can.core.List(can.base.Obj(can.Conf(chat.STATE)||msg.Option(chat.STATE), [cli.QRCODE, chat.THEME, aaa.LANGUAGE, aaa.USERNICK, aaa.AVATAR, mdb.TIME]).reverse(), function(item) { if (can.user.isMobile && can.base.isIn(item, cli.QRCODE, chat.THEME, aaa.LANGUAGE, mdb.TIME)) { return } @@ -87,6 +87,7 @@ Volcanos(chat.ONACTION, {_init: function(can) {}, 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.favicon = msg.Option("favicon") 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) diff --git a/plugin/local/code/inner/syntax.js b/plugin/local/code/inner/syntax.js index f8c62490..d1bce5e5 100644 --- a/plugin/local/code/inner/syntax.js +++ b/plugin/local/code/inner/syntax.js @@ -186,12 +186,10 @@ Volcanos(chat.ONSYNTAX, { function prefix(key, pre) { return key.slice(0, 1).toLowerCase() == key.slice(0, 1)? "- ": ("+ "+(pre? pre+nfs.PT: "")) } if (indent == 0) { switch (ls[0]) { case "package": opts.package = ls[1]; break - case "func": if (ls[1] == "(") { var p = ls.indexOf(")") - push(prefix(ls[p+1])+ls[2]+nfs.PT+ls[p+1]+"()"); break - } + case "func": if (ls[1] == "(") { var p = ls.indexOf(")"); push(prefix(ls[p+1])+ls[2]+nfs.PT+ls[p+1]+"()"); break } case "const": case "var": if (ls[1] == "(") { break } - case "type": push(prefix(ls[1])+ls[1]+(ls[0]=="type"? "{}": "")); break + case "type": push(prefix(ls[1])+ls[1]+(ls[0]=="type"? "{}": ls[0]=="func"? "()": "")); break } opts.stack = [ls[0]] } else if (indent == 4 && opts.stack[0] == "func") { if (text.indexOf("MergeCommands(") > -1) { opts.block = "cmds" } else if (text.indexOf("}") == 0) { opts.block = "" } } else if (indent == 8) { diff --git a/plugin/state.js b/plugin/state.js index a65df0b9..d9de3478 100644 --- a/plugin/state.js +++ b/plugin/state.js @@ -151,7 +151,7 @@ Volcanos(chat.ONACTION, {list: ["刷新数据", )), can.onimport.size(can, can.ConfHeight(), can.ConfWidth(), false, mode) } else { var back = (can._mode_list = can._mode_list||[]).pop(); if (!back) { return } can.onmotion.toggle(can, can._action, back.action), can.onmotion.toggle(can, can._status, back.status) - can.onimport.size(can, back.height, back.width, false, mode), can.page.style(can, can._target, back.style), load && load(back) + can.onimport.size(can, back.height, back.width, false, back.mode), can.page.style(can, can._target, back.style), load && load(back) } }, "刷新数据": function(event, can) { can.Update(event, can.Input()), can.user.toastSuccess(can) },