From 207c4306a84097ff6aabd6ad9dda4d189312182b Mon Sep 17 00:00:00 2001 From: shylinux Date: Thu, 4 Jun 2020 06:59:50 +0800 Subject: [PATCH] opt some --- frame.js | 31 +++++++++++++++++++++---------- index.css | 4 ++++ lib/core.js | 8 ++++++-- lib/page.js | 2 ++ pane/Action.js | 11 +++++++++-- plugin/inner.js | 22 +++++++++++++++------- 6 files changed, 57 insertions(+), 21 deletions(-) diff --git a/frame.js b/frame.js index 4f8da58a..36a658d3 100644 --- a/frame.js +++ b/frame.js @@ -5,7 +5,7 @@ Volcanos("onengine", { _init: function(can, meta, list, cb, target) { can.core.Next(meta.panes, function(item, next) { can.onappend._init(can, item, meta.libs.concat(item.list), function(pane) { pane.Conf(item), pane.run = function(event, cmds, cb) { - (can.onengine[cmds[0]]||can.onengine[meta.main.engine])(event, can, pane.request(event), pane, cmds, cb); + return (can.onengine[cmds[0]]||can.onengine[meta.main.engine])(event, can, pane.request(event), pane, cmds, cb) }, can[item.name] = pane, next(); }, can._target); }, function() { can.onlayout._init(can, meta, list, function() { @@ -42,7 +42,7 @@ Volcanos("onengine", { _init: function(can, meta, list, cb, target) { fun && (sub = mod, mod = fun, key = value, fun = mod[value]) }); if (!sub || !mod || !fun) { console.info("not found", chain); return } - typeof fun == "function" && fun(sub, msg, cmds.slice(2), cb, sub._target) + return typeof fun == "function" && fun(sub, msg, cmds.slice(2), cb, sub._target) }, engine: function(event, can, msg, pane, cmds, cb) { if (!can.onengine) { return false } switch (pane._name) { @@ -192,7 +192,7 @@ Volcanos("onappend", { _init: function(can, meta, list, cb, target, field) { var last = sub._history[sub._history.length-1] !can.core.Eq(last, cmds) && cmds[0] != "action" && sub._history.push(cmds) - run(event, cmds, cb, silent) + return run(event, cmds, cb, silent) } // 添加事件 @@ -210,7 +210,7 @@ Volcanos("onappend", { _init: function(can, meta, list, cb, target, field) { }) var count = 0 - function run(event, cmds, cb, silent) { sub.run(event, cmds, function(msg) { + function run(event, cmds, cb, silent) { return sub.run(event, cmds, function(msg) { sub.Status("ncmd", sub._history.length+"/"+count++) if (silent) { typeof cb == "function" && cb(msg); return } @@ -225,7 +225,7 @@ Volcanos("onappend", { _init: function(can, meta, list, cb, target, field) { }, Volcanos.meta.libs.concat(["/frame.js", display]), function(table) { table.Conf(sub.Conf()) table.onimport && table.onimport._init && table.onimport._init(table, msg, msg.result||[], function() {}, output) table.run = function(event, cmds, cb, silent) { cmds = cmds || [] - run(event, cmds, cb, silent) + return run(event, cmds, cb, silent) } // 工具栏 @@ -384,6 +384,10 @@ Volcanos("onappend", { _init: function(can, meta, list, cb, target, field) { can.page.Modify(can, can._carte, {style: {display: "none"}}) }}]).last + meta = meta||can.ondetail||{}, cb = cb||function(ev, item, meta) { + (can.ondetail[item]||can.onaction[item])(event, can) + } + can.page.Appends(can, can._carte, can.core.List(list, function(item) { return {view: ["item"], list: [typeof item == "string"? {text: [item], click: function(event) { typeof cb == "function" && cb(event, item, meta) @@ -399,12 +403,19 @@ Volcanos("onappend", { _init: function(can, meta, list, cb, target, field) { }], value: src[item[0]]||""}]} })) - var pos = {position: "absolute", display: "block", left: event.x, top: event.y} - if (document.body.clientWidth - event.x < 60) { - var pos = {display: "block", right: event.x, top: event.y} - } - pos.left += "px"; pos.top += "px"; + + var ls = can._follow.split(".") + + console.log(ls.length, can) + var left = (ls.length > 2) && can.run({}, ["search", can._follow.split(".")[1]+".onexport.left"]) || 0 + var top = (ls.length == 3) && can.run({}, ["search", can._follow.split(".")[1]+".onexport.top"]) || 0 + var top = (ls.length > 3)? event.y: top + var pos = {position: "absolute", display: "block", left: event.x-left, top: event.y-top} + // if (document.body.clientWidth - event.x < 60) { + // var pos = {display: "block", right: event.x, top: event.y} + // } can.page.Modify(can, can._carte, {style: pos}) + console.log("carte ", can._carte.offsetLeft, "output", can._carte.parentNode.offsetLeft) event.stopPropagation() event.preventDefault() diff --git a/index.css b/index.css index 0c09c584..84833969 100644 --- a/index.css +++ b/index.css @@ -93,6 +93,9 @@ fieldset>div.action>div.item>input { fieldset>div.action>div.item>input:hover { background:gray; } +fieldset>div.action>div.item.space { + width:10px; +} fieldset>div.status>div.item { float:left; padding:4px; @@ -178,6 +181,7 @@ div.carte { background:black; border:solid 2px red; position:absolute; + z-index:10; } div.carte div.item { padding:0 5px; diff --git a/lib/core.js b/lib/core.js index 773c6ac0..4ed82cfe 100644 --- a/lib/core.js +++ b/lib/core.js @@ -92,7 +92,7 @@ Volcanos("core", {help: "核心模块", if (left == "") { left = list[i], space = false, begin = i+1 } else if (left == list[i]) { - res.push({text: list.slice(begin, i), type: "string", left: left}) + res.push({text: list.slice(begin, i), type: "string", left: left, right: left}) left = "", space = true, begin = i+1 } } else if (sups[list[i]]) { @@ -117,7 +117,11 @@ Volcanos("core", {help: "核心模块", } // 末尾单词 - if (begin < list.length) { res.push(list.slice(begin)) } + if (left != "") { + res.push({text: list.slice(begin), type: "string", left: left, right: ""}) + } else if (begin < list.length) { + res.push(list.slice(begin)) + } return res }), diff --git a/lib/page.js b/lib/page.js index 8130d4b7..c39f03d9 100644 --- a/lib/page.js +++ b/lib/page.js @@ -36,6 +36,8 @@ Volcanos("page", {help: "网页模块", "width": true, "height": true, "max-height": true, "margin-left": true, + "left": true, + "top": true, } if (size[sub] && (typeof value == "number" || !value.endsWith("px"))) { value += "px" diff --git a/pane/Action.js b/pane/Action.js index 05a52ec4..cf02be6d 100644 --- a/pane/Action.js +++ b/pane/Action.js @@ -42,11 +42,12 @@ Volcanos("onexport", {help: "导出数据", list: [], _init: function(can, msg, can.Conf("action", value.name) // console.log(event, sub, msg) // 插件回调 - can.run(event, [river, storm, index].concat(cmds), function(msg) { + // + return can.run(event, can.onengine[cmds[0]]? cmds: [river, storm, index].concat(cmds), function(msg) { can.run(msg._event, ["search", "Footer.onaction.ncmd"]); can.onappend.toast(can, "执行成功", value.name, 2000); typeof cb == "function" && cb(msg) - }, silent); + }, silent) } sub._target.oncontextmenu = function(event) { can.onappend.carte(can, can.ondetail, can.ondetail.list, function(event, item, meta) { @@ -60,5 +61,11 @@ Volcanos("onexport", {help: "导出数据", list: [], _init: function(can, msg, key: function(can, msg) { msg.Option("active", can.Conf("action")) can.core.Item(can.Conf("active"), msg.Option) }, + left: function(can) { + return can._target.offsetLeft + }, + top: function(can) { + return can._target.offsetTop + }, }) diff --git a/plugin/inner.js b/plugin/inner.js index 189c340d..379a137d 100644 --- a/plugin/inner.js +++ b/plugin/inner.js @@ -52,6 +52,7 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb, tabview: function(can, path, name) { can.Option("path", path) can.Option("name", name) + can.Option("key", "") if (can.tabview[path+name]) { return can.onsyntax._init(can, can.tabview[path+name]) } can.run({}, [path, name], function(msg) { @@ -60,6 +61,9 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb, can.page.Append(can, can._action, [{view: ["file", "div", name], onclick: function(event) { can.onsyntax._init(can, msg) + }, oncontextmenu: function(event) { + can.onappend.carte(can, null, ["保存", "运行"]) + }}]), can.onsyntax._init(can, can.tabview[path+name] = msg) }, true) }, @@ -132,7 +136,7 @@ Volcanos("onsyntax", {help: "语法高亮", list: ["keyword", "prefix", "line"], switch (item.type) { case "space": return text - case "string": return wrap("string", item.left+text+item.left) + case "string": return wrap("string", item.left+text+item.right) default: return wrap(key, text) } }).join("")) @@ -190,7 +194,7 @@ Volcanos("onsyntax", {help: "语法高亮", list: ["keyword", "prefix", "line"], "require": "keyword", }, prefix: {"#": "comment"}, - suffix: {"{": "comment"}, + suffix: {"\x7B": "comment"}, line: function(can, line) { return line }, }, vim: { @@ -203,6 +207,10 @@ Volcanos("onsyntax", {help: "语法高亮", list: ["keyword", "prefix", "line"], }, shy: { profile: true, + keyword: { + "chapter": "keyword", + "label": "keyword", + }, split: {}, line: function(can, line) { return line }, }, @@ -561,7 +569,7 @@ Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert" }, }, }) -Volcanos("onaction", {help: "控件交互", list: ["项目", "上传", "保存", "", "历史", "提交", "运行", "日志", "记录", "复盘"], +Volcanos("onaction", {help: "控件交互", list: ["", "项目", "", "上传", "保存", "运行", "日志", "", "提交", "历史", "记录", "复盘", ""], modifyLine: function(can, target, value) { var p = can.onsyntax.parse(can, value) typeof p == "object"? can.page.Appends(can, target, [p]): target.innerHTML = p }, @@ -610,17 +618,17 @@ Volcanos("onaction", {help: "控件交互", list: ["项目", "上传", "保存", "项目": function(event, can, msg) { can.onlayout.project(can) }, "上传": function(event, can, msg) { can.onappend.upload(can) }, "保存": function(event, can, msg) { can.onkeymap._remote(event, can, "保存") }, - "提交": function(event, can, msg) { can.onkeymap._remote(event, can, "提交") }, - "历史": function(event, can, msg) { can.onkeymap._remote(event, can, "历史") }, "运行": function(event, can, msg) { can.onkeymap._remote(event, can, "运行") }, "日志": function(event, can, msg) { can.onkeymap._remote(event, can, "日志") }, - "记录": function(event, can, msg) { - var sub = can.request(event) + "记录": function(event, can, msg) { var sub = can.request(event) can.core.Item(can.Option(), sub.Option) sub.Option("display", can.display.innerText) can.onkeymap._remote(event, can, "记录", ["action", "记录"]) }, "复盘": function(event, can, msg) { can.onkeymap._remote(event, can, "复盘") }, + + "提交": function(event, can, msg) { can.onkeymap._remote(event, can, "提交") }, + "历史": function(event, can, msg) { can.onkeymap._remote(event, can, "历史") }, }) Volcanos("ondetail", {help: "菜单交互", list: ["删除行", "合并行", "插入行", "添加行", "追加行"], "删除行": function(event, can, msg) {