From 4cac13c155daf81de7ec3bfe8450299c16c77c8f Mon Sep 17 00:00:00 2001 From: shylinux Date: Wed, 22 Mar 2023 17:31:22 +0800 Subject: [PATCH] opt lock --- frame.js | 9 ++++++--- index.css | 2 +- lib/misc.js | 7 +++++-- panel/action.js | 2 +- panel/footer.js | 1 + panel/search.js | 4 ++-- plugin/local/code/inner.js | 17 ++++++++++++----- plugin/local/code/xterm.js | 37 ++++++++++++++++++++++--------------- plugin/state.js | 20 +++++++------------- plugin/table.js | 2 +- proto.js | 24 +++++++++++------------- 11 files changed, 69 insertions(+), 56 deletions(-) diff --git a/frame.js b/frame.js index a16d3d9a..8c397bc7 100644 --- a/frame.js +++ b/frame.js @@ -24,7 +24,7 @@ Volcanos(chat.ONENGINE, {_init: function(can, meta, list, cb, target) { can.requ if (panel.onengine._static(event, can, msg, panel, cmds, cb)) { return } var toast, _toast = msg.Option(chat._TOAST); if (_toast) { can.onmotion.delay(can, function() { toast = toast||can.user.toastProcess(msg._can, _toast) }, 500) } msg.option = can.core.List(msg.option, function(item) { return [chat._TOAST, ice.MSG_HANDLE].indexOf(item) > -1 && delete(msg[item])? undefined: item }) - msg.OptionDefault(ice.MSG_THEME, can.getHeader(chat.THEME), ice.SESS_HEIGHT, panel.Conf(html.HEIGHT), ice.SESS_WIDTH, panel.Conf(html.WIDTH)) + msg.OptionDefault(ice.MSG_THEME, can.getHeader(chat.THEME), ice.SESS_HEIGHT, panel.Conf(html.HEIGHT)||panel._target.offsetHeight, ice.SESS_WIDTH, panel.Conf(html.WIDTH)||panel.offsetWidth) if (can.base.isUndefined(msg[ice.MSG_DAEMON])) { var sub = msg._can; can.base.isUndefined(sub._daemon) && can.ondaemon._list[0] && (sub._daemon = can.ondaemon._list.push(sub)-1) if (sub._daemon) { msg.Option(ice.MSG_DAEMON, can.core.Keys(can.ondaemon._list[0], sub._daemon)) } } can.onengine.signal(panel, chat.ONREMOTE, can.request({}, {_follow: panel._follow, _msg: msg, _cmds: cmds})) @@ -220,6 +220,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { _legend: can._legend, _option: can._option, _action: can._action, _output: output, _status: can._status, Update: can.Update, Option: can.Option, Action: can.Action, Status: can.Status, }, [display, chat.PLUGIN_TABLE_JS], function(sub) { sub.Conf(can.Conf()) + var last = can.core.Value(can, chat._OUTPUTS_CURRENT); last && can.core.CallFunc([last, "onaction.hidden"], {can: last}) sub.run = function(event, cmds, cb, silent) { sub.request(event)._caller().RunAction(event, sub, cmds) || can.Update(event, can.Input(cmds, !silent), cb, silent) }, can._outputs = can._outputs||[], can._outputs.push(sub), sub.sup = can @@ -228,6 +229,8 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { 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, html.TEXT) }) } + + can.core.CallFunc([sub, chat.ONIMPORT, chat._INIT], {can: sub, msg: msg, cb: function(msg) { action === false || can.onmotion.clear(can, can._action), sub.onappend._action(sub, can.Conf(ice.MSG_ACTION)||msg.Option(ice.MSG_ACTION), action||can._action) action === false || sub.onappend._status(sub, sub.onexport&&sub.onexport.list||msg.Option(ice.MSG_STATUS)), can.user.isMobile || sub.onappend.tools(sub, msg) @@ -358,8 +361,8 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { function run(event, cmd, arg) { can.misc.Event(event, can, function(msg) { can.run(can.request(event, line, can.Option()), [ctx.ACTION, cmd].concat(arg)) }) } if (msg.append.length == 2 && msg.append[0] == mdb.KEY && msg.append[1] == mdb.VALUE) { if (key == mdb.VALUE) { key = line.key } line = {}, can.core.List(array, function(item) { line[item.key] = item.value }) } return {text: [value, html.TD], onclick: function(event) { var target = event.target - if (can.page.tagis(target, html.INPUT) && target.type == html.BUTTON) { - meta && meta[target.name]? can.user.input(can.request(event, {action: target.name}), can, meta[target.name], function(args) { run(event, target.name, args) }): run(event, target.name) + if (can.page.tagis(target, html.INPUT) && target.type == html.BUTTON) { can.request(event, {action: target.name}) + meta && meta[target.name]? can.user.input(event, can, meta[target.name], function(args) { run(event, target.name, args) }): run(event, target.name) } else { can.sup.onimport.change(event, can.sup, key, event.target.innerText) || can.sup.onexport.record(can.sup, value, key, line, event) } }, ondblclick: function(event) { if ([mdb.KEY, mdb.HASH, mdb.ID].indexOf(key) > -1) { return } var item = can.core.List(can.Conf([ctx.FEATURE, mdb.INSERT]), function(item) { if (item.name == key) { return item } })[0]||{name: key, value: value} diff --git a/index.css b/index.css index aba9b244..bf5abc3f 100644 --- a/index.css +++ b/index.css @@ -300,7 +300,7 @@ fieldset.plugin.parse.cmd>div.status { display:none; } fieldset.plugin.inner.cmd>legend { display:none; } fieldset.plugin.inner.cmd>div.action { display:none; } fieldset.plugin.inner.cmd>form.option { display:none; } -fieldset.plugin.inner.cmd fieldset.xterm>form.option>div.item.text>input { width:320px; } +// fieldset.plugin.inner.cmd fieldset.xterm>form.option>div.item.text>input { width:320px; } fieldset.plan div.output table.content { height:100%; width:100%; } fieldset.xterm div.output { border-left:gray solid 1px; border-top:gray solid 1px; } fieldset.xterm div.output.select { border:blue solid 1px; } diff --git a/lib/misc.js b/lib/misc.js index 0a8fad4c..b3de6f75 100644 --- a/lib/misc.js +++ b/lib/misc.js @@ -68,8 +68,10 @@ Volcanos("misc", { }); return msg }, Event: function(event, can, cb) { for (var i = 3; i < arguments.length; i++) { can.request(event, arguments[i]) } cb(can.request(event)) }, Run: function(event, can, dataset, cmds, cb) { var msg = can.request(event), _can = msg._can; _can._fields && _can.sup && (_can = _can.sup) - var form = {cmds: cmds}; can.core.List(msg.option, function(key) { msg[key] && (form[key] = msg[key]) }) - can.misc.POST(can, msg, can.base.MergeURL(dataset.names.toLowerCase(), "_name", _can._name, "_index", _can._index), form, cb) + var form = {cmds: cmds}; can.core.List(msg.option, function(key) { + !can.base.isIn(key, "log.caller") && msg[key] && (form[key] = msg[key]) + }) + can.misc.POST(can, msg, can.base.MergeURL(dataset.names.toLowerCase(), ice.MSG_INDEX, _can._index), form, cb) }, POST: function(can, msg, url, form, cb) { var xhr = new XMLHttpRequest(), begin = new Date(); msg._xhr = xhr xhr.open(msg._method||web.POST, url), xhr.onreadystatechange = function() { if (xhr.readyState != 4) { return } @@ -90,6 +92,7 @@ Volcanos("misc", { var url = location.protocol.replace(ice.HTTP, "ws")+"//"+location.host+"/space/" if (url.indexOf(html.CHROME) == 0) { url = "ws://localhost:9020/space/" } try { var socket = new WebSocket(can.base.MergeURL(url, args)); _msg = _msg || can.request()._caller() } catch {} + can._socket = socket socket.onclose = function() { can.misc.Log(html.WSS, cli.CLOSE, args) can.base.isFunc(onclose)? onclose(socket): can.core.Timer(can.base.random(3000, 100), function() { args.name = args.name||can._wss_name, can.misc.WSS(can, args, cb, onopen, onerror, onclose, _msg) diff --git a/panel/action.js b/panel/action.js index a62a8ae7..6fb2bae8 100644 --- a/panel/action.js +++ b/panel/action.js @@ -32,7 +32,7 @@ Volcanos(chat.ONACTION, {_init: function(can, target) { }, onsize: function(can, msg, height, width) { can.Conf({height: height-can.Conf(html.MARGIN_Y), width: width-can.Conf(html.MARGIN_X)}) }, onmain: function(can, msg) { can.onimport._share(can, can.misc.Search(can, web.SHARE)) }, - onlogin: function(can, msg) { can.ondaemon._init(can), can.onimport._menu(can, msg), can.onkeymap._build(can) + onlogin: function(can, msg) { can.onimport._menu(can, msg), can.onkeymap._build(can) can._root.River && can.onmotion.delay(can, function() { if (can.Mode()) { return } var gt = can.page.unicode.next, lt = can.page.unicode.prev, river = can._root.River._target var target = can.page.Append(can, can._target, [{view: [[html.TOGGLE, chat.PROJECT], "", can.page.isDisplay(river)? lt: gt], onclick: function(event) { can.page.Modify(can, target, (can._river_show = can.onmotion.toggle(can, river))? lt: gt), can.onaction.layout(can) diff --git a/panel/footer.js b/panel/footer.js index 98af2c8f..13f3fd77 100644 --- a/panel/footer.js +++ b/panel/footer.js @@ -2,6 +2,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.Conf(NKEY, can.core.Item(can.misc.localStorage(can)).length) can.onimport._title(can, msg, target), can.onimport._command(can, msg, target) can.onimport._state(can, msg, target), can.onimport._toast(can, msg, target) + can.ondaemon._init(can) }, _title: function(can, msg, target) { can.user.isMobile || can.core.List(can.Conf(chat.TITLE)||msg.result, function(item) { if (can.base.contains(item, ice.AT)) { item = ''+item+'' } diff --git a/panel/search.js b/panel/search.js index 02a659a7..9688f9a1 100644 --- a/panel/search.js +++ b/panel/search.js @@ -1,7 +1,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg) { can.onmotion.clear(can, can.ui.content) var table = can.onappend.table(can, msg, function(value, key, index, data) { return {text: [can.base.isFunc(value) && value.help || value, html.TD], onclick: function(event) { can.page.tagis(event.target, html.A) || can.onaction[can.db.type == mdb.FOREACH || event.ctrlKey? mdb.PLUGIN: mdb.SELECT](event, can, data) - }} }, can.ui.content, can.base.getValid(msg.Option(ice.MSG_FIELDS).split(ice.FS), msg.append)); can.onmotion.story.auto(can), can.onimport._size(can) + }} }, can.ui.content, msg.append); can.onmotion.story.auto(can), can.onimport._size(can) can.onmotion.toggle(can, can._status, can.db.type != mdb.FOREACH) && can.onappend._status(can, can.base.Obj(msg.Option(ice.MSG_STATUS), []).concat({name: mdb.SELECT, value: "0"})) can.onmotion.focus(can, can.ui.filter), msg.Length() == 1 && can.ui.profile.innerHTML == "" && can.page.Select(can, table, html.TD)[0].click() }, @@ -49,7 +49,7 @@ Volcanos(chat.ONACTION, {_init: function(can) { can.onmotion.hidden(can) }, list var meta = {index: cmd||msg.Option(mdb.INDEX), args: cmd == web.WIKI_WORD? [data.name]: []} if (data.type == cli.OPENS) { return can.runAction(event, cli.OPENS, [data.text], null, true) } if (data.type == ssh.SHELL) { meta = {index: web.CODE_XTERM, args: [data.text]} } - if (data.type == ctx.INDEX) { meta = {index: data.text.split(",")[0], args: data.text.split(",").slice(1) } } + if (data.type == ctx.INDEX) { meta = {index: data.text.split(ice.FS)[0], args: data.text.split(ice.FS).slice(1) } } if (data.type == nfs.FILE) { meta = {index: web.CODE_VIMER, args: can.misc.SplitPath(can, data.text)} } can.onappend.plugin(can, meta, function(sub) { can._plugins = (can._plugins||[]).concat(sub), sub.onimport.size(sub, can.ConfHeight(), can.ConfWidth(), true), sub.Focus() }, can.ui.profile) }, diff --git a/plugin/local/code/inner.js b/plugin/local/code/inner.js index 2ee5b97c..adcbd5c9 100644 --- a/plugin/local/code/inner.js +++ b/plugin/local/code/inner.js @@ -263,7 +263,8 @@ Volcanos(chat.ONSYNTAX, {_init: function(can, msg, cb) { } }, _index: function(can, msg, cb) { if (msg._content) { return can.base.isFunc(cb) && cb(msg._content) } if (can.onsyntax._space(can, msg, cb)) { return } var index = msg.Option(ctx.INDEX).split(ice.FS), item = {type: chat.STORY, index: index[0], args: index.slice(1)} - if (can.base.isIn(item.index, web.CODE_XTERM, web.WIKI_WORD)) { item.style = html.OUTPUT } + if (can.base.isIn(item.index, web.WIKI_WORD)) { item.style = html.OUTPUT } + // if (can.base.isIn(item.index, web.CODE_XTERM, web.WIKI_WORD)) { item.style = html.OUTPUT } can.onimport.plug(can, item, function(sub) { sub.onimport.size(sub, can.ui.content.offsetHeight, can.ui.content.offsetWidth, true) sub.onimport._open = function(sub, msg, arg) { can.onimport.tabview(can, "", arg, web.SPACE), sub.Update() } sub.onaction.close = function() { can.onaction.back(can), msg._tab._close() } @@ -290,7 +291,7 @@ Volcanos(chat.ONSYNTAX, {_init: function(can, msg, cb) { case code.CONSTANT: case code.OBJECT: return wrap(text, type) default: var t = can.core.Item(p.regexp, function(reg, type) { var m = text.match(new RegExp(reg)); if (m && m.length > 0 && m[0] == text) { return type} }) - return t && t.length > 0? wrap(text, t[0]): type? wrap(text, type): text + return t && t.length > 0? wrap(text, t[0]): type? wrap(text, type): wrap(text, "_") } }).join("")); return line }, @@ -327,9 +328,15 @@ Volcanos(chat.ONACTION, {list: ["调试", "首页", "官网", "源码", "百度" scrollIntoView: function(can, offset) { var current = can.onexport.line(can, can.current.line), window = can.current.window(); offset = offset||parseInt(window/4)+2 can.ui.content.scrollTo(0, parseInt(current/window)*can.ui.content.offsetHeight+(parseInt(current%window)-offset-1)*can.current.line.offsetHeight) }, - searchLine: function(event, can, value) { can.runAction(can.request(event, {name: value, text: can.current.text()}, can.Option()), code.NAVIGATE, [], function(msg) { - msg.Append(nfs.FILE)? can.onimport.tabview(can, msg.Append(nfs.PATH), msg.Append(nfs.FILE), msg.Append(nfs.LINE)): can.user.toastFailure(can, "not found "+value) - }) }, + searchLine: function(event, can, value) { + var offset = 0; can.page.Select(can, can.ui.content, "tr.line", function(tr) { + tr == can.current.line && can.page.Select(can, tr, "td.text>span", function(span) { offset += span.innerText.length + span == event.target && can.runAction(can.request(event, {name: value, text: can.current.text(), offset: offset-1}, can.Option()), code.NAVIGATE, [], function(msg) { + msg.Append(nfs.FILE)? can.onimport.tabview(can, msg.Append(nfs.PATH), msg.Append(nfs.FILE), msg.Append(nfs.LINE)): can.user.toastFailure(can, "not found "+value) + }) + }), can.page.Select(can, tr, "td.text", function(td) { offset += td.innerText.length+1 }) + }) + }, favorLine: function(event, can, value) { can.user.input(event, can, [{name: mdb.ZONE, value: "hi"}, {name: mdb.NAME, value: "hello"}], function(data) { can.runAction(event, code.FAVOR, [ctx.ACTION, mdb.INSERT, mdb.ZONE, data.zone||"", mdb.TYPE, can.db.parse, mdb.NAME, data.name||"", mdb.TEXT, (value||"").trimRight(), diff --git a/plugin/local/code/xterm.js b/plugin/local/code/xterm.js index 4d5b4b3f..8cc1b491 100644 --- a/plugin/local/code/xterm.js +++ b/plugin/local/code/xterm.js @@ -23,7 +23,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { can.page.requireModules var target = connect(item, output||can.page.insertBefore(can, [html.OUTPUT], can._status)); output = null main = main||target } - }), can.onaction.select(can, main) + }), main && can.onaction.select(can, main) }, _tabs: function(can, item, output) { if (output != output._root && output._root) { return output._tabs = output._root._tabs } var tabs = can.onimport.tabs(can, [{name: item.name||item.type||item.hash}], function() { @@ -81,15 +81,21 @@ Volcanos(chat.ONKEYMAP, { sub.select(), sub.onexport.record = function(_, value) { can.onimport._input(can, can._output._term, value+ice.NL) } }, can._fields) }) }, f: function(event, can) { - var input = can.user.input({target: can._output._tabs}, can, [{type: mdb.TEXT, name: mdb.NAME, select: function(item) { - input.submit(event, can, "submit") - }, run: function(event, cmds, cb) { var msg = can.request(event) - can.page.Select(can, can._action, [html.DIV_TABS, html.SPAN_NAME], function(target) { msg.Push(mdb.NAME, target.innerText) }) - cb(msg) - }}], function(list) { - - }) + var input = can.user.input({target: can._output._tabs}, can, [{type: mdb.TEXT, name: nfs.FILE, select: function(item) { + var ls = item.split(ice.DF); switch (ls[0]) { + case "tabs": can.page.Select(can, can._action, [html.DIV_TABS, html.SPAN_NAME], function(target) { target.innerText == ls[1] && target.click() }); break + case web.LAYOUT: can.Option(mdb.HASH, ls[1]), can.Update(); break + case ctx.INDEX: can.onimport.tool(can, [ls[1]], function(sub) { sub.select() }); break + case ssh.SHELL: can.onaction.tabnew(can.request({}, {_handle: ice.TRUE, type: ls[1]}), can); break + default: can.onimport._input(can, can._output._term, item+ice.NL) + } input.cancel() + }, run: function(event, cmds, cb) { can.run(event, cmds, function(msg) { var _msg = can.request() + function push(type, name) { _msg.Push(nfs.FILE, can.core.List(arguments).join(ice.DF)) } + can.page.Select(can, can._action, [html.DIV_TABS, html.SPAN_NAME], function(target) { push("tabs", target.innerText) }) + _msg.Copy(msg), can.core.Item(can.onengine.plugin.meta, function(key, value) { push(ctx.INDEX, "can."+key) }), cb(_msg) + }) }}], function(list) {}) }, + Escape: function(can) { can.onmotion.clearFloat(can), can._output.click() }, }, }, _engine: {}, }) @@ -104,11 +110,9 @@ Volcanos(chat.ONACTION, { can._output._root = root, can._output = can.page.insertBefore(can, [html.OUTPUT], can._output.nextSibling, layout) can._output._root = root, can._output._tabs = tabs, can.onimport._init(can, msg), can.onmotion.delay(can, function() { can._output.click() }) }) }) }, - delete: function(can, output) { - if (output == can.sup._output) { can.onmotion.clear(can, output) } else { - while (output && output.parentNode.children.length == 1) { output = output.parentNode } - var next = output.parentNode; can.onmotion.delay(can, function() { can.page.Select(can, next, html.DIV_OUTPUT, function(target) { target.click() }) }) - can.page.Remove(can, output) + delete: function(can, output) { if (can.page.Select(can, can._fields, html.DIV_OUTPUT).length == 1) { can.onmotion.delay(can, function() { can.sup.onimport._back(can.sup) }) } + if (output == can.sup._output) { can.onmotion.clear(can, output) } else { while (output && output.parentNode.children.length == 1) { output = output.parentNode } + var next = output.parentNode; can.page.Remove(can, output), can.onmotion.delay(can, function() { can.page.Select(can, next, html.DIV_OUTPUT, function(target) { target.click() }) }) } can.onimport.layout(can) }, select: function(can, output) { can.page.SelectChild(can, can._fields, can.page.Keys(html.DIV_OUTPUT, html.DIV_LAYOUT), function(target) { can.onmotion.hidden(can, target, target == output || target == output._root) @@ -123,7 +127,7 @@ Volcanos(chat.ONACTION, { can.page.SelectOne(can, output[key], html.DIV_OUTPUT, function(target) { target.click() })||output[key].click() } }, - sess: function(event, can) { can.user.input(event, can, [mdb.NAME], function(list) { + sess: function(event, can) { can.user.input({target: can._legend}, can, [mdb.NAME], function(list) { can.runAction({}, mdb.CREATE, [mdb.TYPE, html.LAYOUT, mdb.NAME, list[0], mdb.TEXT, can.base.Format(can.onexport.sess(can))], function(msg) { can.user.toastSuccess(can, can.user.trans(can, nfs.SAVE)+ice.SP+msg.Result()) }, true) @@ -132,6 +136,9 @@ Volcanos(chat.ONACTION, { if (can.onkeymap.selectCtrlN(event, can, can._action, html.DIV_TABS)) { return } can._keylist = can.onkeymap._parse(event, can, mdb.NORMAL, can._keylist||[], can._output._term) }, + hidden: function(can) { can.page.Select(can, can._fields, "div.output,div.layout", function(target) { + target == can.sup._output? can.page.insertBefore(can, target, can._status): can.page.Remove(can, target) + }) }, }) Volcanos(chat.ONEXPORT, {list: [mdb.TIME, mdb.HASH, mdb.TYPE, mdb.NAME, "rows", "cols", "cursorY", "cursorX"], term: function(can, term) { item = term._item diff --git a/plugin/state.js b/plugin/state.js index 0b4f6ab5..cd8898f9 100644 --- a/plugin/state.js +++ b/plugin/state.js @@ -11,22 +11,16 @@ Volcanos(chat.ONIMPORT, { _display: function(can, msg) { can.onappend._output(can, msg, msg.Option(ice.MSG_DISPLAY)) }, _clear: function(can, msg) { can.onmotion.clear(can) }, _inner: function(can, msg) { can.onappend.table(can, msg), can.onappend.board(can, msg), can.onmotion.story.auto(can) }, - _field: function(can, msg) { - var opts = {pod: msg.Option(ice.POD)}; can.page.SelectArgs(can, can._option, "", function(target) { var value = msg.Option(target.name); target.name && value && (opts[target.name] = value) }) - var height = can.ConfHeight(); can.page.SelectChild(can, can._output, html.TABLE, function(target) { height -= target.offsetHeight }) - msg.Table(function(item) { can.onappend._plugin(can, item, {pod: msg.Option(ice.POD), index: item.index, args: can.base.Obj(item.args||item.arg, []), height: can.base.Min(height, 200)}, function(sub, meta) { - sub.Conf(can.base.Obj(item.conf)); if (sub.isSimpleMode()) { (function() { sub.ConfHeight(can.ConfHeight()/2) - 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 || 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) + _field: function(can, msg) { var height = can.ConfHeight(); can.page.SelectChild(can, can._output, html.TABLE, function(target) { height -= target.offsetHeight }) + msg.Table(function(item) { can.onappend._plugin(can, item, {index: item.index, args: can.base.Obj(item.args||item.arg, []), height: can.base.Min(height, 240)}, function(sub, meta) { + sub.Conf(can.base.Obj(item.conf)); if (sub.isSimpleMode()) { sub.ConfHeight(can.ConfHeight()/2) + var res = can.request(); res.Echo(sub.Conf(ice.MSG_RESULT)), can.onappend._output(sub, res, sub.Conf(ctx.DISPLAY)); return + } + sub.run = function(event, cmds, cb) { sub.onimport.size(sub, height, can.ConfWidth(), true) + can.run(event, (!msg.Option("_index") || msg.Option("_index") == can._index || can._index.indexOf("can.") == 0? msg[ice.MSG_PREFIX]||[]: [ice.RUN, msg.Option("_index")]).concat(cmds), cb, true) } }) }) }, - _close: function(can) { - can.user.close() - }, _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}) diff --git a/plugin/table.js b/plugin/table.js index 93a0ddc9..1233413f 100644 --- a/plugin/table.js +++ b/plugin/table.js @@ -65,7 +65,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onmotion.clear( if (sub._delay_init || meta.msg) { sub._delay_init = false, meta.msg = false, sub.Update() } }) }, sub._delay_init = true, sub.onaction.close = function() { sub.select() }, sub.select = function() { return sub._legend.click(), sub } sub.hidden = function() { can.onmotion.hidden(can, sub._target), can.page.ClassList.del(can, sub._legend, html.SELECT) } - sub.onimport.size(sub, can.ConfHeight()/2, can.ConfWidth()-can.ui.project.offsetWidth, true), can.base.isFunc(cb) && cb(sub) + sub.onimport.size(sub, can.ConfHeight()/2, can.ConfWidth()-(can.ui && can.ui.project? can.ui.project.offsetWidth: 0), true), can.base.isFunc(cb) && cb(sub) }, target) }) }, diff --git a/proto.js b/proto.js index ac67235c..dd3f8f63 100644 --- a/proto.js +++ b/proto.js @@ -31,6 +31,7 @@ var ice = { MSG_HANDLE: "_handle", MSG_UPLOAD: "_upload", MSG_ACTION: "_action", MSG_STATUS: "_status", + MSG_INDEX: "_index", MSG_DISPLAY: "_display", MSG_TOOLKIT: "_toolkit", MSG_PROCESS: "_process", @@ -359,21 +360,18 @@ var Volcanos = shy({iceberg: "/chat/", volcano: "/frame.js", cache: {}, pack: {} return can.require(can._follow? libs.concat(meta.libs, meta.volcano): libs, cb), can }) try { if (typeof(window) == lang.OBJECT) { var meta = Volcanos.meta - if (window._version && window.outerWidth-window.innerWidth < 100) { - meta.version = window._version - } meta.target = document.body, meta._height = window.innerHeight, meta._width = window.innerWidth - meta._load = function(url, cb) { - var v = meta.version? meta.version+"&_tt="+(new Date()).getTime(): "" - switch (url.split("?")[0].split(ice.PT).pop().toLowerCase()) { - case nfs.CSS: var item = document.createElement(mdb.LINK); item.href = url+v, item.rel = "stylesheet", item.onload = cb, document.head.appendChild(item); break - case nfs.JS: var item = document.createElement(nfs.SCRIPT); item.src = url+v, item.onerror = cb, item.onload = cb, document.body.appendChild(item); break - default: var item = document.createElement(nfs.SCRIPT); item.src = url+v, item.onerror = cb, item.onload = cb, document.body.appendChild(item) - } } - window.onerror = function(message, source, lineno, colno, error) { window._version && alert([[source, lineno, colno].join(ice.DF), message].join(ice.NL)) } - meta._init = function(can) { window.onerror = function(message, source, lineno, colno, error) { - meta.version? alert([message].concat(can.misc._stacks(0, error)).join(ice.NL)): can.misc.Error(message, ice.NL+[source, lineno, colno].join(ice.DF), error) + if (window._version && window.outerWidth-window.innerWidth < 100) { meta.version = window._version } + meta._load = function(url, cb) { var v = meta.version? meta.version+"&_tt="+(new Date()).getTime(): "" + switch (url.split(ice.QS)[0].split(ice.PT).pop().toLowerCase()) { + case nfs.CSS: var item = document.createElement(mdb.LINK); item.href = url+v, item.rel = "stylesheet", item.onload = cb, document.head.appendChild(item); break + default: var item = document.createElement(nfs.SCRIPT); item.src = url+v, item.onerror = cb, item.onload = cb, document.body.appendChild(item) + } } + meta._init = function(can) { + window.onerror = function(message, source, lineno, colno, error) { + meta.version? alert([message].concat(can.misc._stacks(0, error)).join(ice.NL)): can.misc.Error(message, ice.NL+[source, lineno, colno].join(ice.DF), error) + }, window.onbeforeunload = function() { can.Action._socket && can.Action._socket.close() } 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))) }, 100, can._delay_resize = can._delay_resize||[])