From 6dda44645e77845c24e8b217d231027086c05566 Mon Sep 17 00:00:00 2001 From: harveyshao Date: Sun, 29 Jan 2023 10:07:00 +0800 Subject: [PATCH] opt panel --- panel/action.css | 2 +- panel/action.js | 13 +++++++------ panel/footer.css | 2 +- panel/footer.js | 34 +++++++++++++++------------------- panel/header.js | 10 +++------- proto.js | 4 +++- 6 files changed, 30 insertions(+), 35 deletions(-) diff --git a/panel/action.css b/panel/action.css index 9c63ddf3..b934d928 100644 --- a/panel/action.css +++ b/panel/action.css @@ -8,7 +8,7 @@ fieldset.Action.tabs>div.output>fieldset>legend { display:none; } fieldset.Action.tabs>div.output>fieldset.plugin:not(.select) { display:none; } fieldset.Header div.Action { display:contents; } fieldset.Header div.Action>div.tabs:not(.hide) { margin-left:20px; display:contents; float:left; } -fieldset.Header div.Action>div.tabs:hover { background-color:none; } +fieldset.Header div.Action>div.tabs:hover { background-color:unset; } fieldset.Header div.tabs>div.tabs { background-color:unset; padding:5px 10px; height:31px; float:left; } fieldset.Header div.tabs>div.tabs:hover { background-color:#6495ed63; } fieldset.Action.tabview>div.output>fieldset.plugin:not(.select) { display:none; } diff --git a/panel/action.js b/panel/action.js index 5c3241de..24d856ad 100644 --- a/panel/action.js +++ b/panel/action.js @@ -9,7 +9,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg) { can.onmotion.clear(can) }, function() { can.isCmdMode() || can.onmotion.delay(can, function() { can.onaction.layout(can) }) }) }, _share: function(can, share) { share && can.runAction({}, web.SHARE, [share], function(msg) { - can.user.title(msg.SearchOrOption(chat.TITLE)), can.setHeader(chat.THEME, msg.SearchOrOption(chat.THEME)), msg.Length() == 1 && can.onengine.signal(can, chat.ONACTION_CMD) + can.user.title(msg.SearchOrOption(chat.TITLE)), can.setHeader(chat.THEME, msg.SearchOrOption(chat.THEME)), msg.Length() == 1 && can.onaction._onaction_cmd(can) can.Conf(chat.RIVER, web.SHARE, chat.STORM, share), can.onimport._init(can, msg) }) }, _tabs: function(can, sub, meta) { @@ -20,8 +20,8 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg) { can.onmotion.clear(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 }, _menu: function(can, msg) { if (can.user.isMobile) { return } - can.setHeaderMenu(can.base.Obj(can.Conf(chat.MENUS)||msg.Option(chat.MENUS), can.onaction._menus), function(event, button, list) { can.core.CallFunc([can.onaction, list[0]], [can, button]) }) - can.page.Select(can, can._root.Header._output, "div.Action", function(target) { can.onmotion.hidden(can, can._header_tabs = can.page.Append(can, target, [html.TABS])._target) }) + var target = can.setHeaderMenu(can.base.Obj(can.Conf(chat.MENUS)||msg.Option(chat.MENUS), can.onaction._menus), function(event, button, list) { can.core.CallFunc([can.onaction, list[0]], [can, button]) }) + can.onmotion.hidden(can, can._header_tabs = can.page.Append(can, target, [html.TABS])._target) }, }) Volcanos(chat.ONACTION, {_init: function(can, target) { @@ -37,9 +37,9 @@ Volcanos(chat.ONACTION, {_init: function(can, target) { }}])._target }); if (!can.Conf(chat.TOOL) && !can.user.mod.isCmd) { return } can._names = location.pathname can.Conf(chat.TOOL)? can.onappend.layout(can, can._output, FLOW, can.core.List(can.Conf(chat.TOOL), function(item, index, list) { item.type = chat.PLUGIN - if (list.length == 1) { can.onengine.signal(can, chat.ONACTION_CMD), item.mode = chat.CMD, item.opts = can.misc.Search(can) } return item + if (list.length == 1) { can.onaction._onaction_cmd(can), item.mode = chat.CMD, item.opts = can.misc.Search(can) } return item })).layout(window.innerWidth, window.innerHeight): can.runAction(can.request(), ctx.COMMAND, [], function(msg) { - if (msg.Length() == 1) { can.onengine.signal(can, chat.ONACTION_CMD) } can.onimport._init(can, msg) + if (msg.Length() == 1) { can.onaction._onaction_cmd(can) } can.onimport._init(can, msg) }) }, onstorm_select: function(can, msg, river, storm) { @@ -51,7 +51,8 @@ Volcanos(chat.ONACTION, {_init: function(can, target) { return can.onimport._init(can, msg) }) }, - onaction_cmd: function(can, msg) { can.page.ClassList.add(can, can._target, can.Mode(chat.CMD)), can.Conf(html.MARGIN_Y, 0), can.Conf(html.MARGIN_X, 0), can.onlayout._init(can) }, + _onaction_cmd: function(can) { can.onengine.signal(can, chat.ONACTION_CMD), can.onlayout._init(can) }, + onaction_cmd: function(can, msg) { can.page.ClassList.add(can, can._target, can.Mode(chat.CMD)), can.Conf(html.MARGIN_Y, 0), can.Conf(html.MARGIN_X, 0) }, onsearch: function(can, msg, arg) { var fields = msg.Option(ice.MSG_FIELDS).split(ice.FS) if (arg[0] == mdb.FOREACH || arg[0] == mdb.PLUGIN) { can.onexport.plugin(can, msg, arg, fields) } if (arg[0] == mdb.FOREACH || arg[0] == ctx.COMMAND) { can.onexport.command(can, msg, arg, fields) } diff --git a/panel/footer.css b/panel/footer.css index 566566d7..5682fc9b 100644 --- a/panel/footer.css +++ b/panel/footer.css @@ -16,8 +16,8 @@ div.view span.keyword { color:#5cadd4; } div.view span.string { color:#f29766; } div.item:not(.string):not(.number):not(.boolean)>span.value { color:silver; font-style:italic; } span.item:not(.string):not(.number):not(.boolean)>span.value { color:silver; font-style:italic; } -fieldset.debug span.path { color:silver; font-style:italic; } fieldset.debug div.output table.content * { font-size:14px; } +fieldset.debug span.path { color:silver; font-style:italic; } body.dark fieldset.debug span.path { color:gray; } body.dark fieldset.debug span.target { color:gray; } body.dark div.item:not(.string):not(.number):not(.boolean)>span.value { color:gray; } diff --git a/panel/footer.js b/panel/footer.js index 3d16264f..0149ae19 100644 --- a/panel/footer.js +++ b/panel/footer.js @@ -12,8 +12,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.ui = {}, can.db }) }, _toast: function(can, msg, target) { can.toast = can.page.Append(can, target, [{view: chat.TOAST, onclick: function(event) { can.onexport[NTIP](can) }}])._target }, _command: function(can, msg, target) { can.onappend.input(can, {type: html.TEXT, name: ice.CMD, onkeydown: function(event) { can.onkeymap.input(event, can) - function close() { can.ui.cli && can.ui.cli.close() } - if (event.key == lang.ESCAPE) { return close() } if (event.key != lang.ENTER) { return } + function close() { can.ui.cli && can.ui.cli.close() } if (event.key == lang.ESCAPE) { return close() } if (event.key != lang.ENTER) { return } switch (event.target.value) { case cli.CLEAR: case cli.CLOSE: close(); break @@ -29,7 +28,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.ui = {}, can.db ncmd: function(can, msg, _follow, _cmds) { can.onimport._data(can, NCMD, {time: can.base.Time(), follow: _follow, cmds: _cmds}), can.onimport.nlog(can, NLOG) }, nlog: function(can, name) { can.onimport.count(can, name) }, }) -Volcanos(chat.ONACTION, {_init: function(can) { if (can.user.mod.isPod || can.user.isExtension) { can.onmotion.hidden(can) } }, +Volcanos(chat.ONACTION, {_init: function(can) { can.user.isExtension || can.onmotion.hidden(can) }, onsize: function(can) { can.ConfHeight(can._target.offsetHeight), can.ConfWidth(can._target.offsetWidth) }, onlogin: function(can, msg) { can.run({}, [], function(msg) { can.onmotion.clear(can), can.onimport._init(can, msg, can._output) }) }, ontoast: function(can, msg) { can.core.CallFunc(can.onimport.toast, {can: can, msg: msg}) }, @@ -49,8 +48,8 @@ Volcanos(chat.ONEXPORT, {height: function(can) { return can._target.offsetHeight Volcanos(chat.ONPLUGIN, { alert: shy("提示", [wiki.CONTENT], function(can, arg) { arg.length > 0 && can.user.alert(arg[0]) }), toast: shy("提示", { - inputs: shy(function(can, sup, msg, arg) { var list = {}; can.core.List(sup[NTIP][arg[0]], function(item) { if (!can.base.contains(item, arg[1])) { return } - if (list[item]) { return } list[item] = true; msg.Push(arg[0], item) + inputs: shy(function(can, sup, msg, arg) { var list = {}; can.core.List(sup[NTIP][arg[0]], function(item) { + if (!can.base.contains(item, arg[1]) || list[item]) { return } list[item] = true; msg.Push(arg[0], item) }) }), create: shy([wiki.CONTENT, wiki.TITLE], function(can, content, title) { can.user.toast(can, content, title) }), }, [html.FILTER, ice.LIST, mdb.CREATE], function(can, msg) { msg.Copy(can[NTIP]), msg.StatusTimeCount() }), @@ -59,7 +58,7 @@ Volcanos(chat.ONPLUGIN, { "w3schools": shy("教程", function(can) { can.user.open("https://www.w3schools.com/colors/colors_names.asp") }), "mozilla": shy("文档", function(can) { can.user.open("https://developer.mozilla.org/en-US/") }), "w3": shy("标准", function(can) { can.user.open("https://www.w3.org/TR/?tag=css") }), - }, ["type:select=log,info,warn,error,debug,wss,onremote", "filter", "list", "prune", "w3schools", "mozilla", "w3"], function(can, msg, arg) { can.onmotion.delay(can, function() { var _can = can, can = msg._can + }, ["type:select=log,info,warn,error,debug,wss,onremote", "filter", "list", "prune", "w3schools", "mozilla", "w3"], function(can, msg, arg, cb) { var _can = can, can = msg._can var stat = {}; var ui = can.page.Appends(can, can._output, [{type: html.TABLE, className: html.CONTENT, list: [{type: html.TR, list: [ {type: html.TH, inner: mdb.TEXT}, ]}].concat(can.core.List(can.misc._list, function(list) { stat[list[2]] = ((stat[list[2]]||0)+1); return (!arg || !arg[0] || arg[0] == "log" || arg[0] == list[2]) && {type: html.TR, list: [ @@ -84,25 +83,22 @@ Volcanos(chat.ONPLUGIN, { ]} })) }]); arg && arg[1] && can.page.Select(can, can._output, html.TR, function(tr) { can.page.ClassList.set(can, tr, html.HIDE, tr.innerText.indexOf(arg[1]) == -1) }) can.onappend._status(can, [ {name: mdb.TIME, value: can.base.Time()}, {name: mdb.COUNT, value: can.page.Select(can, can._output, html.TR+html.NOT_HIDE).length+"x1"}, - ].concat(can.core.List([chat.ONREMOTE, "wss", log.INFO, log.WARN, log.ERROR], function(item) { return {name: item, value: stat[item]||"0"} }))) - }) }), - data: shy("网页数据", [mdb.KEY], function(can, msg, arg) { can.onmotion.delay(can, function() { var can = msg._can - if (can.Option(mdb.KEY)) { - can.page.AppendData(can, can._output, can.Option(mdb.KEY), can.Option(mdb.KEY).split(ice.PT).pop(), can.core.Value(can._root, can.Option(mdb.KEY)), function(prefix, value) { - can.Option(mdb.KEY, prefix) - })._target.click() - } else { can.page.AppendData(can, can._output, "", can._root._name, can._root, function(prefix, value) { can.Option(mdb.KEY, prefix) })._target.click() } - }) }), - view: shy("网页标签", [mdb.KEY], function(can, msg, arg) { can.onmotion.delay(can, function() { var can = msg._can - if (can.Option(mdb.KEY)) { can.page.Append(can, can._output, [can.page.AppendView(can, can.page.SelectOne(can, document.body, can.Option(mdb.KEY))||document.body)]) } else { + ].concat(can.core.List([chat.ONREMOTE, html.WSS, log.INFO, log.WARN, log.ERROR], function(item) { return {name: item, value: stat[item]||"0"} }))) + }), + data: shy("网页数据", [mdb.KEY], function(can, msg, arg, cb) { var can = msg._can + arg[0]? can.page.AppendData(can, can._output, arg[0], arg[0].split(ice.PT).pop(), can.core.Value(can._root, arg[0]), function(prefix, value) { can.Option(mdb.KEY, prefix) })._target.click(): + can.page.AppendData(can, can._output, "", can._root._name, can._root, function(prefix, value) { can.Option(mdb.KEY, prefix) })._target.click() + }), + view: shy("网页元素", [mdb.KEY], function(can, msg, arg, cb) { var can = msg._can + if (arg[0]) { can.page.Append(can, can._output, [can.page.AppendView(can, can.page.SelectOne(can, document.body, arg[0]||document.body)]) } else { var ui = can.page.Append(can, can._output, [can.page.AppendView(can, document, "html", [ can.page.AppendView(can, document.head, "head"), can.page.AppendView(can, document.body, "body", null, false, function(target) { var list = []; for (var p = target; p && p.tagName && p != document.body; p = p.parentNode) { list.push(p.tagName.toLowerCase()+(p.className? ice.PT+p.className.replaceAll(ice.SP, ice.PT).replace(".picker", ""): "")) - } can.Option(mdb.KEY, list.reverse().join(ice.SP+ice.GT+ice.SP)) + } can.Option(mdb.KEY, list.reverse().join(ice.GT)) }), ], true)]); can.onmotion.delay(can, function() { can.page.Select(can, ui._target, "div.item.head,div.item.body", function(target) { target.click() }) }) } - }) }), + }), }) })() diff --git a/panel/header.js b/panel/header.js index 2b516fba..97f788bb 100644 --- a/panel/header.js +++ b/panel/header.js @@ -21,7 +21,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.user.isMobile || can.onimport.menu(can, mdb.SEARCH, function() { can.onengine.signal(can, chat.ONOPENSEARCH, can.request(event, {type: mdb.FOREACH, word: can._search.value||""})) }) }, _time: function(can, target) { can.core.Timer({interval: 100}, function() { can.onimport.time(can, target) }), can.onappend.figure(can, {action: "date"}, target) }, - time: function(can, target) { can.onimport.theme(can), target.innerHTML = can.user.time(can, null, "%w %H:%M:%S") }, + time: function(can, target) { can.onimport.theme(can), target.innerHTML = can.user.time(can, null, can.Conf(mdb.TIME)||"%H:%M:%S %w") }, avatar: function(event, can, avatar) { can.user.isExtension || can.user.isLocalFile || can.runAction(event, aaa.AVATAR, [avatar], function(msg) { can.user.info.avatar = avatar, can.onimport._avatar(can, msg), can.user.toastSuccess(can) }) }, @@ -130,12 +130,8 @@ Volcanos(chat.ONPLUGIN, { msg.Echo(res.Append(mdb.TEXT)).Status(kit.Dict(mdb.LINK, res.Append(mdb.NAME))), can.base.isFunc(cb) && cb(msg) }) }), - avatar: shy("用户头像", [mdb.LINK], function(can, sub, cb) { - can.page.Append(can, sub._output, [{img: can.user.info.avatar, style: kit.Dict(html.MAX_HEIGHT, sub.ConfHeight(), html.MAX_WIDTH, sub.ConfWidth())}]) - }), - background: shy("背景图片", [mdb.LINK], function(can, sub, cb) { - can.page.Append(can, sub._output, [{img: can.user.info.background, style: kit.Dict(html.MAX_HEIGHT, sub.ConfHeight(), html.MAX_WIDTH, sub.ConfWidth())}]) - }), + avatar: shy("用户头像", function(can, sub, cb) { can.page.Append(can, sub._output, [{img: can.user.info.avatar, style: kit.Dict(html.MAX_HEIGHT, sub.ConfHeight(), html.MAX_WIDTH, sub.ConfWidth())}]) }), + background: shy("背景图片", function(can, sub, cb) { can.page.Append(can, sub._output, [{img: can.user.info.background, style: kit.Dict(html.MAX_HEIGHT, sub.ConfHeight(), html.MAX_WIDTH, sub.ConfWidth())}]) }), language: shy("语言地区", {_init: function(can) { can.Option(aaa.LANGUAGE, can.user.info.language||ice.AUTO) }}, ["language:select=auto,zh,en", ice.RUN], function(can, msg, arg) { if (arg[0] == ice.AUTO) { arg[0] = "" } can.runAction(event, aaa.LANGUAGE, [arg[0]], function(msg) { can.user.reload() }) }), diff --git a/proto.js b/proto.js index c4becc66..ffb33b4b 100644 --- a/proto.js +++ b/proto.js @@ -343,7 +343,9 @@ try { if (typeof(window) == lang.OBJECT) { // chrome } } Volcanos.meta._init = function(can) { var last = can.page.width() < can.page.height(); window.onresize = function(event) { can.misc.Event(event, can, function(msg) { if (can.user.isMobile && last === can.page.width() < can.page.height()) { return } last = can.page.width() < can.page.height() - can.onengine.signal(can, chat.ONRESIZE, can.request(event, kit.Dict(html.HEIGHT, window.innerHeight, html.WIDTH, window.innerWidth))) + can.onmotion.delayOnce(can, function() { + can.onengine.signal(can, chat.ONRESIZE, can.request(event, kit.Dict(html.HEIGHT, window.innerHeight, html.WIDTH, window.innerWidth))) + }, 300, can._delay_resize = can._delay_resize||[]) }) } } } else { // nodejs global.kit = kit, global.ice = ice