diff --git a/index.css b/index.css index 6f95414d..b1f549a3 100644 --- a/index.css +++ b/index.css @@ -197,19 +197,17 @@ div.project div.action div.item.icons input { display:none; } div.project div.action div.item.icons { background-color:var(--plugin-bg-color); padding:0; } div.project div.list { margin-left:var(--button-margin); clear:both; } body.width6 fieldset.plugin>div.output>div.project div.list { margin-left:var(--legend-margin); } -// div.project div.list { border-left:var(--disable-fg-color) dashed 1px; } +div.project div.list { border-left:var(--disable-fg-color) dashed 1px; } +fieldset.inner>div.output>div.project div.list { border-left:none; } div.project div.list fieldset { position:static; } -div.project div.item.select { - border-right:var(--box-notice3); -} -div.project div.item:not(.hide) i:first-child { - margin-right:var(--input-margin); -} +div.project div.item.select { border-right:var(--box-notice3); } +fieldset.vimer>div.output>div.project div.item.select { border-right:var(--box-border3); } +fieldset.vimer.normal>div.output>div.project div.item.select { border-right:var(--box-notice3); } +fieldset.vimer.insert>div.output>div.project div.item.select { border-right:var(--box-danger3); } +div.project div.item:not(.hide) i:first-child { margin-right:var(--input-margin); } div.project div.item:not(.hide) { - white-space:pre; - line-height:24px; + white-space:pre; line-height:24px; cursor:pointer; padding:0 var(--button-margin); display:flex; align-items:center; - cursor:pointer; } div.project div.item img { height:var(--action-height); width:var(--action-height); } div.project div.item img { margin:0; } diff --git a/lib/misc.js b/lib/misc.js index 7a5bff75..e1ecec9b 100644 --- a/lib/misc.js +++ b/lib/misc.js @@ -30,7 +30,7 @@ Volcanos("misc", { return res }, Option: function(key, val) { if (key == undefined) { return msg.option || [] } - if (can.base.isObject(key)) { return can.core.Item(key, msg.Option) } + if (can.base.isObject(key)) { return can.core.Item(key, function(key, value) { msg.Option(key, value) }) } if (val == undefined) { return can.base.isIn(key, msg.option) && msg[key] && msg[key][0] || "" } return msg.option = can.base.AddUniq(msg.option, key), msg[key] = can.core.List(arguments).slice(1), val }, diff --git a/lib/user.js b/lib/user.js index 946ade11..2cc52df3 100644 --- a/lib/user.js +++ b/lib/user.js @@ -186,7 +186,8 @@ Volcanos("user", { }, carteItem: function(event, can, item) { if (!item.action) { return } var trans = {}, list = can.page.Select(can, can.page.Create(can, html.DIV, item.action), "", function(target) { trans[target.name] = can.user.trans(can, target.value); return target.name }) - can.user.carteRight(event, can, {_trans: trans}, list, function(event, button) { can.Update(can.request(event, item), [ctx.ACTION, button]) }) + can.user.carteRight(event, can, {_trans: trans}, list, function(_event, button) { + can.Update(can.request(_event, event._msg, item), [ctx.ACTION, button]) }) }, input: function(event, can, form, cb, button) { if (!form || form.length == 0) { return cb() } event = event||{}; var msg = can.request(event); event = event._event||event; var need = {} diff --git a/plugin/local/code/inner.js b/plugin/local/code/inner.js index 165a7d74..111963e2 100644 --- a/plugin/local/code/inner.js +++ b/plugin/local/code/inner.js @@ -139,9 +139,8 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { var paths = can.core.Sp function isIndex() { return line == ctx.INDEX } function isSpace() { return line == web.SPACE } function show(skip) { can._msg && can._msg.Option && can._msg.Option(nfs.LINE, can.Option(nfs.LINE)), can._msg = can.db.tabview[key] can.Option(can.onimport.history(can, {path: path, file: file, line: line||can.onexport.session(can, SELECT_LINE+nfs.DF+path+file)||can._msg.Option(nfs.LINE)||1})) - can.onsyntax._init(can, can._msg, function(content) { var msg = can._msg; can.onexport.hash(can) + can.onsyntax._init(can, can._msg, function(content) { var msg = can._msg; can.onexport.hash(can), can.onmotion.toggle(can, can.ui.path, true) can.isCmdMode() && can.onexport.title(can, (isIndex()||isSpace()? "": path)+file), can.onmotion.select(can, can.ui._tabs, html.DIV_TABS, msg._tab), can.isCmdMode() && msg._tab.scrollIntoView() - can.onmotion.toggle(can, can.ui.path, true) if (isSpace()) { can.ui.path.innerHTML = can.page.Format(html.A, can.base.trimPrefix(can.misc.MergePodCmd(can, {pod: can.Option(nfs.FILE)}), location.origin)) } else if (isIndex()) { can.onmotion.hidden(can, can.ui.path) @@ -169,9 +168,11 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { var paths = can.core.Sp name = file.split(mdb.FS)[0].split(isIndex()? nfs.PT: nfs.PS).pop() } var tabs = can.onimport.tabs(can, [{name: name, text: file, _menu: shy([nfs.SAVE, nfs.TRASH, web.REFRESH], function(event, button, meta) { - can.request(event, msg) - can.onaction[button](event, can, button) })}], function(event, tabs) { - can._tab = msg._tab = tabs._target, show(skip), skip = true + can.request(event, msg), can.onaction[button](event, can, button) + })}], function(event, tabs) { can._tab = msg._tab = tabs._target, show(skip), skip = true + can.onmotion.delay(can, function() { + var item = can.ui.zone && can.ui.zone.source && can.ui.zone.source[path+file]; if (!item) { return } + item._tabs = tabs._target, can.page.ClassList.has(can, item, html.SELECT) || can.ui.zone.source[path+file].click() }) }, function(tabs) { can.onengine.signal(can, VIEW_REMOVE, msg) // , can.ui.zone.source.refresh() msg.__content || can.page.Remove(can, msg._content), msg._profile != can.ui._profile && can.page.Remove(can, msg._profile) can.ui._profile._cache && delete(can.ui._profile._cache[key]), can.ui._display._cache && delete(can.ui._display._cache[key]) diff --git a/plugin/local/code/inner/syntax.js b/plugin/local/code/inner/syntax.js index d1bce5e5..23b185a9 100644 --- a/plugin/local/code/inner/syntax.js +++ b/plugin/local/code/inner/syntax.js @@ -200,6 +200,7 @@ Volcanos(chat.ONSYNTAX, { } }, }, mod: {prefix: {"//": code.COMMENT}, split: {operator: "(=>)"}, keyword: {"go": code.KEYWORD, "module": code.KEYWORD, "require": code.KEYWORD, "replace": code.KEYWORD}}, sum: {}, + work: {keyword: {go: code.KEYWORD, use: code.KEYWORD}}, js: {prefix: {"// ": code.COMMENT}, regexp: {"[A-Z_0-9]+": code.CONSTANT}, keyword: { "let": code.KEYWORD, "const": code.KEYWORD, "var": code.KEYWORD, diff --git a/plugin/local/code/vimer.css b/plugin/local/code/vimer.css index 771647ec..46b05fe4 100644 --- a/plugin/local/code/vimer.css +++ b/plugin/local/code/vimer.css @@ -1,6 +1,6 @@ fieldset.vimer>div.output>div.layout>div.layout>div.layout div.content { border-left:var(--box-border); border-top:var(--box-border); } fieldset.vimer>div.output>div.layout>div.layout input.current { background-color:transparent; color:transparent; padding-left:var(--input-padding); height:var(--code-line-height); position:absolute; } -fieldset.vimer>div.output.plugin>div.layout>div.layout input.current { display:none; } +// fieldset.vimer>div.output.plugin>div.layout>div.layout input.current { display:none; } fieldset.vimer>div.output>div.layout>div.layout div.content div.complete { background-color:unset; padding-top:0; display:none; position:absolute; height:1px; overflow:visible; } fieldset.vimer>div.output>div.layout>div.layout div.content div.complete div.prefix { color:transparent; white-space:pre; float:left; } fieldset.vimer>div.output>div.layout>div.layout div.content div.complete table.content thead { display:none; } diff --git a/plugin/local/code/vimer.js b/plugin/local/code/vimer.js index 05f80a95..5e065f80 100644 --- a/plugin/local/code/vimer.js +++ b/plugin/local/code/vimer.js @@ -46,7 +46,9 @@ Volcanos(chat.ONFIGURE, { can.onaction.script(can.request(event, {path: path, file: item.path+(can.base.endWith(item.path, "/")? "client.go": "")}), can, nfs.SCRIPT) }, nfs.TRASH, function(event, button) { can.runAction(event, nfs.TRASH, [path+item.path], function(msg) { show(target, zone, path) }) }, )}; return item - }); cache = can.onimport.tree(can, list, function(event, item) { can.base.endWith(item.path, nfs.PS) || can.onimport.tabview(can, path, item.path) }, function() {}, target, cache) + }); cache = can.onimport.tree(can, list, function(event, item) { can.base.endWith(item.path, nfs.PS) || can.onimport.tabview(can, path, item.path) }, function(event, target, item) { + var msg = can.request(event); msg.Option(nfs.PATH, path), msg.Option(nfs.FILE, item.path) + }, target, cache) can.onmotion.orderShow(can, target) }, true) } if (path.length == 1) { return show(target, zone, path[0]) } can.page.Remove(can, zone._action) can.onimport.zone(can, can.core.List(path, function(path) { return kit.Dict(mdb.NAME, path, path == args[0]? chat._INIT: chat._DELAY_INIT, function(target, zone) { @@ -68,10 +70,11 @@ Volcanos(chat.ONACTION, {list: [ "后台", "桌面", "官网"], _trans: {show: "预览", exec: "展示"}, _run: function(event, can, button, args, cb) { can.runAction(event, button, args, cb||function(msg) { if (msg.IsErr()) { return can.user.toastFailure(can, msg.Result()) } - can.onimport.tabview(can, msg.Option(nfs.PATH), msg.Option(nfs.FILE)), can.ui.zone.source.refresh() + can.onmotion.delay(can, function() { can.onimport.tabview(can, msg.Option(nfs.PATH), msg.Option(nfs.FILE)) }, 300) + can.ui.zone.source.refresh() }) }, _runs: function(event, can, button, cb) { var meta = can.Conf(), msg = can.request(event); msg.Option(ctx.ACTION, button) - can.user.input(event, can, meta.feature[button], function(args) { can.onaction._run(event, can, button, args, cb) }) }, + can.user.input(event, can, meta.feature[button], function(data, args) { var msg = can.request(event); msg.Option(data), can.onaction._run(event, can, button, args, cb) }) }, save: function(event, can, button) { can.request(event, {file: can.Option(nfs.FILE), content: can.onexport.content(can)}) function imports(str) { var block = "", count = 0; can.core.List(str.split(lex.NL), function(item) { if (can.base.beginWith(item, "import (")) { block = can.core.Split(item)[0]; return } @@ -87,7 +90,11 @@ Volcanos(chat.ONACTION, {list: [ } can.user.toastSuccess(can, p, button) }) }, - trash: function(event, can, button) { can.onaction._run(event, can, button, [can.Option(nfs.PATH)+can.Option(nfs.FILE)], function() { can._msg._tab._close() }) }, + trash: function(event, can, button) { var msg = can.request(event), p = msg.Option(nfs.PATH)+msg.Option(nfs.FILE) + can.onaction._run(event, can, button, [p], function() { + var target = can.ui.zone.source[p]; if (target._tabs) { target._tabs._close() } can.page.Remove(can, target) + }) + }, script: function(event, can, button) { can.onaction._runs(event, can, button) }, module: function(event, can, button) { can.onaction._runs(can.request(event, {title: "创建模块"}), can, button) }, compile: function(event, can, button) { var msg = can.request(event); msg.Option(chat._TOAST, "") diff --git a/plugin/table.js b/plugin/table.js index 65ee5d5a..9f24d458 100644 --- a/plugin/table.js +++ b/plugin/table.js @@ -104,7 +104,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { return {text: item.nick||item.name||item.zone||item.sess} }, _menu: function(event, can, item, cbs, target) { target = target||event.currentTarget - if (can.base.isFunc(cbs)) { var menu = cbs(event, target); if (menu) { return can.user.carteRight(event, can, menu.meta, menu.list, menu) } } + if (can.base.isFunc(cbs)) { var menu = cbs(event, target, item); if (menu) { return can.user.carteRight(event, can, menu.meta, menu.list, menu) } } can.user.carteItem(event, can, item) }, _item: function(can, item, cb, cbs) { @@ -158,7 +158,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { if (node[name].childElementCount == 2) { can.onmotion.delay(can, function() { node[name].firstChild.click() }) } }, oncontextmenu: function(event) { can.onimport._menu(event, can, item, cbs) - }}, {view: [[html.LIST, item.expand? "": html.HIDE]]}]) + }}, {view: [[html.LIST, html.HIDE]]}]) node[name] = ui.list, (item._select || can.db.hash && (can.db.hash[0]||"").indexOf(key) == 0) && can.onmotion.delay(can, function() { ui.item.click() }) }) }); return node },