diff --git a/frame.js b/frame.js index c8211358..4ec41e73 100644 --- a/frame.js +++ b/frame.js @@ -20,7 +20,8 @@ Volcanos("onengine", {help: "搜索引擎", list: [], _init: function(can, meta, // panel.onkeypop._build(panel) }, target) }, function() { can.misc.Log(can.user.title(), ice.RUN, can) - can.ondaemon._init(can), can.onmotion._init(can, target), can.onkeypop._init(can, target) + can.require(["/frame.js"], null, function(can, name, sub) { can[name] = sub }) + can.ondaemon._init(can), can.onmotion._init(can, target), can.onkeypop._init(can) can.onlayout.topic(can), can.onengine.signal(can, chat.ONMAIN, can.request()) can.base.isFunc(cb) && cb() }) @@ -654,10 +655,14 @@ Volcanos("onmotion", {help: "动态特效", list: [], _init: function(can, targe }, }) Volcanos("onkeypop", {help: "键盘交互", list: [], _focus: [], _init: function(can, target) { - var focus = can.onkeypop._focus; can.onkeypop._build(can) - can.onengine.listen(can, "keymap.focus", function(cb) { cb? focus.push(cb): can.onkeypop._focus.length = 0 }) - document.body.onkeydown = function(event) { if (focus.length > 0) { return focus[focus.length-1](event) } - event.target == target && (target._keys = can.onkeypop._parse(event, can, "normal", target._keys||[], target)) + document.body.onkeydown = function(event) { var msg = can.request(event) + msg.Option("model", "normal"); if (event.target.tagName == "INPUT") { + msg.Option("model", event.ctrlKey? "insert_ctrl": "insert") + } + if (msg.Option(ice.MSG_HANDLE) == ice.TRUE) { return } + can.onengine.signal(can, "onkeydown", msg) + if (msg.Option(ice.MSG_HANDLE) == ice.TRUE) { return } + can._keylist = can.onkeypop._parse(event, can, msg.Option("model"), can._keylist||[], can._output) } }, _build: function(can) { @@ -686,7 +691,7 @@ Volcanos("onkeypop", {help: "键盘交互", list: [], _focus: [], _init: functio var map = can.onkeypop._engine[mode]||{}; for (var i = list.length-1; i > pre-1; i--) { var cb = map[list[i]]||{}; switch (typeof cb) { - case lang.FUNCION: repeat(cb, count); return list + case lang.FUNCTION: repeat(cb, count); return list case lang.OBJECT: map = cb; continue case lang.STRING: default: return list @@ -695,38 +700,6 @@ Volcanos("onkeypop", {help: "键盘交互", list: [], _focus: [], _init: functio return list }, _mode: { - normal: { - j: function(event, can, target) { target.scrollBy(0, event.ctrlKey? 300: 30) }, - k: function(event, can, target) { target.scrollBy(0, event.ctrlKey? -300: -30) }, - - b: function(event, can, target) { can.search(event, ["Header.onaction.black"]) }, - w: function(event, can, target) { can.search(event, ["Header.onaction.white"]) }, - - s: function(event, can, target) { can.search(event, ["River.ondetail.添加应用"]) }, - t: function(event, can, target) { can.search(event, ["River.ondetail.添加工具"]) }, - - ":": function(event, can, target) { - can.page.Select(can, document.body, "fieldset.panel.Footer input.cmd", function(target) { - target.focus() - }) - }, - " ": function(event, can, target) { - can.page.Select(can, document.body, "fieldset.panel.Header div.search input", function(target) { - target.focus() - }) - }, - enter: function(event, can, target) { can.misc.Log("enter") }, - escape: function(event, can, target) { - can.page.Select(can, document.body, "fieldset.float", function(item) { - can.page.Remove(can, item) - }) - can.page.Select(can, document.body, "fieldset.auto", function(item) { - can.onmotion.hidden(can, item) - }) - can.search(event, ["Search.onaction.hide"]) - can.misc.Log("enter") - }, - }, insert: { escape: function(event, can, target) { target.blur() diff --git a/lib/user.js b/lib/user.js index 8380df2c..65ff3a7c 100644 --- a/lib/user.js +++ b/lib/user.js @@ -226,6 +226,7 @@ Volcanos("user", {help: "用户操作", agent: { return {type: html.TR, list: [{type: html.TD, list: [{text: item._trans||can.user.trans(can, item.name)||""}]}, {type: html.TD, list: [can.page.input(can, item)]} ]} })}, {view: chat.ACTION}, ]}]); can.onlayout.figure(event, can, ui._target) + can.page.ClassList.add(can, ui._target, "float") var action = can.onappend._action(can, button||[html.SUBMIT, html.CANCEL], ui.action, { cancel: function(event) { can.page.Remove(can, ui._target) }, diff --git a/page/index.css b/page/index.css index c1f1303a..a7645787 100644 --- a/page/index.css +++ b/page/index.css @@ -570,7 +570,7 @@ body.white table input[type=button][value=启动] { } body.white fieldset>div.legend { - background-color:honeydew; + /* background-color:honeydew; */ } body.white fieldset>div.status>div.item>label { font-size:10px; color:#cefbfbe0; diff --git a/panel/action.js b/panel/action.js index fb3197a2..aa164f7f 100644 --- a/panel/action.js +++ b/panel/action.js @@ -95,7 +95,10 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, } can.base.isFunc(cb) && cb() }, - onmain: function(can, msg) { can.onimport._share(can, can.misc.Search(can, web.SHARE)) }, + onmain: function(can, msg) { + can.onimport._share(can, can.misc.Search(can, web.SHARE)) + can.onkeypop._init(can) + }, onsize: function(can, msg, width, height) { can.Conf({width: width, height: height}) }, onsearch: function(can, msg, word) { if (word[0] == "*" || word[0] == mdb.PLUGIN) { can.onexport.plugin(can, msg, word) } @@ -147,6 +150,42 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg, can.onlayout._init(can) }, }) +Volcanos("onkeypop", {help: "键盘交互", list: [], _focus: [], _init: function(can, target) { + can.onkeypop._build(can), can.onengine.listen(can, "onkeydown", function(msg, model) { + can._keylist = can.onkeypop._parse(msg._event, can, model, can._keylist||[], can._output) + }) + }, + _mode: { + normal: { + j: function(event, can, target) { target.scrollBy(0, event.ctrlKey? 300: 30) }, + k: function(event, can, target) { target.scrollBy(0, event.ctrlKey? -300: -30) }, + + b: function(event, can, target) { can.search(event, ["Header.onaction.black"]) }, + w: function(event, can, target) { can.search(event, ["Header.onaction.white"]) }, + + s: function(event, can, target) { can.search(event, ["River.ondetail.添加应用"]) }, + t: function(event, can, target) { can.search(event, ["River.ondetail.添加工具"]) }, + + ":": function(event, can, target) { + can.onengine.signal(can, "oncommandfocus") + }, + " ": function(event, can, target) { + can.onengine.signal(can, "onsearchfocus") + }, + enter: function(event, can, target) { can.misc.Log("enter") }, + escape: function(event, can, target) { + can.page.Select(can, document.body, "fieldset.float,div.float", function(item) { + can.page.Remove(can, item) + }) + can.page.Select(can, document.body, "fieldset.auto", function(item) { + can.onmotion.hidden(can, item) + }) + can.search(event, ["Search.onaction.hide"]) + can.misc.Log("enter") + }, + }, + }, _engine: {}, +}) Volcanos("onexport", {help: "导出数据", list: [], args: function(can, msg, list, cb, target) { can.core.Next(can.page.Select(can, target, "fieldset.plugin>form.option"), function(item, next, index, array) { diff --git a/panel/footer.js b/panel/footer.js index e39833d7..87f31cc6 100644 --- a/panel/footer.js +++ b/panel/footer.js @@ -61,6 +61,11 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg, onlogin: function(can, msg) { can.run({}, [], function(msg) { can.onimport._init(can, msg, [], null, can._output) }) }, onremote: function(can, msg) { can.core.CallFunc(can.onimport.ncmd, {can: can, msg: msg}) }, ontoast: function(can, msg) { can.core.CallFunc(can.onimport.toast, {can: can, msg: msg}) }, + oncommandfocus: function(can) { + can.page.Select(can, can._output, "div.cmd input", function(target) { + target.focus() + }) + }, _cmd: function(can) { return can.onappend.float(can, can._cmds, function(value, key, index, line, list) { diff --git a/panel/header.js b/panel/header.js index f7f1f921..98bf0fea 100644 --- a/panel/header.js +++ b/panel/header.js @@ -158,6 +158,11 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, meta, }) }, onstorm_select: function(can, msg, river, storm) { can.Conf(chat.RIVER, river), can.Conf(chat.STORM, storm) }, + onsearchfocus: function(can) { + can.page.Select(can, can._output, "div.search input", function(target) { + target.focus() + }) + }, title: function(event, can) { var args = {}; can.core.List([chat.TITLE, chat.TOPIC, chat.LAYOUT], function(key) { diff --git a/panel/search.js b/panel/search.js index 0f12345b..8c438cdf 100644 --- a/panel/search.js +++ b/panel/search.js @@ -64,7 +64,7 @@ Volcanos("onaction", {help: "交互操作", list: [cli.CLEAR, cli.CLOSE, cli.DON {view: chat.CONTENT}, {view: html.STATUS}, {view: [chat.DISPLAY, html.TABLE]},{view: chat.PROFILE}, ]), can.page.ClassList.add(can, can.ui.display, chat.CONTENT) }, - onopensearch: function(can, msg, type, word) { can.onimport.select(can, msg, [type, word]) }, + onopensearch: function(can, msg, type, word) { can.onimport.select(can, msg, [type||"*", word||""]) }, clear: function(event, can) { can.onmotion.clear(can, can.ui.profile) }, done: function(event, can) { can.base.isFunc(can.cb) && can.cb() }, diff --git a/proto.js b/proto.js index 2e0ca730..2ad505b4 100644 --- a/proto.js +++ b/proto.js @@ -195,16 +195,16 @@ var Volcanos = shy("火山架", {iceberg: "/chat/", volcano: "/frame.js", args: } can = can||{} - var proto = {__proto__: meta, _path: _can_path, _name: name, _load: function(name, cb) { // 加载缓存 + var proto = {__proto__: meta, _path: _can_path, _name: name, _load: function(name, each) { // 加载缓存 var cache = meta.cache[name]||[]; for (list.reverse(); list.length > 0; list) { var sub = list.pop(); sub != can && cache.push(sub) }; meta.cache[name] = cache // 加载模块 - for (var i = 0; i < cache.length; i++) { var sub = cache[i] - if (typeof cb == lang.FUNCTION && cb(can, name, sub)) { continue } - !can[sub._name] && (can[sub._name] = {}); for (var k in sub) { - can[sub._name].hasOwnProperty(k) || (can[sub._name][k] = sub[k]) + for (var i = 0; i < cache.length; i++) { var sub = cache[i], name = sub._name + if (typeof each == lang.FUNCTION && each(can, name, sub)) { continue } + !can[name] && (can[name] = {}); for (var k in sub) { + can[name].hasOwnProperty(k) || (can[name][k] = sub[k]) } } },