From c3f5e3d65930d3bb38ee6ead54a70cb5c648ae25 Mon Sep 17 00:00:00 2001 From: harveyshao Date: Fri, 23 Dec 2022 20:18:31 +0800 Subject: [PATCH] opt some --- frame.js | 34 +++++++++++++++++------- lib/base.js | 7 +++++ lib/misc.js | 4 +-- lib/page.js | 8 +++--- lib/user.js | 4 +-- page/index.css | 2 +- panel/action.js | 1 + plugin/input.js | 2 +- plugin/local/code/inner.css | 2 +- plugin/local/code/inner.js | 24 ++++++++++++----- plugin/local/code/inner/debug.js | 13 ++++++++++ plugin/local/code/inner/search.js | 43 +++++++------------------------ plugin/local/code/vimer.js | 10 ++++--- plugin/table.js | 8 ++---- proto.js | 8 ++++-- 15 files changed, 98 insertions(+), 72 deletions(-) create mode 100644 plugin/local/code/inner/debug.js diff --git a/frame.js b/frame.js index 5879cc31..c3c095f4 100644 --- a/frame.js +++ b/frame.js @@ -140,11 +140,9 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { sub._trans = can.base.Copy(sub._trans||{}, can.core.Value(sub, [chat.ONACTION, chat._TRANS])) can.core.Item(meta.feature, function(key, cb) { cb.help && sub.user.trans(sub, kit.Dict(key, cb.help)) }) meta.inputs && sub.onappend._option(sub, meta, sub._option, meta.msg) - if (meta.msg) { - can.onmotion.delay(can, function() { - var msg = sub.request(); msg.Copy(can.base.Obj(meta.msg)), sub.onappend._output(sub, msg, meta.display||msg.Option(ice.MSG_DISPLAY)||meta.feature.display) - }) - } + if (meta.msg) { can.onmotion.delay(can, function() { var msg = sub.request(); msg.Copy(can.base.Obj(meta.msg)) + sub.onappend._output(sub, msg, meta.display||msg.Option(ice.MSG_DISPLAY)||meta.feature.display) + }) } if (can._root && can._root.name == "popup") { can.onmotion.hidden(can, sub._action) } can.core.Value(sub._legend, chat.ONMOUSEENTER, function(event) { @@ -175,7 +173,8 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { sub._target.value = value, can.onmotion.focus(can, sub._target), can.onmotion.delay(can, function() { can.Update() }) }) }) - }; can.core.Next(([{type: html.BUTTON, name: cli.CLOSE}]).concat(can.base.getValid(can.core.Value(can, [chat.ONIMPORT, mdb.LIST]), can.base.Obj(meta.inputs, []))||[]), add) + } + can.core.Next(([{type: html.BUTTON, name: cli.CLOSE}]).concat(can.base.getValid(can.core.Value(can, [chat.ONIMPORT, mdb.LIST]), can.base.Obj(meta.inputs, []))||[]), add) }, _action: function(can, list, action, meta) { meta = meta||can.onaction||{}, action = action||can._action, can.onmotion.clear(can, action) return can.core.List(can.page.inputs(can, can.base.getValid(can.base.Obj(list), can.core.Value(can, [chat.ONACTION, mdb.LIST]), meta != can.onaction? can.core.Item(meta): [])||[]), function(item) { @@ -185,7 +184,9 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { }, onkeydown: function(event) { if (event.key == lang.ENTER) { target.click() }}}: item.length > 0? /* 列表 */ {type: html.SELECT, name: item[0], values: item.slice(1), onchange: function(event) { var button = item[event.target.selectedIndex+1] meta[item[0]]? can.core.CallFunc(meta[item[0]], [event, can, item[0], button]): meta[button] && can.core.CallFunc(meta[button], [event, can, button]) - }}: /* 其它 */ item, "", action) + }}: /* 其它 */ (item.onclick = item.onclick||function(event) { + var cb = meta[item.name]||meta[chat._ENGINE]; cb? can.core.CallFunc(cb, {event: event, can: can, button: item.name}): can.run(event, [ctx.ACTION, item.name].concat(can.sup.Input())) + }, (item.type == html.BUTTON && (item.value = item.value||can.user.trans(can, item.name, meta._trans))), item), "", action) }), meta }, _output0: function(can, meta, event, cmds, cb, silent) { var msg = can.request(event); if (msg.RunAction(event, can, cmds)) { return } @@ -211,7 +212,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { sub._index = can._index, sub._msg = msg, sub.Conf(sub._args = can.base.ParseURL(display)) sub._trans = can.base.Copy(can.base.Copy(sub._trans||{}, can._trans), can.core.Value(sub, [chat.ONACTION, chat._TRANS])) if (sub.onimport && can.base.isArray(sub.onimport.list) && sub.onimport.list.length > 0) { - can.onmotion.clear(can, can._option), can.onappend._option(can, {inputs: can.page.inputs(can, sub.onimport.list) }) + can.onmotion.clear(can, can._option), can.onappend._option(can, {inputs: can.page.inputs(can, sub.onimport.list, html.TEXT) }) } can.core.CallFunc([sub, chat.ONIMPORT, chat._INIT], {can: sub, msg: msg, cb: function(msg) { can.onmotion.clear(can, can._action), can.user.isMobile && can.ConfHeight() > can.ConfWidth() && can.onmotion.hidden(can, can._action) @@ -319,7 +320,6 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { can.core.CallFunc(on, {event: event, can: can, meta: meta, cb: _cb, target: target, sub: target._can, last: last, cbs: function(cb) { function show() { var sub = target._can can.base.isFunc(cb) && cb(target._can, _cb), can.onlayout.figure(event, can, target._can._target), can.onmotion.toggle(can, target._can._target, true) - can.page.style(can, sub._output, html.MAX_HEIGHT, can.base.Max(can.page.height()-sub._target.offsetTop-2*html.ACTION_HEIGHT, can.page.height()/2)) } if (target._can) { return show() } can.onappend._init(can, {type: html.INPUT, name: input, pos: chat.FLOAT, mode: meta.mode}, [path], function(sub) { sub.Conf(meta) sub.run = function(event, cmds, cb) { var msg = sub.request(event) @@ -439,7 +439,9 @@ Volcanos(chat.ONLAYOUT, {_init: function(can, target) { target = target||can._ro var rect = event.target == document.body? {left: can.page.width()/2, top: can.page.height()/2, right: can.page.width()/2, bottom: can.page.height()/2}: 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, height = can.base.Max(height, can.page.height()-top) - if (target.offsetHeight > height) { + if (top+height-layout.top > 200) { + layout[html.MAX_HEIGHT] = can.base.Max(top+height-layout.top, can.page.height()/2), layout[html.OVERFLOW] = ice.AUTO + } else if (target.offsetHeight > height) { layout.top = top, layout[html.MAX_HEIGHT] = height, layout[html.OVERFLOW] = ice.AUTO } else if (layout.top+target.offsetHeight > top+height) { layout.top = top+height-target.offsetHeight @@ -554,6 +556,18 @@ Volcanos(chat.ONMOTION, {_init: function(can, target) { tableFilter: function(can, target, value) { can.page.Select(can, target, html.TR, function(tr, index) { index > 0 && can.page.ClassList.set(can, tr, html.HIDDEN, can.page.Select(can, tr, html.TD, function(td) { if (td.innerText.indexOf(value) > -1) { return td } }) == 0) }) }, + highlight: function(can, value, target) { + can.page.Select(can, target||can._output, [html.TBODY, html.TR], function(tr) { + can.page.ClassList.set(can, tr, html.HIDDEN, can.page.Select(can, tr, html.TD, function(td) { td._text = td._text||td.innerText + if (td.innerText.indexOf(value) > -1) { + td.innerHTML = td._text.replaceAll(value, ""+value+"") + return td + } else { + td.innerText = td._text + } + }).length == 0) + }) + }, delayResize: function(can, target, key) { can.onmotion.delay(can, function() { can.page.Select(can, target, key, function(_target) { diff --git a/lib/base.js b/lib/base.js index a5d50e0e..891c59af 100644 --- a/lib/base.js +++ b/lib/base.js @@ -23,6 +23,13 @@ Volcanos("base", { return true } return to === from }, + Dir: function(path) { + if (path.endsWith(ice.PS)) { + return path + } else { + return path.slice(0, path.lastIndexOf(ice.PS)+1) + } + }, Ext: function(path) { return path.split(ice.PS).pop().split(ice.PT).pop().toLowerCase() }, Path: function(path) { var res = "" for (var i = 0; i < arguments.length; i++) { if (!arguments[i]) { continue } diff --git a/lib/misc.js b/lib/misc.js index cb9b587f..1a116e65 100644 --- a/lib/misc.js +++ b/lib/misc.js @@ -197,9 +197,9 @@ Volcanos("misc", {Message: function(event, can) { var msg = {} if (value != undefined) { localStorage.setItem(key, value) } return localStorage.getItem(key) }, - _signal: function(can, args) { + _signal: function(can, args) { this._list.push(args) if (can && can.onengine) { can.onengine.signal(can, chat.ONDEBUG, can.request({}, {time: this._time(), fileline: this.FileLine(-4), _args: args})) } - }, + }, _list: [], Log: function() { var args = [this._time(), this.FileLine(2, 3), ""] for (var i in arguments) { arguments[i] != undefined && args.push(arguments[i]) } console.log.apply(console, args), this._signal(arguments[0], args) diff --git a/lib/page.js b/lib/page.js index 21e29a0f..a6f4bd21 100644 --- a/lib/page.js +++ b/lib/page.js @@ -125,7 +125,7 @@ Volcanos("page", {ClassList: { var tbody = list[i].parentElement; list[i].parentElement && tbody.removeChild(list[i]), tbody.appendChild(list[i]) } }, - inputs: function(can, list) { + inputs: function(can, list, type) { var _list = []; for (var i = 0; i < list.length; i++) { switch (list[i]) { case "": _list.push(""); break case ice.AUTO: @@ -138,10 +138,12 @@ Volcanos("page", {ClassList: { _list.push(mdb.NEXT, mdb.PREV) break default: - (function() { var item = can.core.SplitInput(list[i], html.BUTTON) + (function() { var item = can.core.SplitInput(list[i], type||html.BUTTON) if (item.type == html.SELECT) { item._init = function(target) { target.value = item.value||item.values[0], target.onchange = function(event) { can.run(event) } } } item.action && (function() { item._init = function(target) { can.onappend.figure(can, item, target) } })() - item.type == html.BUTTON? _list.push(list[i]): _list.push(item) + // item.type == html.BUTTON? _list.push(item.name): _list.push(item) + _list.push(item) + type = item.type })() } } return _list }, diff --git a/lib/user.js b/lib/user.js index 7cb757ec..22f80155 100644 --- a/lib/user.js +++ b/lib/user.js @@ -71,8 +71,8 @@ Volcanos("user", {info: {}, agent: { {text: [meta.title||"", html.DIV, html.TITLE], title: "点击复制", onclick: function(event) { can.user.copy(event, can, meta.title) }}, {view: "duration", title: "点击关闭", onclick: function() { action.close() }}, can.base.isObject(meta.content)? meta.content: {text: [meta.content||"", html.DIV, nfs.CONTENT]}, - html.ACTION, !can.base.isUndefined(meta.progress) && {view: "progress", style: {width: width}, list: [ - {view: "current", style: {width: (meta.progress||0)*width/100}}, + html.ACTION, !can.base.isUndefined(meta.progress) && {view: "progress", style: {width: width-10}, list: [ + {view: "current", style: {width: (meta.progress||0)*(width-14)/100}}, ]}, ] }]); can.onengine.signal(can, chat.ONTOAST, can.request({}, {time: can.misc._time(), title: meta.title, content: meta.content, fileline: can.misc.FileLine(-3)})) var action = can.onappend._action(can, meta.action && meta.action.list? meta.action.list: meta.action||[""], ui.action, { diff --git a/page/index.css b/page/index.css index 870a02d4..234c151f 100644 --- a/page/index.css +++ b/page/index.css @@ -102,7 +102,7 @@ body>div.toast div.title { color:yellow; float:left; } body>div.toast div.duration { color:gray; float:right; } body>div.toast div.content { text-align:center; color:yellow; } body>div.toast div.progress { border:solid 2px green; margin-left:-2px; height:10px; clear:both; } -body>div.toast div.progress div.current { background-color:red; height:10px; } +body>div.toast div.progress div.current { background-color:red; height:6px; } body>div.toast div.action { display:block; } body>div.toast div.action>div.item.space { height:unset; } body>div.carte { padding:0; } diff --git a/panel/action.js b/panel/action.js index fd7986e8..fce504a8 100644 --- a/panel/action.js +++ b/panel/action.js @@ -219,6 +219,7 @@ Volcanos(chat.ONENGINE, {_engine: function(event, sup, msg, can, cmds, cb) { }), can.base.isFunc(cb) && cb(msg) } return true }}) Volcanos(chat.ONPLUGIN, { + _plugin: shy("默认插件", [mdb.NAME, ice.LIST, ice.BACK]), plugin: shy("默认插件", [mdb.NAME, ice.LIST, ice.BACK]), layout: shy("界面布局", { _init: function(can) { diff --git a/plugin/input.js b/plugin/input.js index f3caaa93..eaeb0fb6 100644 --- a/plugin/input.js +++ b/plugin/input.js @@ -1,5 +1,5 @@ Volcanos(chat.ONACTION, { - _init: function(can, meta, target) { meta.type == html.BUTTON && meta.action == ice.AUTO && !can.sup._delay_init && target.click() }, + _init: function(can, meta, target) { meta.type == html.BUTTON && meta.action == ice.AUTO && can.sup._delay_init == undefined && target.click() }, run: function(event, can) { can.run(event) }, list: function(event, can) { can.sup.isSimpleMode() || can.run(event) }, back: function(event, can) { can.sup.onimport._back(can.sup) }, diff --git a/plugin/local/code/inner.css b/plugin/local/code/inner.css index fa261350..9e5297b3 100644 --- a/plugin/local/code/inner.css +++ b/plugin/local/code/inner.css @@ -19,7 +19,7 @@ fieldset.inner>div.output div.content td.text span.function { color:lightgreen; fieldset.inner>div.output div.content td.text span.constant { color:magenta; } fieldset.inner>div.output div.content td.text span.string { color:magenta; } fieldset.inner>div.output div.content td.text span.object { color:cyan; } -fieldset.inner>div.output div.find.float { position:absolute; } +fieldset.inner>div.output div.find.float { position:absolute; z-index:10; } fieldset.inner.cmd>div.output>div.layout.flow>div.tabs { background-color:#70809096; height:28px; overflow:auto; display:block; } fieldset.inner.cmd>div.output>div.layout.flow>div.tabs div { background-color:teal; font-family:monospace; padding:5px 15px; float:left; } fieldset.inner.cmd>div.output>div.layout.flow>div.tabs div:hover { background-color:#1d3349; } diff --git a/plugin/local/code/inner.js b/plugin/local/code/inner.js index e712a82c..fb1e6bbf 100644 --- a/plugin/local/code/inner.js +++ b/plugin/local/code/inner.js @@ -154,15 +154,15 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb, target) { can.onmotion.cl return can.onmotion.toggle(can, target, false), can.onimport.layout(can), can.user.toastFailure(can, "nothing to display") } return can.onmotion.toggle(can, target, true), can.onimport.layout(can), can.user.toastSuccess(can) }, - toolkit: function(can, meta, cb) { meta._delay_init = true - can.onimport.plug(can, meta, function(sub) { + toolkit: function(can, meta, cb) { + can.onimport.plug(can, meta, function(sub) { sub._delay_init = true can._status.appendChild(sub._legend), sub._legend.onclick = function(event) { if (can.page.SelectOne(can, can._status, ice.PT+html.SELECT) == event.target) { can.page.ClassList.del(can, event.target, html.SELECT), can.onmotion.hidden(can, sub._target) } else { can.page.SelectChild(can, can._output, can.core.Keys(html.FIELDSET, chat.PLUG), function(target) { can.onmotion.toggle(can, target, target == sub._target) }) can.onmotion.select(can, can._status, html.LEGEND, event.target), can.onmotion.select(can, can._output, can.core.Keys(html.FIELDSET, chat.PLUG), sub._target) - if (meta._delay_init == true) { meta._delay_init = false, sub.Update() } + if (sub._delay_init == true) { sub._delay_init = false, can.onmotion.delay(can, function() { sub._output.innerHTML == "" && sub.Update() }) } } }, sub._legend.onmouseenter = null sub.onexport.record = function(sub, line) { if (!line.file && !line.line) { return } @@ -183,9 +183,18 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb, target) { can.onmotion.cl var sub = can.ui.content._plugin; sub && sub.onimport.size(sub, can.ui.content.offsetHeight-2*html.ACTION_HEIGHT, can.ui.content.offsetWidth, true) }, exts: function(can, url, cb) { - can.require([url], function() {}, function(can, name, sub) { sub._init(can, sub, function(sub) { + can.onimport.toolkit(can, {index: "can._plugin", display: (url[0] == ice.PS || url.indexOf(ice.HTTP) == 0? "": can.base.Dir(can._path))+url}, function(sub) { + sub.run = function(event, cmds, cb) { + if (cmds.length > 0 && cmds[0] == ctx.ACTION) { + can.run(can.request(event, can.Option()), cmds, cb||function(msg) { + can.onappend._output(sub, msg, sub.Conf("display")) + }, true) + } else { + can.onappend._output(sub, can.request(event), sub.Conf("display")) + } + } can.db.extentions[url.split("?")[0]] = sub, can.base.isFunc(cb)? cb(sub): sub.select() - }) }) + }) }, }, [""]) Volcanos(chat.ONFIGURE, { @@ -374,10 +383,11 @@ Volcanos(chat.ONACTION, { } var meta = can.onappend._action(can, [ {type: html.TEXT, name: nfs.FROM, style: {width: 200}, _init: function(target) { from = target, complete(target, nfs.FIND), can.onmotion.delay(can, function() { target.focus() }) }}, - nfs.FIND, nfs.GREP, {type: html.TEXT, name: nfs.TO, _init: function(target) { to = target, complete(target, nfs.REPLACE) }}, nfs.REPLACE, cli.CLOSE, + {type: html.BUTTON, name: nfs.FIND}, {type: html.BUTTON, name: nfs.GREP}, {type: html.TEXT, name: nfs.TO, _init: function(target) { to = target, complete(target, nfs.REPLACE) }}, + {type: html.BUTTON, name: nfs.REPLACE}, {type: html.BUTTON, name: cli.CLOSE}, ], ui.action, {_trans: {find: "查找", grep: "搜索", replace: "替换"}, find: function() { find(last+1, from.value) }, - grep: function() { can.onimport.exts(can, "inner/search.js", function(sub) { meta.close(), sub.runAction(event, nfs.GREP, [from.value]) }) }, + grep: function() { can.onimport.exts(can, "inner/search.js", function(sub) { sub.select(), meta.close(), sub.runAction(event, nfs.GREP, [from.value, can.Option(nfs.PATH)]) }) }, replace: function() { var text = can.current.text(), line = can.onaction._getLineno(can, can.current.line) can.db.undo.push(function() { can.onaction.selectLine(can, line), can.onaction.modifyLine(can, line, text) }) can.current.text(text.replace(from.value, to.value)), can.current.text().indexOf(from.value) == -1 && meta.find() diff --git a/plugin/local/code/inner/debug.js b/plugin/local/code/inner/debug.js new file mode 100644 index 00000000..46979468 --- /dev/null +++ b/plugin/local/code/inner/debug.js @@ -0,0 +1,13 @@ +Volcanos(chat.ONIMPORT, {_init: function(can, msg) { + can.core.List(can.misc._list, function(item) { + msg.Push(mdb.TIME, item[0]) + msg.Push(nfs.FILE, item[1].split(ice.DF)[0]) + msg.Push(nfs.LINE, item[1].split(ice.DF)[1]) + msg.Push(mdb.TYPE, item[2]) + msg.Push(mdb.NAME, item[3]) + msg.Push(mdb.TEXT, item.slice(4).join(ice.SP)||"") + }), msg.StatusTimeCount(), can.onmotion.clear(can), can.onappend.table(can, msg) + can.page.Select(can, can._option, "input[name=name]", function(target) { + target.onkeyup = function(event) { can.onmotion.highlight(can, target.value) } + }) +}}) diff --git a/plugin/local/code/inner/search.js b/plugin/local/code/inner/search.js index 205ac92a..630d9752 100644 --- a/plugin/local/code/inner/search.js +++ b/plugin/local/code/inner/search.js @@ -1,36 +1,13 @@ -Volcanos(chat.ONPLUGIN, {_init: function(can, _sub, cb) { const SEARCH = "can.code.inner.search"; var history = [] - function highlight(value) { var sub = can.ui.search - can.page.Select(can, sub._output, html.TR, function(tr) { - can.page.ClassList.set(can, tr, html.HIDDEN, can.page.Select(can, tr, html.TD, function(td) { td._text = td._text||td.innerText - if (td.innerText.indexOf(value) > -1) { - td.innerHTML = td._text.replaceAll(value, ""+value+"") - return td - } else { - td.innerText = td._text - } - }).length == 0) +Volcanos(chat.ONIMPORT, {list: ["main", "filter", "grep:button", "history", "last"], _init: function(can, msg) { + can.onmotion.clear(can), can.onappend.table(can, msg) + can.onmotion.delay(can, function() { + can.page.Select(can, can._option, "input[name=filter]", function(target) { + target.onkeyup = function(event) { can.onmotion.highlight(can, target.value) } }) - } - function show(msg, word) { if (!msg) { return } history.push(msg); var sub = can.ui.search; sub.Option("main", word) - sub.onimport.size(sub, can.ConfHeight()/4, can.ConfWidth()-can.ui.project.offsetWidth, true) - sub.onmotion.clear(sub), sub.onappend.table(sub, msg, function(value, key, index, line) { - return {text: ["", html.TD], list: [{text: [can.base.trimPrefix(value, nfs.PWD), html.DIV]}], onclick: function(event) { if (!line.line) { return } - can.onimport.tabview(can, line.path||can.Option(nfs.PATH), can.base.trimPrefix(line.file, nfs.PWD)||can.Option(nfs.FILE), parseInt(line.line)), can.current.scroll(can.current.scroll()-4) - }} - }, sub._output), sub.onappend.board(sub, msg.Result()), sub.onappend._status(sub, msg.Option(ice.MSG_STATUS)) - !sub.page.ClassList.has(sub, sub._legend, html.SELECT) && sub.select(), sub.Focus(), sub.Option("word", word||msg._word||"") - can.onmotion.delay(can, function() { word && highlight(word) }) - } - can.onengine.plugin(can, SEARCH, shy("搜索", {}, [ - "main", {name: "filter", _init: function(target) { target.onkeyup = function(event) { highlight(event.target.value) } }}, - "grep:button", "history", "last", - ], function(can, msg, cmds, cb) { can.misc.runAction(can, msg, cmds, cb, kit.Dict( - nfs.GREP, function(cmds) { can.runAction(msg, nfs.GREP, [cmds[0]], function(msg) { show(msg, cmds[0]) }) }, - "history", function(cmds) { can.core.List(can.history, function(item) { msg.PushRecord(item) }), show(msg) }, - "last", function(cmds) { history.pop(), show(history.pop()) }, - )) })) - can.onimport.toolkit(can, {index: SEARCH}, function(sub) { - can.ui.search = sub, sub._show = show, can.base.isFunc(cb) && cb(sub) - can.page.style(can, sub._output, html.MIN_WIDTH, 600) }) }}) +Volcanos(chat.ONACTION, { + "grep": function(event, can, button) { + can.runAction(event, nfs.GREP, [can.Option("main")], function(msg) { can.onimport._init(can, msg) }) + }, +}) diff --git a/plugin/local/code/vimer.js b/plugin/local/code/vimer.js index 5e84353b..679e9826 100644 --- a/plugin/local/code/vimer.js +++ b/plugin/local/code/vimer.js @@ -120,7 +120,9 @@ Volcanos(chat.ONACTION, { }, compile: function(event, can, button) { var _toast = can.user.toastProcess(can, "编译中...") can.runAction(can.request(event), button, [], function(msg) { _toast.close(), can.ui.search && can.onmotion.hidden(can, can.ui.search._target) - if (msg.Length() > 0 || msg.Result()) { return can.onimport.exts(can, "inner/search.js", function(sub) { sub._show(msg) }) } + if (msg.Length() > 0 || msg.Result()) { return can.onimport.exts(can, "inner/search.js", function(sub) { + can.onappend._output(sub, msg, sub.Conf("display")), sub.select() + }) } var toast = can.user.toastProcess(can, "重启中..."); can.onmotion.delay(can, function() { toast.close(), can.user.toastSuccess(can) }, 3000) }) }, @@ -139,11 +141,11 @@ Volcanos(chat.ONACTION, { "文档": function(event, can) { can.onaction._open(can, "https://developer.mozilla.org/") }, "百度": function(event, can) { can.onaction._open(can, "https://baidu.com") }, "命令": function(event, can) { can.user.input(event, can, [ctx.INDEX], function(list) { can.onimport.tabview(can, can.Option(nfs.PATH), list[0], ctx.INDEX) }) }, - "插件": function(event, can) { can.user.input(event, can, [ctx.INDEX], function(list) { var sub = can.toolkit[list[0]]; if (sub) { sub.select(); return } - can.onimport.toolkit(can, {index: list[0]}, function(sub) { can.toolkit[list[0]] = sub.select() }) + "插件": function(event, can) { can.user.input(event, can, [ctx.INDEX], function(list) { var sub = can.db.toolkit[list[0]]; if (sub) { sub.select(); return } + can.onimport.toolkit(can, {index: list[0]}, function(sub) { can.db.toolkit[list[0]] = sub.select() }) }) }, "扩展": function(event, can) { can.user.input(can.request(event, {action: "extension"}), can, ["url"], function(list) { - var sub = can.extentions[list[0]]; sub? sub.select(): can.onimport.exts(can, list[0]) + var sub = can.db.extentions[list[0]]; sub? sub.select(): can.onimport.exts(can, list[0]) }) }, "录屏": function(event, can) { window.openapp("QuickTime Player") }, "日志": function(event, can) { window.opencmd("cd ~/contexts; tail -f var/log/bench.log") }, diff --git a/plugin/table.js b/plugin/table.js index 4ed1c985..aa473350 100644 --- a/plugin/table.js +++ b/plugin/table.js @@ -106,13 +106,9 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb, target) { can.onmotion.cl if (zone._delay_show) { zone._delay_show(zone._target), delete(zone._delay_show) } can.onmotion.toggle(can, zone._action), can.onmotion.toggle(can, zone._target) }, onmouseenter: function(event) { - zone._menu? can.user.carteRight(event, can, zone._menu.meta, zone._menu.list||can.core.Item(zone._menu.meta), function(event, button, meta) { + zone._menu && can.user.carteRight(event, can, zone._menu.meta, zone._menu.list||can.core.Item(zone._menu.meta), function(event, button, meta) { (meta[button]||can.onaction[button])(event, can, button) - }): can.user.carteRight(event, can, { - "refresh": function() { zone.refresh() }, - "fold": function() { can.page.Select(can, zone._target, html.DIV_LIST, function(item) { can.onmotion.toggle(can, item, false) }) }, - "expand": function() { can.page.Select(can, zone._target, html.DIV_LIST, function(item) { can.onmotion.toggle(can, item, true) }) }, - }, ["refresh", "fold", "expand"]) + }) }}, {view: html.ACTION, _init: function(target) { zone._action = target can.onappend._action(can, [{input: html.TEXT, placeholder: "search", onkeyup: function(event) { diff --git a/proto.js b/proto.js index afa0d86c..bde2fdab 100644 --- a/proto.js +++ b/proto.js @@ -154,7 +154,7 @@ var chat = { STATE: "state", MENUS: "menus", SSO: "sso", LOCATION: "location", SIMPLE: "simple", OUTPUT: "output", FLOAT: "float", FULL: "full", CMD: "cmd", - HEADER: "Header", ACTION: "Action", + HEADER: "Header", ACTION: "Action", FOOTER: "Footer", libs: ["/lib/base.js", "/lib/core.js", "/lib/date.js", "/lib/misc.js", "/lib/page.js", "/lib/user.js"], panel_list: [ {name: "Header", pos: "head"}, {name: "River", pos: "left"}, {name: "Action", pos: "main"}, {name: "Search", pos: "auto"}, {name: "Footer", pos: "foot"}, @@ -258,7 +258,11 @@ function shy(help, meta, list, cb) { var args = arguments, i = 0; function next( }; var _can_name = "", _can_path = "" var Volcanos = shy({version: window._version||"", iceberg: "/chat/", volcano: "/frame.js", cache: {}, pack: {}}, function(name, can, libs, cb) { var meta = arguments.callee.meta, list = arguments.callee.list; if (typeof name == lang.OBJECT) { - if (name.length > 0) { return Volcanos({panels: [{name: chat.HEADER, pos: html.HIDE, state: [aaa.USERNICK]}, {name: chat.ACTION, pos: html.MAIN, tool: name}]}) } + if (name.length > 0) { return Volcanos({panels: [ + {name: chat.HEADER, pos: html.HIDE, state: [aaa.USERNICK]}, + {name: chat.ACTION, pos: html.MAIN, tool: name}, + {name: chat.FOOTER, pos: html.HIDE} + ]}) } var Config = name; name = Config.name||ice.CAN, _can_name = "", _can_path = "" meta.iceberg = Config.iceberg||meta.iceberg, meta.libs = Config.libs||chat.libs, panels = Config.panels||chat.panel_list libs = [], panels.forEach(function(p) { p && (libs = libs.concat(p.list = p.list||["/panel/"+p.name+nfs._JS, "/panel/"+p.name+nfs._CSS])) }), libs = libs.concat(Config.plugin||chat.plugin_list)