From 1ca5eea8e1067ad6cc672c4c57bdc73c8c576240 Mon Sep 17 00:00:00 2001 From: shylinux Date: Thu, 16 Mar 2023 23:05:26 +0800 Subject: [PATCH] opt code --- frame.js | 10 ++++++++-- index.css | 2 +- lib/misc.js | 6 +++--- panel/footer.js | 11 +++++++++++ plugin/local/code/inner.css | 1 + plugin/local/code/inner.js | 5 ++--- plugin/state.js | 20 ++++++++------------ 7 files changed, 34 insertions(+), 21 deletions(-) diff --git a/frame.js b/frame.js index 5dc04246..afb5c857 100644 --- a/frame.js +++ b/frame.js @@ -432,7 +432,13 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { meta.inputs = can.base.getValid(meta.inputs, can.base.Obj(value.list))||[], meta.feature = can.base.getValid(meta.feature, can.base.Obj(value.meta))||{} meta.args = can.base.getValid(can.base.Obj(meta.args), can.base.Obj(meta.arg), can.base.Obj(value.args), can.base.Obj(value.arg))||[] can.onappend._init(can, meta, [chat.PLUGIN_STATE_JS], function(sub, skip) { - sub.run = function(event, cmds, cb) { can.runActionCommand(sub.request(event), sub._index, cmds, cb) } + sub.run = function(event, cmds, cb) { + if (can.base.isFunc(value)) { + can.onengine._plugin(event, can._root, can.request(event), value.can, [meta.index].concat(cmds), cb) + } else { + can.runActionCommand(sub.request(event), sub._index, cmds, cb) + } + } sub._index = value.index||meta.index, can.base.isFunc(cb) && cb(sub, meta, skip) }, target||can._output, field) }, @@ -629,7 +635,7 @@ Volcanos(chat.ONMOTION, {_init: function(can, target) { can.user.copy(event, can, target.innerText), can.base.isFunc(cb) && cb(event) can.onkeymap.prevent(event) } }, - move: function(can, target, layout, cb) { var begin; layout = layout||{} + move: function(can, target, layout) { var begin; layout = layout||{} can.page.style(can, target, layout), target.onmousedown = function(event) { if (event.target != target && !event.ctrlKey) { return } can.onkeymap.prevent(event) layout.height = target.offsetHeight, layout.width = target.offsetWidth diff --git a/index.css b/index.css index a1eb2760..e75c9a51 100644 --- a/index.css +++ b/index.css @@ -148,7 +148,7 @@ div.tabs span.icon:hover { background-color:aliceblue; color:black; } div.tabs>div:hover span.icon { visibility:visible; } div.action>div.tabs:hover span.icon { visibility:visible; } div.tabs>div.select span.icon { visibility:visible; } -div.code { position:sticky; left:0; } +// div.code { position:sticky; left:0; } div.plug { font-style:italic; } div.item.text { position:relative; } div.item.text>span.icon.delete { font-size:20px; line-height:28px; position:absolute; top:2px; right:10px; visibility:hidden; } diff --git a/lib/misc.js b/lib/misc.js index ea5734ae..2138cf06 100644 --- a/lib/misc.js +++ b/lib/misc.js @@ -37,11 +37,11 @@ Volcanos("misc", { default: delete(msg[key]) } }, Copy: function(res) { if (!res) { return msg } - res.append && (msg.append = res.append) && res.append.forEach(function(key) { + res.append && res.append.length > 0 && (msg.append = res.append) && res.append.forEach(function(key) { var i = msg.option && msg.option.indexOf(key); if (i > -1) { msg.option[i] = "", delete(msg[key]) } res[key] && (msg[key] = (msg[key]||[]).concat(res[key])) - }), res.result && (msg.result = (msg.result||[]).concat(res.result)) - res.option && (msg.option = res.option) && res.option.forEach(function(key) { res[key] && (msg[key] = res[key]) }) + }), res.result && res.result.length > 0 && (msg.result = (msg.result||[]).concat(res.result)) + res.option && res.option.length > 0 && (msg.option = res.option) && res.option.forEach(function(key) { res[key] && (msg[key] = res[key]) }) res._option && (msg._option = res._option) && res._option.forEach(function(key) { res[key] && (msg[key] = res[key]) }) return msg }, diff --git a/panel/footer.js b/panel/footer.js index e1c982e3..98af2c8f 100644 --- a/panel/footer.js +++ b/panel/footer.js @@ -36,6 +36,17 @@ Volcanos(chat.ONACTION, {_init: function(can) { can.ui = {}, can.db = {} }, onlayout: function(can, layout) { can.onmotion.toggle(can, can._target, !layout || layout == html.TABS) }, onaction_cmd: function(can) { can.onappend.style(can, html.HIDE) }, oncommand_focus: function(can) { can.page.Select(can, can._output, ["div.cmd", html.INPUT], function(target) { can.onmotion.focus(can, target) }) }, + + ondebugs: function(can, msg) { can.runAction({}, msg.Option(ctx.ACTION), [msg.Option(ctx.INDEX)], function(_msg) { + _msg.Table(function(item) { item.mode = chat.FLOAT + can.onappend.plugin(can, item, function(sub) { + sub.run = function(event, cmds, cb) { can.run(event, [ctx.ACTION, msg.Option(ctx.ACTION), ice.RUN].concat(cmds), cb) } + can.getActionSize(function(left, top, width, height) { sub.onimport.size(sub, sub.ConfHeight(height/2), sub.ConfWidth(width), true) + can.onmotion.move(can, sub._target, {left: left||0, top: (top||0)+height/4}) + }), sub.onaction.close = function() { can.page.Remove(can, sub._target) } + }, document.body) + }) + }) }, }) Volcanos(chat.ONEXPORT, {height: function(can) { return can._target.offsetHeight }, ntip: function(can) { can.onexport._float(can, NTIP, "can.toast") }, diff --git a/plugin/local/code/inner.css b/plugin/local/code/inner.css index 6e83d4fa..b9a595f5 100644 --- a/plugin/local/code/inner.css +++ b/plugin/local/code/inner.css @@ -24,6 +24,7 @@ fieldset.inner>div.output>div.project>div.zone fieldset.plug { position:static; fieldset.inner>div.output>div.layout.flow>div.layout>div.content * { font-family:monospace; font-size:14px; outline:none; } fieldset.inner>div.output>div.layout.flow>div.tabs { font-family:monospace; font-size:14px; display:none; } fieldset.inner>div.output>div.layout.flow>div.path { font-family:monospace; font-size:14px; display:none; } +fieldset.inner>div.output>div.layout.flow>div.display div.status>div { padding:5px; float:left; } fieldset.inner>div.output>div.layout.flow { position:relative; } fieldset.inner.cmd>div.output>div.project { border-right:dimgray solid 1px; } fieldset.inner.cmd>div.output div.profile { border-left:dimgray solid 1px; } diff --git a/plugin/local/code/inner.js b/plugin/local/code/inner.js index b4ac705c..f2020241 100644 --- a/plugin/local/code/inner.js +++ b/plugin/local/code/inner.js @@ -23,10 +23,9 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb, target) { can.onmotion.cl if (can.misc.sessionStorage(can, TABVIEW_HIDE) == html.HIDE) { can.onmotion.hidden(can, can.ui.project), can.onmotion.hidden(can, can.ui.tabs) } case chat.FULL: // no break default: can.onimport.project(can, paths), can.onimport._tabs(can) + var last = can.misc.localStorage(can, CURRENT_FILE); can.onmotion.delay(can, function() { can.core.Next(files.slice(1), function(file, next) { can.onimport._tabview(can, paths[0], file, "", next) }, function() { - if (can.user.isWebview) { var last = can.misc.localStorage(can, CURRENT_FILE); if (last) { - var ls = can.core.Split(last, ice.DF); ls.length > 0 && can.onimport._tabview(can, ls[0], ls[1], ls[2]) - } } + if (can.user.isWebview && last) { var ls = can.core.Split(last, ice.DF); ls.length > 0 && can.onimport._tabview(can, ls[0], ls[1], ls[2]) } }) }) } var args = can.misc.SearchHash(can); can.db.tabview[can.onexport.keys(can)] = msg can.onimport.tabview(can, can.Option(nfs.PATH), can.Option(nfs.FILE), can.Option(nfs.LINE), function() { if (!can.user.isWebview && args.length > 0 && can.isCmdMode()) { diff --git a/plugin/state.js b/plugin/state.js index d0d682c9..8bee9775 100644 --- a/plugin/state.js +++ b/plugin/state.js @@ -19,12 +19,12 @@ Volcanos(chat.ONIMPORT, { var msg = can.request(); msg.Echo(sub.Conf(ice.MSG_RESULT)), can.onappend._output(sub, msg, sub.Conf(ctx.DISPLAY)) })(); return }; var opt = can.base.Obj(item[ice.OPT], []) sub.run = function(event, cmds, cb) { var res = can.request(event, can.Option(), opts); for (var i = 0; i < opt.length; i += 2) { res.Option(opt[i], opt[i+1]) } - can.run(event, (msg.Option("_index") == can._index? msg[ice.MSG_PREFIX]||[]: [ice.RUN, msg.Option("_index")]).concat(cmds), cb, true) + can.run(event, (msg.Option("_index") == can._index || can._index.indexOf("can.") == 0? msg[ice.MSG_PREFIX]||[]: [ice.RUN, msg.Option("_index")]).concat(cmds), cb, true) sub.onimport.size(sub, height, can.ConfWidth(), true) } }) }) }, - _float: function(can, msg) { var arg = msg._arg; msg.Table(function(item) { can.onappend._plugin(can, item, {index: item.index, args: arg.slice(1), mode: chat.FLOAT}, function(sub, meta) { + _float: function(can, msg) { var arg = msg._arg; msg.Table(function(item) { can.onappend._plugin(can, item, {index: item.index, args: arg? arg.slice(1): [], mode: chat.FLOAT}, function(sub, meta) { sub.run = function(event, cmds, cb) { can.runAction(can.request(event, {path: msg.Option(nfs.PATH), text: msg.Option(mdb.TEXT)}), [ice.RUN, arg[0]], cmds, cb) } can.getActionSize(function(left, top, width, height) { left = left||0, top = !can.Mode()? 120: 0, can.onmotion.move(can, sub._target, {left: left, top: top}) sub.onimport.size(sub, can.base.Max(height, can.page.height())-top-(can.user.isMobile&&!can.user.isLandscape()? 2*html.ACTION_HEIGHT: 0), width, true) @@ -63,7 +63,7 @@ Volcanos(chat.ONIMPORT, { 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) { @@ -113,17 +113,13 @@ Volcanos(chat.ONACTION, {list: [ "清空数据": function(event, can) { can.onmotion.clear(can, can._output) }, "删除工具": function(event, can) { can.page.Remove(can, can._target) }, + "查看文档": function(event, can) { can.onengine.signal(can, "ondebugs", can.request(event, {action: ice.HELP, index: can.Conf(ctx.INDEX)})) }, + "查看脚本": function(event, can) { can.onengine.signal(can, "ondebugs", can.request(event, {action: nfs.SCRIPT, index: can.Conf(ctx.INDEX)})) }, + "查看源码": function(event, can) { can.onengine.signal(can, "ondebugs", can.request(event, {action: nfs.SOURCE, index: can.Conf(ctx.INDEX)})) }, + "查看配置": function(event, can) { can.onengine.signal(can, "ondebugs", can.request(event, {action: ctx.CONFIG, index: can.Conf(ctx.INDEX)})) }, "查看日志": function(event, can) { var sub = can._outputs[0]; sub.onimport.tool(sub, ["can.debug"], function(sub) { sub.select() }) }, "打包页面": function(event, can) { can.onengine.signal(can, "onwebpack", can.request(event)) }, - "查看文档": function(event, can) { can.runAction(event, ctx.CONFIG, [ice.HELP]) }, - "查看脚本": function(event, can) { can.runAction(event, ctx.CONFIG, [nfs.SCRIPT]) }, - "查看源码": function(event, can) { can.runAction(event, ctx.CONFIG, [nfs.SOURCE]) }, - "查看配置": function(event, can) { can.runAction(event, ctx.CONFIG, [mdb.SELECT]) }, - "清理配置": function(event, can) { can.runActionInputs(event, [ctx.ACTION, mdb.PRUNES]) }, - "导出配置": function(event, can) { can.runAction(event, mdb.EXPORT) }, - "导入配置": function(event, can) { can.runAction(event, mdb.IMPORT) }, - "删除配置": function(event, can) { can.runAction(event, ctx.CONFIG, [mdb.REMOVE], function() { can.user.toastProcess(can), can.onmotion.delay(can, function() { can.user.toastSuccess(can), can.Update() }, 1000) }) }, - + refresh: function(event, can) { var sub = can.core.Value(can, chat._OUTPUTS_CURRENT); if (sub) { sub.ConfHeight(can.ConfHeight()), sub.ConfWidth(can.ConfWidth()), sub.onimport.layout(sub) } }, close: function(event, can) { if (can.isCmdMode()) {