From ef95c993e5848d04b8d66deb108da1173d369dea Mon Sep 17 00:00:00 2001 From: harveyshao Date: Tue, 31 Jan 2023 00:00:08 +0800 Subject: [PATCH] opt search.js --- frame.js | 4 ++-- panel/action.js | 2 +- panel/search.css | 1 + panel/search.js | 20 ++++++++++++-------- plugin/local/code/inner.js | 7 +++++-- plugin/local/code/vimer.js | 1 + plugin/table.js | 2 +- proto.js | 2 +- 8 files changed, 24 insertions(+), 15 deletions(-) diff --git a/frame.js b/frame.js index 10b91b34..28e5d1ae 100644 --- a/frame.js +++ b/frame.js @@ -290,8 +290,8 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { {type: html.FIELDSET_PANEL, name: [chat.FOOTER], list: [{type: html.DIV_OUTPUT, list: [{type: html.DIV, style: [ITEM_HOVER_STYLE]}], }]}, {type: html.FIELDSET_PANEL, name: [chat.FOOTER], list: [{type: html.DIV_OUTPUT, list: [{type: html.DIV_TOAST, style: [TABLE_HEAD_STYLE]}], }]}, {type: html.FIELDSET_PANEL, name: [chat.ACTION], list: [{type: html.DIV_OUTPUT, style: [OUTPUT_STYLE]}]}, - {type: html.FIELDSET_PLUGIN, style: [PLUGIN_STYLE]}, {type: html.FIELDSET_PLUGIN, list: [{type: html.DIV_STATUS, style: {"border-top": color.border+SOLID}}]}, - {type: html.FIELDSET_STORY, style: [PLUGIN_STYLE]}, {type: html.FIELDSET_STORY, list: [{type: html.DIV_STATUS, style: {"border-top": color.border+SOLID}}]}, + {type: html.FIELDSET_PLUGIN, style: [PLUGIN_STYLE]}, {type: html.FIELDSET_PLUGIN, list: [{type: ice.GT+html.DIV_STATUS, style: {"border-top": color.border+SOLID}}]}, + {type: html.FIELDSET_STORY, style: [PLUGIN_STYLE]}, {type: html.FIELDSET_STORY, list: [{type: ice.GT+html.DIV_STATUS, style: {"border-top": color.border+SOLID}}]}, {type: html.FIELDSET_INPUT, list: [{type: html.DIV_OUTPUT, style: [PLUGIN_STYLE]}], style: [PLUGIN_STYLE]}, {type: html.FIELDSET_INPUT, style: _b_r(0)}, {type: html.FIELDSET_INPUT, list: [{type: html.TD, name: [html.SELECT], style: _bg(color.output)}]}, {type: html.FIELDSET_INPUT, list: [{type: html.TD, name: [html.HOVER], style: _bg(color.hover)}]}, diff --git a/panel/action.js b/panel/action.js index e5b6a849..61e26096 100644 --- a/panel/action.js +++ b/panel/action.js @@ -142,7 +142,7 @@ Volcanos(chat.ONKEYMAP, { ":": function(event, can) { can.onengine.signal(can, chat.ONCOMMAND_FOCUS), can.onkeymap.prevent(event) }, " ": function(event, can) { can.onengine.signal(can, chat.ONSEARCH_FOCUS), can.onkeymap.prevent(event) }, Enter: function(event, can) { can.onengine.signal(can, chat.ONOPENSEARCH, can.request(event)) }, - Escape: function(event, can) { can.onmotion.clearFloat(can) }, + Escape: function(event, can) { can.onmotion.clearFloat(can), can._root.Search && can.onmotion.hidden(can, can._root.Search._target) }, }}, _engine: {}, }) Volcanos(chat.ONPLUGIN, {_plugin: shy("默认插件", [mdb.NAME, ice.LIST, ice.BACK]), diff --git a/panel/search.css b/panel/search.css index 93879266..d555dced 100644 --- a/panel/search.css +++ b/panel/search.css @@ -1,3 +1,4 @@ fieldset.Search { background-color:#041a25bd; padding:10px; position:fixed; left:230px; top:31px; } fieldset.Search>div.action>div.item.filter>input { width:320px; } +fieldset.Search>div.output table.content { width:100%; } fieldset.Search>div.status { display:block; } diff --git a/panel/search.js b/panel/search.js index b17bd70a..da3f0f4f 100644 --- a/panel/search.js +++ b/panel/search.js @@ -6,9 +6,9 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg) { can.onmotion.clear(can, can can.onmotion.focus(can, can.ui.filter), msg.Length() == 1 && can.ui.profile.innerHTML == "" && can.page.Select(can, table, html.TD)[0].click() }, _size: function(can) { can.getActionSize(function(left, top, width, height) { - can.page.style(can, can._target, {left: left||0, top: top||0, width: width}), can.page.style(can, can._output, html.MAX_HEIGHT, height -= 2*html.PLUGIN_MARGIN+html.ACTION_HEIGHT+can.onexport.statusHeight(can)-1) + can.page.style(can, can._target, {left: left||0, top: top||0, width: width}), can.page.style(can, can._output, html.MAX_HEIGHT, height -= 2*html.PLUGIN_MARGIN+html.ACTION_HEIGHT+can.onexport.statusHeight(can)) can.core.List([can.ui.content, can.ui.display], function(target) { can.page.style(can, target, html.MAX_WIDTH, can.ConfWidth(width-2*html.PLUGIN_MARGIN)) }) - can.ConfHeight(can.base.Min(height-can.ui.content.offsetHeight-can.ui.display.offsetHeight+can.onexport.statusHeight(can), 320)) + can.ConfHeight(can.base.Min(height-can.ui.content.offsetHeight-can.ui.display.offsetHeight+can.onexport.statusHeight(can)-1, 320)) }) }, _input: function(can, msg, arg, fields) { if (can.base.contains(arg[1], ";")) { arg = can.core.Split(arg[1], "\t ;", "\t ;") } can.run(can.request({}, {fields: fields.join(ice.FS)}, msg), arg, function(res) { can.db.type = arg[0] @@ -31,22 +31,26 @@ Volcanos(chat.ONACTION, {_init: function(can) { can.onmotion.hidden(can) }, list }})) }, onopensearch: function(can, msg, type, word) { can.onimport.select(can, msg, [type||mdb.FOREACH, word||""]) }, - close: function(event, can) { can.onmotion.hide(can) }, + close: function(event, can) { can.onmotion.hidden(can) }, clear: function(event, can) { can.onmotion.clear(can, can.ui.profile) }, done: function(event, can) { can.base.isFunc(can.ui.done) && can.ui.done() }, - select: function(event, can, data) { if (can.base.isFunc(data.text)) { return can.onmotion.hide(can), data.text(event) } + select: function(event, can, data) { if (can.base.isFunc(data.text)) { return can.onmotion.hidden(can), data.text(event) } + function show() { can.page.style(can, can.ui.content, html.MAX_HEIGHT, "") + can.page.style(can, can.ui.content, html.MAX_HEIGHT, can._output.offsetHeight-can.ui.display.offsetHeight) + can.Status(mdb.SELECT, can.page.Select(can, can.ui.display, html.TR).length-1) + } var fields = can.page.Select(can, can.ui.display, html.TH, function(item) { return item.innerText }); can.onmotion.toggle(can, can.ui.display, true) var ui = can.page.Append(can, can.ui.display, [{td: can.core.List(fields, function(item) { return data[item] }), onclick: function(event) { - can.page.Remove(can, ui.target), can.Status(mdb.SELECT, can.page.Select(can, can.ui.display, [html.TBODY, html.TR]).length) - }}])._target; can.Status(mdb.SELECT, can.page.Select(can, can.ui.display, [html.TBODY, html.TR]).length) + can.page.Remove(can, ui._target), show() + }}]); show() }, - plugin: function(event, can, data) { if (can.base.isFunc(data.text)) { return can.onmotion.hide(can), data.text(event) } + plugin: function(event, can, data) { if (can.base.isFunc(data.text)) { return can.onmotion.hidden(can), data.text(event) } var cmd = data.cmd == ctx.COMMAND? can.core.Keys(data.type, data.name.split(ice.SP)[0]): can.core.Keys(data.ctx, data.cmd) can.onappend.plugin(can, {index: cmd||msg.Option(mdb.INDEX), args: cmd == web.WIKI_WORD? [data.name]: []}, function(sub) { can._plugins = (can._plugins||[]).concat(sub) sub.onimport.size(sub, can.ConfHeight(), can.ConfWidth(), true), sub.Focus() }, can.ui.profile) }, }) -Volcanos(chat.ONEXPORT, {statusHeight: function(can) { return can.db.type == mdb.FOREACH? html.ACTION_HEIGHT: 0 }, +Volcanos(chat.ONEXPORT, {statusHeight: function(can) { return can.db.type == mdb.FOREACH? 0: html.ACTION_HEIGHT }, select: function(can) { return can.page.Select(can, can.ui.display, html.TR, function(tr) { return can.page.Select(can, tr, html.TD, function(td) { return td.innerHTML }) }).slice(1) }, }) diff --git a/plugin/local/code/inner.js b/plugin/local/code/inner.js index fbae64ed..bb38e0e4 100644 --- a/plugin/local/code/inner.js +++ b/plugin/local/code/inner.js @@ -38,7 +38,10 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb, target) { can.onmotion.cl can.db._key_list = can.onkeymap._parse(event, can, mdb.PLUGIN, can.db._key_list, can.ui.content) }) }, _tabs: function(can) { if (!can.isCmdMode()) { return can.ui.tabs = can._action } - can.core.List([{name: can.page.unicode.menu, onclick: function() { can.user.carte(event, can, can.onaction, can.onaction.list.concat(can.user.isWebview? ["录屏", "编辑器", "浏览器"]: [])) }}, + can.user.isMobile || can.core.List([ + {name: can.page.unicode.menu, onclick: function() { + can.user.carte(event, can, can.onaction, can.onaction.list.concat(can.user.isWebview? ["全屏", "录屏", "编辑器", "浏览器"]: [])) + }}, {name: can.page.unicode.back, style: {"font-size": "14px", "margin-top": "3px"}, onclick: function(event) { var list = {}; can.user.carte(event, can, {_style: "history"}, can.core.List(can.db.history, function(item) { var value = [item.path, item.file, item.line, ice.TB+(item.text&&item.text.length>30? item.text.slice(0, 30)+"...": item.text||"")].join(ice.DF); if (!list[value]) { list[value] = item; return value } @@ -126,7 +129,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb, target) { can.onmotion.cl can.page.SelectChild(can, can.ui._content.parentNode, can.page.Keys(html.DIV_PROFILE, [[[html.IFRAME, html.PROFILE]]]), function(target) { if (can.onmotion.toggle(can, target, target == msg._profile)) { can.ui.profile = msg._profile } }), can.onimport.layout(can), can.ui.current && can.onmotion.toggle(can, can.ui.current, !isIndex() && !isDream()) - skip? can.onaction.scrollIntoView(can): can.onaction.selectLine(can, can.Option(nfs.LINE), true), can.base.isFunc(cb) && cb(), cb = null + skip || can.onaction.selectLine(can, can.Option(nfs.LINE), true), can.base.isFunc(cb) && cb(), cb = null var ls = can.db.file.split(ice.PS); if (ls.length > 4) { ls = [ls.slice(0, 2).join(ice.PS)+"/.../"+ls.slice(-2).join(ice.PS)] } can.Status(kit.Dict(nfs.FILE, ls.join(ice.PS), mdb.TYPE, can.db.parse)) }) diff --git a/plugin/local/code/vimer.js b/plugin/local/code/vimer.js index 4baa097b..5d2e7f6f 100644 --- a/plugin/local/code/vimer.js +++ b/plugin/local/code/vimer.js @@ -111,6 +111,7 @@ Volcanos(chat.ONACTION, { "官网": function(event, can) { can.user.open("https://shylinux.com/") }, "调试": function(event, can) { can.user.opens(location.href.replace("debug=true", "debug=false")) }, "百度": function(event, can) { can.user.opens("https://baidu.com/") }, + "全屏": function(event, can) { can._target.requestFullScreen() }, "录屏": function(event, can) { window.openapp("QuickTime Player") }, "编辑器": function(event, can) { window.opencmd("cd ~/contexts; vim +"+can.Option(nfs.LINE)+" "+can.Option(nfs.PATH)+can.Option(nfs.FILE)) }, "浏览器": function(event, can) { window.openurl(location.href) }, diff --git a/plugin/table.js b/plugin/table.js index ceeec996..69eee04c 100644 --- a/plugin/table.js +++ b/plugin/table.js @@ -97,7 +97,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onmotion.clear( }, onfocus: function(event) { can.onmotion.selectRange(event.target) }}], target, {}) }}, {view: html.LIST, _init: function(target) { can.ui.zone = can.ui.zone||{}, can.ui.zone[zone.name] = zone, zone._target = target - zone._total = function(total) { return can.page.Modify(can, zone._search, {placeholder: "search in "+total+" item"}), total } + zone._total = function(total) { return can.page.Modify(can, zone._search, {placeholder: "search in "+total+" items"}), total } zone._icon = function(list) { can.page.Select(can, zone._legend, html.SPAN_ICON, function(target) { can.page.Remove(can, target) }) can.core.Item(list, function(name, button) { can.onimport.icon(can, name, button, zone._legend) }) diff --git a/proto.js b/proto.js index d27ee9b6..f908a97f 100644 --- a/proto.js +++ b/proto.js @@ -345,7 +345,7 @@ try { if (typeof(window) == lang.OBJECT) { // chrome Volcanos.meta._init = function(can) { window.onerror = function(message, source, lineno, colno, error) { can.misc.Error(message, source, lineno, colno, error) } 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.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||[]) + can.onmotion.delayOnce(can, function() { can.onengine.signal(can, chat.ONRESIZE, can.request(event, kit.Dict(html.HEIGHT, window.innerHeight, html.WIDTH, window.innerWidth))) }, 100, can._delay_resize = can._delay_resize||[]) }) } } } else { // nodejs