diff --git a/frame.js b/frame.js index 0782221b..dd7e1b42 100644 --- a/frame.js +++ b/frame.js @@ -1,5 +1,4 @@ Volcanos(chat.ONENGINE, {_init: function(can, meta, list, cb, target) { - console.log(can.misc._time()) if (!can.user.isMailMaster) { if (can.misc.Search(can, ice.MSG_SESSID)) { can.misc.CookieSessid(can, can.misc.Search(can, ice.MSG_SESSID)); return can.misc.Search(can, ice.MSG_SESSID, "") } } can.Option = function() {}, can.run = function(event, cmds, cb) { var msg = can.request(event); cmds = cmds||[]; return (can.onengine[cmds[0]]||can.onengine._remote)(event, can, msg, can, cmds, cb) } can.user.title(can.misc.SearchOrConf(can, chat.TITLE)||can.misc.Search(can, ice.POD)||location.host) @@ -11,9 +10,8 @@ Volcanos(chat.ONENGINE, {_init: function(can, meta, list, cb, target) { can.core.CallFunc([sub.onaction, chat._INIT], {can: sub, cb: next, target: sub._target}), delete(sub._history), delete(sub._conf.feature) }, target) }, function() { can.onlayout._init(can, target), can.onmotion._init(can, target), can.onkeymap._init(can, target) + // can.onengine._config(can), can.onengine.signal(can, chat.ONMAIN, can.request()), can.base.isFunc(cb) && cb(can) - return - can.onengine._config(can) }), can._path = location.href }, _config: function(can) { can.require(["/require/src/conf.js"], function() {}, function(can, name, sub) { @@ -38,12 +36,11 @@ Volcanos(chat.ONENGINE, {_init: function(can, meta, list, cb, target) { if (panel.onengine._engine(event, can, msg, panel, cmds, cb)) { return } 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() { if (msg._can && msg._can._toast) { return } toast = toast||can.user.toastProcess(msg._can, _toast) }, 500) } - msg.OptionDefault(ice.MSG_THEME, can.getHeader(chat.THEME)) - var sub = msg._can; if (can.base.isUndefined(msg[ice.MSG_DAEMON])) { 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)) } } if (!can.misc.CookieSessid(can) && can.user.info.sessid) { msg.Option(ice.MSG_SESSID, can.user.info.sessid) } + msg.OptionDefault(ice.MSG_THEME, can.getHeader(chat.THEME)) can.base.isIn(sub.ConfIndex(), "qrcode", "cli.qrcode") && can.page.exportValue(sub, msg) can.onengine.signal(panel, chat.ONREMOTE, can.request({}, {_follow: panel._follow, _msg: msg, _cmds: cmds})) var names = msg.Option(chat._NAMES)||panel._names||((can.Conf("iceberg")||Volcanos.meta.iceberg)+"/chat/"+panel._name) @@ -73,8 +70,7 @@ Volcanos(chat.ONENGINE, {_init: function(can, meta, list, cb, target) { return can.base.isString(item) && (item = can.core.SplitInput(item, can.base.isFunc(command.meta[item])? html.BUTTON: type)), item.type != html.SELECT && (type = item.type), button = button || item.type == html.BUTTON, item }); if (!button) { command.list.push(can.core.SplitInput(ice.LIST, html.BUTTON)) } command.can = can, command.meta.name = name, arguments.callee.meta[_name] = command }), - listen: shy(function(can, name, cb, target) { - arguments.callee.meta[name] = (arguments.callee.meta[name]||[]).concat(cb) + listen: shy(function(can, name, cb, target) { arguments.callee.meta[name] = (arguments.callee.meta[name]||[]).concat(cb) if (target) { target[name] = function(event) { can.onengine.signal(can, name, can.request(event)) } } }), signal: function(can, name, msg) { msg = msg||can.request(); var _msg = name == chat.ONREMOTE? msg.Option("_msg"): msg @@ -97,7 +93,7 @@ Volcanos(chat.ONDAEMON, {_init: function(can, name) { if (can.user.isLocalFile) }, refresh: function(can, sub) { can.base.isFunc(sub.Update) && sub.Update() }, action: function(can, msg, sub, arg) { - if (arg[0] == "ctrl") { var list = []; can.misc.Log("what ", document.activeElement) + if (arg[0] == "ctrl") { var list = [] can.page.Select(can, can._root._target, html.INPUT, function(target, index) { list[index] = target if (document.activeElement == document.body) { return target.focus() } switch (arg[1]) { @@ -533,9 +529,7 @@ Volcanos(chat.ONLAYOUT, {_init: function(can, target) { target = target||can._ro } if (layout.left+target.offsetWidth > left+width) { layout.left = (right? rect.left: left+width)-target.offsetWidth-1 } }); - can.onmotion.move(can, target, layout) - // can.onmotion.slideDown(can, target) - can.onmotion.slideGrow(can, target) + can.onmotion.move(can, target, layout), can.onmotion.slideGrow(can, target) return layout }, }) @@ -842,9 +836,7 @@ Volcanos(chat.ONKEYMAP, {_init: function(can, target) { target = target||documen selectOutput: function(event, can) { if (!event.ctrlKey || event.key < "0" || event.key > "9") { return } event.key == "0"? can.onimport._back(can): can.page.Select(can, can._output, html.TR, function(tr, index) { if (index == event.key) { var head = can.page.Select(can, can._output, html.TH, function(th, order) { return th.innerText }), data = {} - can.page.Select(can, tr, html.TD, function(td, index) { data[head[index]] = td.innerText - can.Option(head[index], td.innerText) - }) + can.page.Select(can, tr, html.TD, function(td, index) { data[head[index]] = td.innerText, can.Option(head[index], td.innerText) }) can.onexport.record(can, "", "", data) || can.Update(event) } }) }, diff --git a/index.css b/index.css index 3a8ac9ac..ddb8e813 100644 --- a/index.css +++ b/index.css @@ -290,7 +290,7 @@ fieldset>div.status>legend>span.remove:hover { background-color:var(--hover-bg-c fieldset>div.status>legend:not(:hover)>span.remove { visibility:hidden; } fieldset>div.status>legend:not(:hover):not(.select) { background-color:unset; border-radius:0; } /* theme */ -body { background-color:var(--panel-bg-color); color:var(--body-fg-color); } +body { background-color:var(--body-bg-color); color:var(--body-fg-color); } body.cmd { background-color:var(--plugin-bg-color); color:var(--body-fg-color); } legend { background-color:var(--legend-bg-color); border-radius:var(--input-radius); } legend:hover { background-color:var(--hover-bg-color); color:var(--hover-fg-color); } diff --git a/lib/misc.js b/lib/misc.js index 7145e2df..808dca60 100644 --- a/lib/misc.js +++ b/lib/misc.js @@ -78,7 +78,7 @@ Volcanos("misc", { IsErr: function() { return msg.result && msg.result[0] == "warn: " }, - _caller: function(skip) { msg.Option("log.caller") || msg.Option("log.caller", can.misc.fileLine((skip||2)+1).link); return msg }, + _caller: function(skip) { msg.Option("log.caller") || msg.Option("log.caller", can.misc.fileLine((skip||2)+3).link); return msg }, }); 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) @@ -208,8 +208,9 @@ Volcanos("misc", { if (value === "") { return sessionStorage.removeItem(key) } sessionStorage.setItem(key, value) } return can.base.Obj(sessionStorage.getItem(key)) }, - Log: function() { var args = this._args("", arguments) - if (arguments[0].indexOf && arguments[0].indexOf("on") == 0) { args[1] = this.FileLine((arguments[0] == "onremote"? 4: 2)+this._skip) } + Log: function() { + var args = this._args("", arguments) + if (arguments[0].indexOf && arguments[0].indexOf("on") == 0) { args[1] = this.FileLine((arguments[0] == "onremote"? 1: 1)+this._skip) } for (var i in arguments) { var arg = arguments[i]; if (arg && arg.Option && arg.Option("log.caller")) { args[1] = arg.Option("log.caller") } } console.log.apply(console, args), this._signal(args) }, @@ -250,5 +251,5 @@ Volcanos("misc", { _args: function(level, arg) { var args = [this._time(), this.FileLine(this._skip+1, 3)].concat(level? [level]: []) for (var i in arg) { arg[i] != undefined && args.push(arg[i]) } return args }, - _signal: function(args) { this._list.push(args) }, _list: [], _skip: navigator.userAgent.indexOf("Chrome") > -1? 1: 1, + _signal: function(args) { this._list.push(args) }, _list: [], _skip: navigator.userAgent.indexOf("Chrome") > -1? 4: 1, }) diff --git a/lib/user.js b/lib/user.js index 0818c670..be89679a 100644 --- a/lib/user.js +++ b/lib/user.js @@ -52,7 +52,6 @@ Volcanos("user", { }, close: function(url) { return window.close() }, theme: function(can, name) { can.base.isString(name) && (name = [name]) || name || [] - // name.indexOf(chat.BLACK) > -1 && name.push(html.DARK), name.indexOf(chat.WHITE) > -1 && name.push(chat.BLACK, html.LIGHT) can.user.language(can) && name.push(can.core.Split(can.user.language(can), "-")[0]), can.user.mod.isCmd && name.push(chat.CMD), can.user.isWebview && name.push(html.WEBVIEW) can.user.isWindows && name.push("windows"), can.user.isMobile && name.push(html.MOBILE) && can.user.isLandscape() && name.push(html.LANDSCAPE) can.page.styleClass(can, document.body, name.join(lex.SP)) diff --git a/panel/action.js b/panel/action.js index 757ab541..7427f0a5 100644 --- a/panel/action.js +++ b/panel/action.js @@ -120,7 +120,7 @@ Volcanos(chat.ONLAYOUT, { flow: function(can) { can.getActionSize(function(height, width) { can.ConfHeight(height-html.ACTION_MARGIN), can.ConfWidth(width) }) }, page: function(can) { can.page.styleHeight(can, can._output, ""), can.page.style(can, document.body, kit.Dict(html.OVERFLOW, "")) }, _plugin: function(can, button) { can.core.List(can._plugins, function(sub) { - sub.onimport.size(sub, can.ConfHeight()-can.Conf(html.MARGIN_Y)-(button? 0: html.ACTION_MARGIN), can.ConfWidth()-can.Conf(html.MARGIN_X), can.onexport.isauto(can)) && can.page.style(can, sub._output, html.MAX_HEIGHT, "") + sub.onimport.size(sub, can.ConfHeight()-can.Conf(html.MARGIN_Y)-(button || sub.isCmdMode()? 0: html.ACTION_MARGIN), can.ConfWidth()-can.Conf(html.MARGIN_X), can.onexport.isauto(can)) && can.page.style(can, sub._output, html.MAX_HEIGHT, "") }) }, _storage: function(can, value) { return can.misc.sessionStorage(can, can.core.Keys(CAN_LAYOUT, location.pathname), value) }, }) diff --git a/panel/header.js b/panel/header.js index d21a9ec6..31fc452a 100644 --- a/panel/header.js +++ b/panel/header.js @@ -15,7 +15,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { }) }, _avatar: function(can, msg) { can.user.isExtension || can.user.isLocalFile || can.page.Modify(can, "div.state.avatar>img", {src: can.onexport.avatar(can)}) }, _background: function(can, msg) { if (can.user.isExtension || can.user.isLocalFile) { return } - can.onlayout.background(can, can.onexport.background(can)) + // can.onlayout.background(can, can.onexport.background(can)) // window.parent == window? can.onlayout.background(can, can.onexport.background(can)): can.page.style(can, document.body, html.BACKGROUND_COLOR, "transparent") }, _search: function(can, msg, target) { diff --git a/plugin/local/code/vimer.js b/plugin/local/code/vimer.js index f8b764be..a661d521 100644 --- a/plugin/local/code/vimer.js +++ b/plugin/local/code/vimer.js @@ -95,7 +95,7 @@ Volcanos(chat.ONACTION, {list: [ "构建": function(event, can) { can.onimport.tabview(can, "", web.CODE_COMPILE, ctx.INDEX) }, "编译": function(event, can) { can.onaction.compile(event, can, code.COMPILE) }, - "终端": function(event, can) { can.user.input(can.request(event, {action: "xterm"}), can, [mdb.TYPE], function(args) { can.onimport.tabview(can, "", [web.CODE_XTERM, args[1]||"ish"].join(mdb.FS), ctx.INDEX) }) }, + "终端": function(event, can) { can.user.input(can.requests(event, {action: "xterm"}), can, [mdb.TYPE], function(args) { can.onimport.tabview(can, "", [web.CODE_XTERM, args[1]||"ish"].join(mdb.FS), ctx.INDEX) }) }, "路由": function(event, can) { can.onimport.tabview(can, "", web.ROUTE, ctx.INDEX) }, "源码": function(event, can) { can.onimport.tabview(can, "", web.CODE_GIT_STATUS, ctx.INDEX) }, diff --git a/plugin/story/trend.js b/plugin/story/trend.js index 96b007cd..fdf5b758 100644 --- a/plugin/story/trend.js +++ b/plugin/story/trend.js @@ -1,7 +1,9 @@ -Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { can.page.requireDraw(can, function() { can.base.isFunc(cb) && cb(msg) - can.Conf(ice.VIEW) && can.Action(ice.VIEW, can.Conf(ice.VIEW)), can.onmotion.toggle(can, can._option, !can.user.isMobile || !can.isFullMode()) - can.db.data = msg.Table(), can.onimport.layout(can) - }) }, +Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { + can.page.requireDraw(can, function() { can.base.isFunc(cb) && cb(msg) + can.Conf(ice.VIEW) && can.Action(ice.VIEW, can.Conf(ice.VIEW)), can.onmotion.toggle(can, can._option, !can.user.isMobile || !can.isFullMode()) + can.db.data = msg.Table(), can.onimport.layout(can) + }) + }, _sum: function(can) { if (can.db.list) { return can.db.list } var begin = "", count = 0, rest = 0, add = 0, del = 0, max = 0 can.max = 0, can.min = 0, can.db.list = can.core.List(can.db.data, function(value, index) { @@ -86,7 +88,7 @@ Volcanos(chat.ONACTION, {list: [[ice.VIEW, "趋势图", "柱状图", "折线图" Volcanos(chat.ONDETAIL, { onmouseenter: function(event, can, item) { can.Status(item) }, onclick: function(event, can, item) { can.run(can.request(event, item, can.Option()), [mdb.DETAIL], function(msg) { - msg.Append(ctx.STYLE, html.FLOAT), can.sup.onimport._field(can, msg) + msg.Append(ctx.STYLE, html.FLOAT), can.sup.onimport._field(can.sup, msg) }) }, }) Volcanos(chat.ONEXPORT, {list: ["from", "commit", "total", "max", "date", "text", "add", "del"], diff --git a/plugin/table.js b/plugin/table.js index 8f4e7e3a..c8571cc9 100644 --- a/plugin/table.js +++ b/plugin/table.js @@ -238,29 +238,29 @@ Volcanos(chat.ONEXPORT, { }) Volcanos(chat.ONACTION, { onkeydown: function(event, can) { - if (event.ctrlKey && "0" <= event.key && event.key <= "9") { return can.onaction.ctrln(event, can) } + if (event.ctrlKey && "0" <= event.key && event.key <= "9") { return can.onkeymap.ctrln(event, can) } can._keylist = can.onkeymap._parse(event, can, mdb.PLUGIN, can._keylist||[], can._output) }, - escape: function(event, can) {}, - space: function(event, can) { can.ui.filter && (can.ui.filter.focus(), can.onkeymap.prevent(event)) }, - enter: function(event, can) {}, - ctrln: function(event, can) { can.onkeymap.selectCtrlN(event, can, can._action, html.DIV_TABS) }, - tabs: function(event, can) {}, - tabx: function(event, can) { can.page.Select(can, can._action, html.DIV_TABS_SELECT, function(target) { target._close() }) }, }) Volcanos(chat.ONKEYMAP, { + escape: function(event, can) {}, + enter: function(event, can) {}, + ctrln: function(event, can) { can.onkeymap.selectCtrlN(event, can, can._action, html.DIV_TABS) }, + space: function(event, can) { can.ui.filter && (can.ui.filter.focus(), can.onkeymap.prevent(event)) }, + tabx: function(event, can) { can.page.Select(can, can._action, html.DIV_TABS_SELECT, function(target) { target._close() }) }, + tabs: function(event, can) {}, _mode: { plugin: { - Escape: shy("清理屏幕", function(event, can) { can.onaction.escape(event, can) }), - Enter: shy("执行操作", function(event, can) { can.onaction.enter(event, can) }), - " ": shy("搜索项目", function(event, can) { can.onaction.space(event, can) }), + Escape: shy("清理屏幕", function(event, can) { can.onkeymap.escape(event, can) }), + Enter: shy("执行操作", function(event, can) { can.onkeymap.enter(event, can) }), + " ": shy("搜索项目", function(event, can) { can.onkeymap.space(event, can) }), f: shy("搜索项目", function(event, can) { can.ui.filter && (can.ui.filter.focus(), can.onkeymap.prevent(event)) }), a: shy("展示项目", function(event, can) { can.ui.project && (can.onmotion.toggle(can, can.ui.project), can.onimport.layout(can)) }), v: shy("展示预览", function(event, can) { can.ui.profile && (can.onmotion.toggle(can, can.ui.profile), can.onimport.layout(can)) }), r: shy("展示输出", function(event, can) { can.ui.display && (can.onmotion.toggle(can, can.ui.display), can.onimport.layout(can)) }), p: shy("添加插件", function(event, can) { can.sup.onaction["添加工具"](event, can.sup) }), - t: shy("添加标签", function(event, can) { can.onaction.tabs(event, can) }), - x: shy("添加标签", function(event, can) { can.onaction.tabx(event, can) }), + t: shy("添加标签", function(event, can) { can.onkeymap.tabs(event, can) }), + x: shy("添加标签", function(event, can) { can.onkeymap.tabx(event, can) }), l: shy("打开右边标签", function(event, can) { can.page.Select(can, can._action, html.DIV_TABS_SELECT, function(target) { var next = target.nextSibling; next && can.page.ClassList.has(can, next, html.TABS) && next.click() }) }), diff --git a/proto.js b/proto.js index 42f50c8a..b05f0b56 100644 --- a/proto.js +++ b/proto.js @@ -47,7 +47,15 @@ var Volcanos = shy({ meta.cache[name]? next(): meta._load(name, next) }, requestPodCmd: function(event) { return can.request(event, {space: can.ConfSpace(), index: can.ConfIndex()}) }, - request: function(event) { event = event||{}, event = event._event||event + requests: function(event) { event = event||{}, event = event._event||event + var msg = event._msg||can.misc.Message(event, can); event._msg = msg + function set(key, value) { msg.Option(key, value) } + can.core.List(arguments, function(item, index) { if (!item || index == 0) { return } + can.base.isFunc(item.Option)? can.core.List(item.Option(), function(key) { set(key, item.Option(key)) }): can.core.Item(can.base.isFunc(item)? item(): item, set) + }); return msg + }, + request: function(event) { + event = event||{}, event = event._event||event var msg = event._msg||can.misc.Message(event, can); event._msg = msg function set(key, value) { if (key == "_method") { return msg._method = value } value == "" || msg.Option(key) || msg.Option(key, value)