From 80ce58801f79c55807314ad1705fecf735e2f767 Mon Sep 17 00:00:00 2001 From: shy Date: Fri, 22 Dec 2023 22:59:48 +0800 Subject: [PATCH] opt debug --- frame.js | 8 +++++++- index.css | 12 ++++++++++-- lib/core.js | 2 +- lib/page.js | 8 ++++---- panel/footer.css | 8 ++++---- panel/footer.js | 17 +++++++++++++---- plugin/local/code/vimer.js | 6 +++--- plugin/state.js | 25 +++++++++++++++++-------- plugin/story/json.js | 8 ++++---- 9 files changed, 63 insertions(+), 31 deletions(-) diff --git a/frame.js b/frame.js index a3932c20..253bf4f9 100644 --- a/frame.js +++ b/frame.js @@ -552,7 +552,8 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { plugin: function(can, meta, cb, target, field) { meta = meta||{}, meta.index = meta.index||can.core.Keys(meta.ctx, meta.cmd)||ice.CAN_PLUGIN, meta._space = meta._space||can.ConfSpace() var res = {}; function _cb(sub, meta, skip) { kit.proto(res, sub), cb && cb(sub, meta, skip) } if (meta.inputs && meta.inputs.length > 0 || meta.meta) { can.onappend._plugin(can, {meta: meta.meta, list: meta.list}, meta, _cb, target, field); return res } - var value = can.onengine.plugin(can, meta.index); if (value) { can.onappend._plugin(can, value, meta, function(sub, meta, skip) { value.meta && value.meta._init && value.meta._init(sub, meta), _cb(sub, meta, skip) }, target, field); return res } + var value = can.onengine.plugin(can, meta.index); if (value) { can.onappend._plugin(can, value, meta, function(sub, meta, skip) { + value.meta && value.meta._init && value.meta._init(sub, meta), _cb(sub, meta, skip) }, target, field); return res } can.runAction(can.request({}, {_method: http.GET, pod: meta.space})._caller(), ctx.COMMAND, [meta.index], function(msg) { msg.Table(function(value) { can.onappend._plugin(can, value, meta, _cb, target, field) })}); return res }, _plugin: function(can, value, meta, cb, target, field) { can.base.Copy(meta, value, true) @@ -573,6 +574,11 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { _float: function(can, index, args, cb) { can.onappend.plugin(can, typeof index == code.OBJECT? (index.mode = chat.FLOAT, index.args = args, index): {index: index, args: args, mode: chat.FLOAT}, function(sub) { sub.onmotion.float(sub), sub.onaction.close = function() { can.page.Remove(can, sub._target) }, cb && cb(sub) + sub._target.onclick = function(event) { + can.page.Select(can, document.body, "fieldset.float", function(target) { + can.page.style(can, target, "z-index", target == sub._target? 10: 9) + }) + } }, can._root._target) }, figure: function(can, meta, target, cb) { if (meta.type == html.SELECT || meta.type == html.BUTTON) { return } diff --git a/index.css b/index.css index d3cb24a6..7f8a9399 100644 --- a/index.css +++ b/index.css @@ -310,7 +310,8 @@ fieldset>form.option>div.text>span.value { white-space:pre; padding:var(--input-padding) var(--button-padding); max-width:320px; height:var(--action-height); overflow:auto; } fieldset.plug>form.option>div.text>span.value { display:none; } fieldset:not(.float)>form.option>div.text>span.value { display:none; } -fieldset.float:not(.plug)>form.option>div.text>input { display:none; } +fieldset.float:not(.plug)>form.option>div.text:not(.filter)>input { display:none; } +fieldset.float:not(.plug)>form.option>div.text.filter>span.value { display:none; } fieldset.float:not(.plug)>form.option>div.text>span.icon { display:none; } fieldset.float:not(.plug)>form.option>div.item:last-child { margin-right:var(--action-height); } fieldset.float:not(.plug)>div.action>div.item:last-child { margin-right:var(--action-height); } @@ -601,8 +602,15 @@ fieldset.web.chat.location>div.output .amap-controls { z-index:unset; } fieldset.web.chat.location>div.output .amap-maptypecontrol { z-index:unset; } fieldset.web.chat.location>div.output>div.layout>div.layout>div.profile { background-color:var(--plugin-bg-color); position:absolute; right:0; width:360px; z-index:9; border-left:none; } fieldset.web.chat.iframe>form.option input[name=hash] { width:var(--river-width); } +fieldset.can.data>div.output { font-family:var(--code-font-family); font-size:14px; white-space:pre; } +fieldset.can.data>div.output div.item { display:flex; gap:5px; } +fieldset.can.data>div.output div.item>span.icon { color:var(--disable-fg-color); } +fieldset.can.data>div.output div.item.string>span.value { color:var(--code-string); } +fieldset.can.data>div.output div.item.number>span.value { color:var(--code-constant); } +fieldset.can.data>div.output div.item.object>span.value { color:var(--disable-fg-color); } +fieldset.can.data>div.output div.item.target>span.value { color:var(--disable-fg-color); } +fieldset.can.data>div.output div.item.function>span.value { color:var(--disable-fg-color); } fieldset.can.view { font-size:14px; } -fieldset.can.data { font-size:14px; } fieldset.Search div.story[data-type=spark] { margin:0; } fieldset.Search>div.output>div.profile { border-left:none; width:unset; } fieldset.Action.tabs table.content { width:100%; } diff --git a/lib/core.js b/lib/core.js index c839133a..d25ae679 100644 --- a/lib/core.js +++ b/lib/core.js @@ -95,7 +95,7 @@ Volcanos("core", { if (obj && obj.detail && obj.option) { obj["detail"] && keys.push("detail") obj["option"] && keys.push("option") - keys = keys.concat(obj.option, obj.append) + keys = keys.concat(obj.option, obj.append||[]) obj["append"] && keys.push("append") obj["result"] && keys.push("result") } else { diff --git a/lib/page.js b/lib/page.js index 64cba8e6..4e97f3d5 100644 --- a/lib/page.js +++ b/lib/page.js @@ -150,9 +150,9 @@ Volcanos("page", { return {view: mdb.VIEW, list: [ {view: [[html.ITEM, target.tagName && target.tagName.toLowerCase()]], list: [ {text: (target.children.length > 0? can.page.unicode.close: lex.SP)+lex.SP, _init: function(target) { ui.toggle = target }}, - {className: code.KEYWORD, text: can.page.replace(can, ice.LT)}, {className: code.KEYWORD, text: tag}, {type: html.SPAN, list: _field}, - {className: code.KEYWORD, text: can.page.replace(can, ice.GT)}, inner && {text: inner, _init: function(target) { ui.inner = target }}, - isclose && {className: code.KEYWORD, text: can.page.replace(can, ice.LT+nfs.PS+tag+ice.GT), _init: function(target) { ui._close = target }}, + {className: code.KEYWORD, text: can.page.trans(can, ice.LT)}, {className: code.KEYWORD, text: tag}, {type: html.SPAN, list: _field}, + {className: code.KEYWORD, text: can.page.trans(can, ice.GT)}, inner && {text: inner, _init: function(target) { ui.inner = target }}, + isclose && {className: code.KEYWORD, text: can.page.trans(can, ice.LT+nfs.PS+tag+ice.GT), _init: function(target) { ui._close = target }}, ], onclick: function(event) { ui.toggle.innerText = (can.onmotion.toggle(can, ui.list)? can.page.unicode.open: can.page.unicode.close)+lex.SP ui.inner && can.onmotion.toggle(can, ui.inner), can.onmotion.toggle(can, ui.close), can.onmotion.toggle(can, ui._close) if (!loaded) { if (can.page.tagis(target, ctx.STYLE, nfs.SCRIPT)) { can.page.Append(can, ui.list, [{text: target.innerHTML}]) } else { @@ -163,7 +163,7 @@ Volcanos("page", { !can.page.tagis(target, nfs.SCRIPT) && can.onappend.style(can, "picker", target) }, _init: function(target) { can.onmotion.delay(can, function() { loaded && target.click() }) }}, isclose && {view: [[html.LIST, html.HIDE]], style: {"margin-left": "20px"}, _init: function(target) { ui.list = target }, list: list}, - isclose && {view: [[html.ITEM, html.HIDE]], list: [{text: " "}, {className: code.KEYWORD, text: can.page.replace(can, ice.LT+nfs.PS+tag+ice.GT)}], _init: function(target) { ui.close = target }}, + isclose && {view: [[html.ITEM, html.HIDE]], list: [{text: " "}, {className: code.KEYWORD, text: can.page.trans(can, ice.LT+nfs.PS+tag+ice.GT)}], _init: function(target) { ui.close = target }}, ]} }, AppendStyle: function(can, style) { diff --git a/panel/footer.css b/panel/footer.css index 4da3eec0..3ea7951e 100644 --- a/panel/footer.css +++ b/panel/footer.css @@ -15,11 +15,11 @@ body.mobile fieldset.Footer>div.output { font-style:italic; height:var(--footer- body.mobile fieldset.Footer>div.output div.toast { display:none; } body.mobile fieldset.Footer>div.output div.cmd { display:none; } -.picker { box-shadow:4px 4px 20px 4px #626bd0; } -div.view span.keyword { color:#5cadd4; } +.picker { box-shadow:0px 2px 10px 5px #626bd0 !important; } 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; } +div.view span.keyword { color:#5cadd4; } +div.item:not(.string):not(.number):not(.boolean)>span.value { color:var(--disable-fg-color); font-style:italic; } +span.item:not(.string):not(.number):not(.boolean)>span.value { color:var(--disable-fg-color); 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; } diff --git a/panel/footer.js b/panel/footer.js index 9a9c9102..e3be8cbb 100644 --- a/panel/footer.js +++ b/panel/footer.js @@ -79,7 +79,11 @@ Volcanos(chat.ONPLUGIN, { 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.db[NTIP]), msg.StatusTimeCount() }), + }, [html.FILTER, ice.LIST, mdb.CREATE], function(can, msg, arg) { + arg[0]? can.db[NTIP].Table(function(value) { + msg.append = [mdb.TIME, "title", "content"], (value.title == arg[0] || value.content.indexOf(arg[0]) > -1) && msg.Push(value) + }): msg.Copy(can.db[NTIP]), msg.StatusTimeCount() + }), debug: shy("网页日志", { "prune": shy("清空", function(can) { while(can.misc._list.pop()) {} can.onmotion.clear(can) }), "w3schools": shy("教程", function(can) { can.user.open("https://www.w3schools.com/colors/colors_names.asp") }), @@ -113,11 +117,16 @@ Volcanos(chat.ONPLUGIN, { ].concat(can.core.List([log.INFO, log.WARN, log.ERROR, chat.ONREMOTE, html.WSS], 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(nfs.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() + var root = can.Conf("_target")||can._root + arg[0]? can.page.AppendData(can, can._output, arg[0], arg[0].split(nfs.PT).pop(), can.core.Value(root, arg[0]), function(prefix, value) { can.Option(mdb.KEY, prefix) })._target.click(): + can.page.AppendData(can, can._output, "", root._name, 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 { + if (can.Conf("_target")) { + can.page.Append(can, can._output, [can.page.AppendView(can, can.Conf("_target"))]) + } else if (arg[0]) { + can.page.Append(can, can._output, [can.page.AppendView(can, can.page.SelectOne(can, document.body, arg[0]))]) + } else { var ui = can.page.Append(can, can._output, [can.page.AppendView(can, document, "html", [ can.page.AppendView(can, document.head, html.HEAD), can.page.AppendView(can, document.body, html.BODY, null, false, function(target) { var list = []; for (var p = target; p && p.tagName && p != document.body; p = p.parentNode) { diff --git a/plugin/local/code/vimer.js b/plugin/local/code/vimer.js index 8e4a3f2b..354d5557 100644 --- a/plugin/local/code/vimer.js +++ b/plugin/local/code/vimer.js @@ -36,10 +36,10 @@ Volcanos(chat.ONFIGURE, { if (msg.result && msg.result.indexOf(item.path) > -1) { can.onmotion.delay(can, function() { can.onappend.style(can, mdb.MODIFY, target.parentNode) for (var _target = target.parentNode; _target != zone._target; _target = _target.parentNode) { _target.previousSibling && can.onappend.style(can, mdb.MODIFY, _target.previousSibling) } }) } - }, item._menu = shy(kit.Dict( - mdb.CREATE, function(event, button) { can.onaction.script(can.request(event, {path: path}), can, nfs.SCRIPT) }, + }, item._menu = {meta: kit.Dict( + mdb.CREATE, function(event, button) { can.onaction.script(can.request(event, {path: path, file: item.path}), can, nfs.SCRIPT) }, nfs.TRASH, function(event, button) { can.runAction(event, nfs.TRASH, [path+item.path], function(msg) { show(target, zone, path) }) }, - )); return item + )}; return item }); cache = can.onimport.tree(can, list, nfs.PATH, nfs.PS, function(event, item) { can.onimport.tabview(can, path, item.path) }, target, cache) }, true) } if (path.length == 1) { return show(target, zone, path[0]) } can.page.Remove(can, zone._action) can.onimport.zone(can, can.core.List(path, function(path) { return kit.Dict(mdb.NAME, path, path == args[0]? chat._INIT: chat._DELAY_INIT, function(target, zone) { show(target, zone, path) }) }), target) diff --git a/plugin/state.js b/plugin/state.js index 63165ec0..875b575e 100644 --- a/plugin/state.js +++ b/plugin/state.js @@ -81,7 +81,13 @@ Volcanos(chat.ONACTION, {list: [ "刷新数据", "刷新界面", "切换浮动", "切换全屏", "共享工具", "打开链接", "生成链接", ["视图", "参数", "操作", "状态", "专注", "项目", "预览", "演示"], ["数据", "保存参数", "清空参数", "复制数据", "下载数据", "添加工具", "清空数据"], - ["调试", "查看文档", "查看脚本", "查看源码", "查看配置", "查看数据", "查看日志", "删除工具"], + ["调试", + "查看文档", "查看脚本", "查看源码", + "查看视图", "查看数据", "查看通知", + "会话存储", "本地存储", + "查看报文", "查看配置", "查看日志", + "删除工具", + ], ], _engine: function(event, can, button) { can.Update(event, [ctx.ACTION, button].concat(can.Input())) }, _switch: function(can, sub, mode, save, load) { @@ -143,17 +149,20 @@ Volcanos(chat.ONACTION, {list: [ "打包页面": function(event, can) { can.onengine.signal(can, "onwebpack", can.request(event)) }, "查看文档": function(event, can) { can.requests(event, {action: ice.HELP}), can.onengine.signal(can, "ondebugs", can.requestPodCmd(event)) }, - "查看脚本": function(event, can) { can.onappend._float(can, web.CODE_INNER, can.misc.SplitPath(can, can.sub._path)) }, - "查看源码": function(event, can) { can.requests(event, {action: nfs.SOURCE}), can.onengine.signal(can, "ondebugs", can.requestPodCmd(event)) }, - "查看配置": function(event, can) { can.requests(event, {action: ctx.CONFIG}), can.onengine.signal(can, "ondebugs", can.requestPodCmd(event)) }, - "查看数据": function(event, can) { var msg = can._msg + "查看报文": function(event, can) { var msg = can._msg can.onappend._float(can, {title: "msg", index: ice.CAN_PLUGIN, display: "/plugin/story/json.js"}, [], function(sub) { sub.run = function(event, cmds, cb) { var _msg = can.request(event); _msg.result = [JSON.stringify(msg)], cb(_msg) } }) }, - "查看日志": function(event, can) { var logid = can.Status("log.id") - can.onappend._float(can, web.CODE_XTERM, ["sh", logid, "grep "+logid+" var/log/bench.log | grep -v grep | grep -v '"+logid+" $'"]) - }, + "查看通知": function(event, can) { can.onappend._float(can, {index: "can.toast"}, [can.ConfIndex()]) }, + "查看视图": function(event, can) { can.onappend._float(can, {index: "can.view", _target: can._target}) }, + "查看数据": function(event, can) { can.onappend._float(can, {index: "can.data", _target: can}) }, + "会话存储": function(event, can) { can.onappend._float(can, {index: "can.sessionStorage"}, [can.ConfIndex()]) }, + "本地存储": function(event, can) { can.onappend._float(can, {index: "can.localStorage"}, [can.ConfIndex()]) }, + "查看脚本": function(event, can) { can.onappend._float(can, web.CODE_INNER, can.misc.SplitPath(can, can.sub._path)) }, + "查看源码": function(event, can) { can.requests(event, {action: nfs.SOURCE}), can.onengine.signal(can, "ondebugs", can.requestPodCmd(event)) }, + "查看配置": function(event, can) { can.requests(event, {action: ctx.CONFIG}), can.onengine.signal(can, "ondebugs", can.requestPodCmd(event)) }, + "查看日志": function(event, can) { var logid = can.Status("log.id"); can.onappend._float(can, web.CODE_XTERM, ["sh", logid, "grep "+logid+" var/log/bench.log | grep -v grep | grep -v '"+logid+" $'"]) }, "删除工具": function(event, can) { can.onaction._close(event, can) }, refresh: function(event, can) { can.onimport.size(can, can.ConfHeight(), can.ConfWidth(), true, can.Mode()) }, diff --git a/plugin/story/json.js b/plugin/story/json.js index 3a11fa6f..f5e08222 100644 --- a/plugin/story/json.js +++ b/plugin/story/json.js @@ -1,7 +1,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onmotion.clear(can, target), can.onappend.table(can, msg) can.onappend.style(can, nfs.JSON, can._output), can.onimport.show(can, can.base.Obj(msg.Result(), {}), target) }, - show: function(can, data, target) { + show: function(can, data, target) { var hidden = data.detail && data.option function show(data, target, index, total) { var list switch (typeof data) { case code.OBJECT: if (data == null) { can.page.Append(can, target, [{text: "null"}]); break } @@ -13,9 +13,9 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onmotion.clear( function toggle(list) { return list && can.onmotion.toggle(can, list) } function _item() { return can.page.Append(can, list = list || can.page.Append(can, target, [html.LIST])._target, [html.ITEM])._target } if (can.base.isArray(data)) { var inner = "" - if (can.core.List(data, function(item) { if (can.base.isIn(typeof item, code.STRING, code.NUMBER, code.BOOLEAN)) { return item } }).length == data.length) { + if (hidden && can.core.List(data, function(item) { if (can.base.isIn(typeof item, code.STRING, code.NUMBER, code.BOOLEAN)) { return item } }).length == data.length) { inner = [], can.core.List(data, function(item, index) { - inner.push({text: [format(item), "", [code.STRING, "inner"]]}, index < data.length-1 && {text: [", ", "", ["inner"]]}) + inner.push({text: [format(item), "", [code.STRING, code.INNER]]}, index < data.length-1 && {text: [", ", "", [code.INNER]]}) }) } wrap("[", "]", data.length > 0, function() { can.core.List(data, function(value, index) { var item = _item() @@ -25,7 +25,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onmotion.clear( wrap("{", "}", length > 0, function() { can.core.Item(data, function(key, value) { var item = _item() can.page.Append(can, item, [{text: [format(key)], onclick: function(event) { var display = !toggle(sub); can.page.SelectChild(can, sub.parentNode, "span.inner", function(target) { can.onmotion.toggle(can, target, display) }) - }}, {text: ": "}]); var sub = show(value, item, count++, length); can.onmotion.hidden(can, sub) + }}, {text: ": "}]); var sub = show(value, item, count++, length); hidden && sub && can.onmotion.hidden(can, sub) }) }) } break case code.STRING: can.page.Append(can, target, [{text: [format(data), "", code.STRING]}]); break