From 1f918afb98e00a373ff1a5a7cd070842f34532c5 Mon Sep 17 00:00:00 2001 From: shaoying Date: Tue, 4 Oct 2022 08:28:59 +0800 Subject: [PATCH] opt some --- frame.js | 10 +++------- lib/user.js | 4 +--- plugin/local/code/inner.css | 4 ++-- plugin/local/code/inner.js | 16 +++++++++------- plugin/local/code/inner/search.js | 7 ++----- plugin/local/code/vimer.js | 23 ++++++++--------------- plugin/table.js | 2 +- 7 files changed, 26 insertions(+), 40 deletions(-) diff --git a/frame.js b/frame.js index 07a89222..102d85c5 100644 --- a/frame.js +++ b/frame.js @@ -539,12 +539,8 @@ Volcanos(chat.ONLAYOUT, {help: "页面布局", _init: function(can, target) { ta var rect = event.target == document.body? {left: window.innerWidth/2, top: 200, right: window.innerWidth/2, bottom: 200}: event.target.getBoundingClientRect() var layout = right? {left: rect.right, top: rect.top}: {left: rect.left, top: rect.bottom} can.getActionSize(function(left, top, width, height) { left = left||0, top = top||0 - if (layout.top+target.offsetHeight > window.innerHeight) { - layout.top = "", layout.bottom = right? html.ACTION_HEIGHT: window.innerHeight-rect.top - } - if (layout.left+target.offsetWidth > left+width) { - layout.left = "", layout.right = 0 - } + if (layout.top+target.offsetHeight > window.innerHeight) { layout.top = "", layout.bottom = window.innerHeight-top-height, layout.left += rect.width } + if (layout.left+target.offsetWidth > window.innerWidth) { layout.left = "", layout.right = 0 } }) return can.onmotion.move(can, target, layout), layout }, @@ -669,7 +665,7 @@ Volcanos(chat.ONMOTION, {help: "动态特效", _init: function(can, target) { delay: function(can, cb, interval) { can.core.Timer(interval||30, cb) }, delayLong: function(can, cb, interval) { can.core.Timer(interval||300, cb) }, focus: function(can, target) { if (!target) { return } - target.setSelectionRange && target.setSelectionRange(0, -1), target.focus() + target.focus(), target.setSelectionRange && target.setSelectionRange(0, target.value.length) }, share: function(event, can, input, args) { var _args = args return can.user.input(event, can, input, function(args) { diff --git a/lib/user.js b/lib/user.js index dcf5ad17..a4161fd7 100644 --- a/lib/user.js +++ b/lib/user.js @@ -296,9 +296,6 @@ Volcanos("user", {help: "用户操作", info: {}, agent: { })}]}, {view: html.ACTION}, ]}]) - var layout = can.onlayout.figure(event, can, ui._target) - can.page.ClassList.add(can, ui._target, chat.FLOAT) - var action = can.onappend._action(can, button||[html.SUBMIT, html.CANCEL], ui.action, { focus: function(event) { can.page.Select(can, ui.first, html.INPUT_ARGS)[0].focus() }, cancel: function(event) { can.page.Remove(can, ui._target) }, @@ -321,6 +318,7 @@ Volcanos("user", {help: "用户操作", info: {}, agent: { }) if (button === true) { return action.submit(event, can, "submit"), action } + can.page.ClassList.add(can, ui._target, chat.FLOAT); var layout = can.onlayout.figure(event, can, ui._target) can.page.Select(can, ui._target, html.INPUT_ARGS, function(item, index) { index == 0 && can.onmotion.delay(can, function() { can.onmotion.focus(can, item) }) }) diff --git a/plugin/local/code/inner.css b/plugin/local/code/inner.css index 74c17915..a9feb68b 100644 --- a/plugin/local/code/inner.css +++ b/plugin/local/code/inner.css @@ -32,14 +32,14 @@ fieldset.inner.float>div.status { display:none; } fieldset.inner>div.output td.content>div.tabs { display:none; } fieldset.inner>div.output td.content>div.path { display:none; } -fieldset.inner div.output fieldset.toolkit { position:relative; bottom:0px; right:0px; } +fieldset.inner div.output fieldset.toolkit { position:absolute; bottom:0px; right:0px; } fieldset.inner>div.output fieldset.toolkit>div.output>fieldset { display:none; } fieldset.inner>div.output fieldset.toolkit>div.output>fieldset.select { background-color:#0e3369b3; color:white; display:block; z-index:10; } fieldset.inner>div.output fieldset.toolkit>div.output fieldset { display:none; } fieldset.inner>div.output fieldset.toolkit>div.output fieldset.select { background-color:#0e3369b3; color:white; display:block; z-index:10; } fieldset.inner div.output fieldset.toolkit>div.output { position:unset; } -fieldset>div.output>fieldset.plug { position:absolute; bottom:0px; right:0px; } +fieldset>div.output>fieldset.plug { position:inherit; bottom:0px; right:0px; } fieldset>div.output>fieldset.plug { display:none; } fieldset>div.output>fieldset.plug.select { background-color:#0e3369b3; color:white; display:block; z-index:10; } fieldset>div.status legend { float:right; height:30px; } diff --git a/plugin/local/code/inner.js b/plugin/local/code/inner.js index 74bfaeb0..c62aafda 100644 --- a/plugin/local/code/inner.js +++ b/plugin/local/code/inner.js @@ -101,8 +101,9 @@ Volcanos(chat.ONSYNTAX, {help: "语法高亮", _init: function(can, msg, cb) { src: can.misc.MergePodCmd(can, {pod: can.Option(nfs.FILE)}), height: can.ui.content.offsetHeight-4, width: can.ui.content.offsetWidth}], can.ui._content)) } + can.onimport.layout(can) return can.onimport.plug(can, {index: msg.Option(ctx.INDEX), args: can.Option(nfs.PATH) == ctx.COMMAND && can.Option(nfs.LINE) != ctx.INDEX? [can.Option(nfs.LINE)]: []}, can.ui._content, function(sub) { - sub.onimport.size(sub, sub.ConfHeight(can.ui.content.offsetHeight-2*html.ACTION_HEIGHT), sub.ConfWidth(can.ui.content.offsetWidth), true) + sub.onimport.size(sub, sub.ConfHeight(can.ui.content.offsetHeight-3*html.ACTION_HEIGHT+sub.onexport.statusHeight(sub)), sub.ConfWidth(can.ui.content.offsetWidth), true) msg._plugin = sub, can.base.isFunc(cb) && cb(msg._content = can.ui._content), can.onmotion.delay(can, function() { sub.Focus() }) sub.onaction.close = function() { can.onaction.back(can), msg._tab._close() } sub.onimport._open = function(sub, msg, _arg) { var url = can.base.ParseURL(_arg), ls = url.origin.split("/chat/pod/") @@ -280,7 +281,7 @@ Volcanos(chat.ONACTION, {help: "控件交互", _trans: {link: "链接", width: " }, "打开": function(event, can) { can.user.input(can.request(event, {paths: can.sup.paths.join(ice.FS)}), can, [nfs.FILE], function(list) { - if (list[0].indexOf("line:") == 0) { return can.onaction.selectLine(can, parseInt(can.core.Split(list[0], ice.DF, ice.DF)[1])) } + if (list[0].indexOf("line:") == 0) { return can.onaction.selectLine(can, parseInt(can.core.Split(list[0], ice.DF, ice.DF)[1])), can.current.scroll(can.current.scroll()-4) } can.core.List(can.sup.paths, function(path) { if (list[0].indexOf(path) == 0) { can.onimport.tabview(can, path, list[0].slice(path.length)) } }) }) }, @@ -380,7 +381,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar var hash = location.hash; can.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.isCmdMode() && hash) { var args = can.core.Split(decodeURIComponent(hash).slice(1)) - can.onmotion.delay(can, function() { can.onimport.tabview(can, args[args.length-3]||can.Option(nfs.PATH), args[args.length-2]||can.Option(nfs.FILE), args[args.length-1]) }) + can.onmotion.delay(can, function() { can.onimport.tabview(can, args[args.length-3]||can.Option(nfs.PATH), args[args.length-2]||can.Option(nfs.FILE), args[args.length-1]) }, 30) } }), can.base.isFunc(cb) && cb(msg) }, @@ -415,7 +416,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar can.page.styleHeight(can, can.ui.content, content_height-(can.ui.content != can.ui._content? 4: 0)) can.page.styleHeight(can, can.ui.project, height) - var sub = can.ui.content._plugin; sub && sub.onimport.size(content_height-2*html.ACTION_HEIGHT, content_width, true) + var sub = can.ui.content._plugin; sub && sub.onimport.size(sub, content_height-3*html.ACTION_HEIGHT+sub.onexport.statusHeight(sub), content_width, true) can.page.Select(can, can.ui.profile, html.IFRAME, function(iframe) { can.page.Modify(can, iframe, {height: profile_height-html.ACTION_HEIGHT-4, width: profile_width}) }) }, toolkit: function(can, meta, cb) { meta.msg = true @@ -430,13 +431,14 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar can.onmotion.select(can, can.ui.toolkit.output, html.FIELDSET, sub._target), sub.Focus() can.onmotion.select(can, can._status, html.LEGEND, event.target) if (meta.msg == true) { meta.msg = false, sub.Update() } - }, sub._legend.onmouseenter = null, can.base.isFunc(cb) && cb(sub) + }, sub._legend.onmouseenter = null sub.onaction.close = sub.select = function() { return sub._legend.click(), sub } + can.base.isFunc(cb) && cb(sub) }) }, exts: function(can, url, cb) { - can.require([url], function() {}, function(can, name, sub) { sub._init(can, can.base.ParseURL(sub._path), function(sub) { - can.extentions[url.split("?")[0]] = sub, can.base.isFunc(cb) && cb(sub) + can.require([url], function() {}, function(can, name, sub) { name == chat.ONIMPORT && sub._init(can, can.base.ParseURL(sub._path), function(sub) { + can.extentions[url.split("?")[0]] = sub, can.base.isFunc(cb)? cb(sub): sub.select() }) }) }, sess: function(can, sess, cb) { sess = sess||can.user.localStorage(can, "web.code.inner.sess") diff --git a/plugin/local/code/inner/search.js b/plugin/local/code/inner/search.js index decb9f0f..d6a4a5f7 100644 --- a/plugin/local/code/inner/search.js +++ b/plugin/local/code/inner/search.js @@ -26,7 +26,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, args, cb) { {type: html.BUTTON, name: cli.MAKE}, {type: html.BUTTON, name: "history"}, {type: html.BUTTON, name: "last", _trans: "返回"}, - ], function(msg, cmds, cb) { if (can.misc.runAction(can, msg, cmds, cb, kit.Dict( + ], function(can, msg, cmds, cb) { if (can.misc.runAction(can, msg, cmds, cb, kit.Dict( "history", function(cmds) { can.core.List(can.history, function(item) { msg.Push(nfs.FILE, item.file) @@ -51,8 +51,5 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, args, cb) { }, "last", function(cmds) { history.pop(), show(history.pop()) }, ))) { return } can.run(msg, cmds, function(msg) { show(msg) }, true) })) - can.onimport.toolkit(can, {index: SEARCH}, function(sub) { - can.ui.search = sub, can.base.isFunc(cb) && cb(sub) - can.ui.search._show = show - }) + can.onimport.toolkit(can, {index: SEARCH}, function(sub) { can.ui.search = sub, can.ui.search._show = show, can.base.isFunc(cb) && cb(sub) }) }}) diff --git a/plugin/local/code/vimer.js b/plugin/local/code/vimer.js index 9e56ac66..bb32c0a2 100644 --- a/plugin/local/code/vimer.js +++ b/plugin/local/code/vimer.js @@ -83,23 +83,16 @@ Volcanos(chat.ONKEYMAP, {help: "键盘交互", can.page.styleClass(can, can.ui.current, ["current", can.mode]), value can.page.styleClass(can, can.ui.complete, [code.COMPLETE, can.mode]), value }, - _plugin: function(event, can) { can.onkeymap._model(can, "plugin") - can.ui.current.blur() - }, - _normal: function(event, can) { can.onkeymap._model(can, "normal") - can.ui.current.focus() - }, - _insert: function(event, can) { can.onkeymap._model(can, "insert") - can.ui.current.focus(), can.ui.content.scrollLeft -= 10000 - event && can.onkeymap.prevent(event) - }, + _plugin: function(event, can) { can.onkeymap._model(can, "plugin"), can.ui.current.blur() }, + _normal: function(event, can) { can.onkeymap._model(can, "normal"), can.ui.current.focus() }, + _insert: function(event, can) { can.onkeymap._model(can, "insert"), can.ui.current.focus(), event && can.onkeymap.prevent(event) }, _mode: { plugin: { t: shy("添加命令", function(event, can) { can.onaction["添加"](event, can) }), p: shy("添加插件", function(event, can) { can.onaction["插件"](event, can) }), e: shy("添加扩展", function(event, can) { can.onaction["扩展"](event, can) }), - g: shy("搜索", function(event, can) { can.onaction["搜索"](event, can) }), + g: shy("搜索", function(event, can) { can.onimport.exts(can, "inner/search.js") }), i: shy("插入模式", function(event, can) { can.onkeymap._insert(event, can) }), n: shy("命令模式", function(event, can) { can.onkeymap._normal(event, can) }), @@ -270,8 +263,8 @@ Volcanos(chat.ONACTION, {help: "控件交互", }) }, autogen: function(event, can, button) { can.onaction._runs(event, can, button, function(msg) { - can.onimport.tabview(can, can.Option(nfs.PATH), msg.Option(cli.MAIN), "", function() { - can.onimport.tabview(can, can.Option(nfs.PATH), msg.Option(nfs.FILE), "", function() { + can.onimport.tabview(can, msg.Option(nfs.PATH), msg.Option(cli.MAIN), "", function() { + can.onimport.tabview(can, msg.Option(nfs.PATH), msg.Option(nfs.FILE), "", function() { can.ui.source.refresh() }) }, true) @@ -306,10 +299,10 @@ Volcanos(chat.ONACTION, {help: "控件交互", can.onimport.toolkit(can, {index: list[0]}, function(sub) { can.toolkit[list[0]] = sub.select() }) }) }, - "扩展": function(event, can) { + "扩展": function(event, can) { can.request(event, {action: "extension"}) can.user.input(event, can, ["url"], function(list) { var sub = can.extentions[list[0]]; if (sub) { sub.select(); return } - can.onimport.exts(can, list[0], function(sub) { can.extentions[list[0]] = sub.select() }) + can.onimport.exts(can, list[0]) }) }, diff --git a/plugin/table.js b/plugin/table.js index 5c8f1c5c..a4657068 100644 --- a/plugin/table.js +++ b/plugin/table.js @@ -47,7 +47,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar "折叠": function() { can.page.Select(can, zone._target, html.DIV_LIST, function(item) { can.onmotion.toggle(can, item, false) }) }, "展开": function() { can.page.Select(can, zone._target, html.DIV_LIST, function(item) { can.onmotion.toggle(can, item, true) }) }, "刷新": function() { can.onmotion.clear(can, zone._target), zone._init(zone._target) }, - }, ["折叠", "展开", "刷新"]) + }, ["刷新", "折叠", "展开"]) }}, {view: html.ACTION, _init: function(target) { zone._action = target can.onappend._action(can, [{input: html.TEXT, placeholder: "search", onkeyup: function(event) {