From 13260d13c84247eff6310108e02ef72be413db12 Mon Sep 17 00:00:00 2001 From: shy Date: Tue, 30 Apr 2024 22:11:54 +0800 Subject: [PATCH] add some --- const.js | 7 ++++++- frame.js | 6 ++++-- index.css | 15 ++++++++++++--- plugin/local/code/vimer.js | 3 +++ plugin/state.js | 14 +++++++++++--- plugin/table.js | 15 ++++++++------- 6 files changed, 44 insertions(+), 16 deletions(-) diff --git a/const.js b/const.js index 4bc77170..d16fd9a9 100644 --- a/const.js +++ b/const.js @@ -422,6 +422,9 @@ var icon = { access: "bi bi-file-earmark-lock", sso: "bi bi-shield-check", login: "bi bi-person-check", token: "bi bi-key", username: "bi bi-person-gear", nodename: "bi bi-globe", + password: "bi bi-shield-lock", + database: "bi bi-database", + table: "bi bi-table", domain: "bi bi-globe", origin: "bi bi-globe", server: "bi bi-globe", @@ -474,7 +477,9 @@ var icon = { record: "bi bi-record-circle", record1: "bi bi-images", record2: "bi bi-record-circle", "client.name": "bi bi-globe", - machine: "bi bi-pc-display", port: "bi bi-hash", + machine: "bi bi-pc-display", + host: "bi bi-pc-display", + port: "bi bi-hash", arch: "bi bi-cpu", os: "bi bi-ubuntu", role: "bi bi-person-square", title: "bi bi-textarea-t", diff --git a/frame.js b/frame.js index a6fe20cc..ac231c9d 100644 --- a/frame.js +++ b/frame.js @@ -169,6 +169,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { if (event.isTrusted && cmds && cmds.length > 0 && cmds[0] == ctx.ACTION) { can.onengine.signal(can, "onrecord", can.request({}, {cmds: [sub.ConfSpace(), sub.ConfIndex()].concat(cmds||[])})) } + sub.request(event, sub.Option()) sub.onappend._output0(sub, sub.Conf(), event||{}, cmds||sub.Input([], !silent), cb, silent) return true }, @@ -251,7 +252,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { _action: function(can, list, action, meta, hold, limit) { meta = meta||can.onaction||{}, action = action||can._action, hold || can.onmotion.clear(can, action) function run(event, button) { can.misc.Event(event, can, function(msg) { var _can = can._fields? can.sup: can; can.requestAction(event, button) var cb = meta[button]||meta[chat._ENGINE]; cb? can.core.CallFunc(cb, {event: event, can: can, button: button}): - can.run(event, button == mdb.LIST? []: [ctx.ACTION, button].concat(_can.Input())) + can.run(event, can.base.isIn(button, mdb.LIST, web.REFRESH)? []: [ctx.ACTION, button].concat(_can.Input())) }) } var list = can.page.inputs(can, can.base.getValid(can.base.Obj(list), can.core.Value(can, [chat.ONACTION, mdb.LIST]), meta != can.onaction? can.core.Item(meta): [])||[]) limit = limit||html.ACTION_BUTTON; if (list.length > limit) { @@ -333,7 +334,8 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { if (action !== false) { can.onkeymap._build(sub) can.onmotion.clear(can, can._action), sub.onappend._action(sub, can.Conf(ice.MSG_ACTION)||msg.Option(ice.MSG_ACTION), action||can._action) sub.onappend._status(sub, sub.onexport&&sub.onexport.list||msg.Option(ice.MSG_STATUS), null, msg), can.user.isMobile || sub.onappend.tools(sub, msg) - can.core.Item(can.Action(), function(key) { var value = can.misc.sessionStorage(can, [can.ConfIndex(), ctx.ACTION, key]); value && can.Action(key, value[0]) }) + can.core.Item(can.Action(), function(key) { + var value = can.misc.sessionStorage(can, [can.ConfIndex(), ctx.ACTION, key]); value && can.Action(key, msg.Option(key)||value[0]) }) if (msg.Option("sess.online") == ice.TRUE) { can.ondaemon._online(can) } } can.onappend.style(sub, sub.Conf(ctx.STYLE)), can.onmotion.story.auto(can, can._output) if (can.onimport.size) { diff --git a/index.css b/index.css index 847e69ca..7db732fa 100644 --- a/index.css +++ b/index.css @@ -190,8 +190,14 @@ div.output>div.code>div.form>input[type=button] { min-width:200px; } div.output>div.code>div.form>input[type=button][name=confirm] { background-color:var(--notice-bg-color); color:var(--notice-fg-color); margin:var(--button-margin) 0; } body.en span[lang^=zh] { display:none; } body.zh span[lang^=en] { display:none; } /* project */ -div.project div.action { width:100%; } -div.project div.list { border-left:var(--disable-fg-color) dashed 1px; margin-left:var(--button-margin); clear:both; } +div.project div.action:not(.hide) { width:100%; display:flex; } +div.project div.action div.item input { border-right:var(--box-border); } +div.project div.action div.item input:hover { border-right:var(--box-notice); } +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 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 fieldset { position:static; } div.project div.item.select { border-right:var(--box-notice3); @@ -381,7 +387,7 @@ body:not(.mobile) fieldset:not(.Action):not(.output):not(.cmd)>div.action:not(.h fieldset.panel>legend, fieldset.panel>div.status { display:none; } fieldset.output>legend, fieldset.output>form.option, fieldset.output>div.action:not(.flex), fieldset.output>div.status, fieldset.output>div.item { display:none; } div.action, div.output, div.status, div.project, div.content, div.profile, div.display, table.content, table.content td, div.list, div.code, div.story, div.float, fieldset.float { overflow:auto; } -legend, form.option>div.item, div.action>div.item, div.action>div.tabs, fieldset>div.status>div.item { float:left; display:flex; align-items:center; } +legend, form.option>div.item:not(.hide), div.action>div.item, div.action>div.tabs, fieldset>div.status>div.item { float:left; display:flex; align-items:center; } fieldset.story, fieldset>div.output, fieldset>div.status, div.output>div.project div.item, div.content:not(.item), div.code, div.story[data-type=spark] { clear:both; } fieldset.story { position:sticky; left:0; } fieldset.auto, fieldset.full, fieldset.float { position:fixed; } @@ -658,6 +664,7 @@ div.item.button._space.icons { flex-grow:1; min-width:var(--button-margin); } div.item.button._space.icons:hover { background-color:unset; cursor:unset; } fieldset.inner fieldset.story div.item.button._space.icons { margin-left:0; flex-grow:1; } div.tabs>span { font-style:italic; white-space:pre; } +div.tabs>i:first-child { margin-right:var(--input-margin); margin-bottom:-4px; } div.tabs>span.icon { font-size:var(--icon-font-size); font-style:normal; padding-left:var(--input-padding); visibility:hidden; } div.tabs.select>span.icon { visibility:visible; } div.tabs:hover>span.icon { visibility:visible; } @@ -789,6 +796,7 @@ fieldset.Action>div.output>fieldset.ssh.cloud.profile { box-shadow:none; backgro fieldset.Action>div.output>fieldset.ssh.cloud.profile:hover { box-shadow:none; } fieldset.Action>div.output>fieldset.ssh.cloud.profile>div.output { background-color:transparent; } fieldset.Action>div.output>fieldset.plugin>legend { border-top:var(--box-notice3); border-top-left-radius:0; } +// body.cmd fieldset.Action>div.output>fieldset.plugin>legend { min-width:var(--project-width); justify-content:center; } fieldset.Action>div.output>fieldset.plugin>legend:not(:hover) { background-color:var(--output-bg-color); } fieldset.Action:not(.horizon):not(.grid)>fieldset.plugin>form.option>div.item.text.path>input { width:var(--project-width); } fieldset.web.code.docker.studio>div.output>fieldset>legend { display:none; } @@ -800,6 +808,7 @@ fieldset.web.mall.region>div.output>table.content td:nth-child(4) { text-align:r fieldset.web.mall.region>div.output>table.content td:nth-child(5) { text-align:right; } fieldset.web.mall.region>div.output>fieldset.web.mall.region.float>div.action { display:none; } fieldset.web.dream>div.output>div.item div.content>span { padding:0 var(--input-padding); } +fieldset.xterm>form.option>div.item.text.hash input { width:var(--url-input-width); } fieldset.web.dream>div.output>div.item div.content>span.files { background-color:purple; color:var(--notice-fg-color);} fieldset.web.dream>div.output>div.item div.content>span.add { background-color:var(--notice-bg-color); color:var(--notice-fg-color);} fieldset.web.dream>div.output>div.item div.content>span.del { background-color:var(--danger-bg-color); color:var(--danger-fg-color);} diff --git a/plugin/local/code/vimer.js b/plugin/local/code/vimer.js index 960694f6..0584018f 100644 --- a/plugin/local/code/vimer.js +++ b/plugin/local/code/vimer.js @@ -130,6 +130,9 @@ Volcanos(chat.ONACTION, {list: [ can.db._key_list = can.onkeymap._parse(event, can, mdb.PLUGIN, can.db._key_list, can.ui.content) }, }) +Volcanos(chat.ONEXPORT, { + hash: function(can) { return can.misc.SearchHash(can, can.Option(nfs.PATH), can.Option(nfs.FILE), can.Option(nfs.LINE)) }, +}) Volcanos(chat.ONKEYMAP, { scrollHold: function(can, count, begin) { var scroll = can.ui.content.scrollLeft; can.ui.current.focus(), count != undefined && can.onkeymap.cursorMove(can.ui.current, count, begin == undefined? count: begin), can.ui.content.scrollLeft = scroll }, cursorDown: function(can, target) { var p = can.onkeymap.cursorMove(target); can.onaction.selectLine(can, can.current.next()), can.onkeymap.cursorMove(target, 0, p) }, diff --git a/plugin/state.js b/plugin/state.js index 2bc4751e..783c961a 100644 --- a/plugin/state.js +++ b/plugin/state.js @@ -7,7 +7,10 @@ Volcanos(chat.ONIMPORT, { _history: function(can, msg) { history.length == 1? can.user.close(): history.back() }, _confirm: function(can, msg, arg) { can.user.toastConfirm(can, arg, "", function() { can.runAction(can.request({}, msg), "confirm") }) }, _refresh: function(can, msg, arg) { can.core.Timer(parseInt(arg||"30"), function() { can.Update(can.request({}, {_count: parseInt(msg.Option("_count")||"3")-1})) }) }, - _rewrite: function(can, msg) { var arg = msg._arg; for (var i = 0; i < arg.length; i += 2) { can.Option(arg[i], arg[i+1]), can.Action(arg[i], arg[i+1]) } can.Update() }, + _rewrite: function(can, msg) { var arg = msg._arg; for (var i = 0; i < arg.length; i += 2) { + can.Option(arg[i], arg[i+1]), can.Action(arg[i], arg[i+1]) + can.misc.sessionStorage(can, [can.ConfIndex(), ctx.ACTION, arg[i]], arg[i+1]) + } can.Update() }, _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, sub, msg) { sub = sub||can, can.onmotion.scrollIntoView(can, can.onappend.table(sub, msg)), can.onmotion.scrollIntoView(can, can.onappend.board(sub, msg)), can.onmotion.story.auto(sub) }, @@ -320,9 +323,14 @@ Volcanos(chat.ONEXPORT, {_output: function(can, msg) {}, statusHeight: function(can) { return can.page.ClassList.has(can, can._target, html.OUTPUT) || !can.page.isDisplay(can._status) || (can._target.offsetHeight > 0 && can._status.offsetHeight == 0) || can._status.innerHTML == "" && !can.page.ClassList.has(can, can._target, html.PLUG)? 0: html.STATUS_HEIGHT }, - link: function(can) { var args = can.Option(); args.pod = can.ConfSpace()||can.misc.Search(can, ice.POD), args.cmd = can.ConfIndex() + link: function(can) { + if (can.sub && can.sub.onexport.link) { + return can.sub.onexport.link(can.sub) + } + var args = can.Option(); args.pod = can.ConfSpace()||can.misc.Search(can, ice.POD), args.cmd = can.ConfIndex() can.core.Item(args, function(key, value) { key != ice.POD && !value && delete(args[key]) }) - return can.misc.MergePodCmd(can, args, true) }, + return can.misc.MergePodCmd(can, args, true) + }, args: function(can) { return can.Option() }, close: function(can, msg) {}, }) diff --git a/plugin/table.js b/plugin/table.js index 93e06026..a4f0aa3a 100644 --- a/plugin/table.js +++ b/plugin/table.js @@ -26,14 +26,14 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onimport.layout = can.onimport.layout||function() { var height = can.onlayout.expand(can, target); can.sup.onexport.outputMargin = function() { return height } } can.page.Append(can, target, list), can.onmotion.orderShow(can, target) }, - filter: function(can, target) { + filter: function(can, target, output) { output = output||target return can.onappend.input(can, {icon: icon.SEARCH, type: html.TEXT, name: web.FILTER, placeholder: "search in n items", onkeydown: function() {}, onkeyup: function(event) { if (event.key == code.ENTER) { - can.page.Select(can, target, html.DIV_ITEM+":not(.hide)", function(target) { target.click() }) + can.page.Select(can, output, html.DIV_ITEM+":not(.hide)", function(target) { target.click() }) } else if (event.key == code.ESCAPE) { event.currentTarget.value = "", event.currentTarget.blur() - can.page.Select(can, target, html.DIV_ITEM, function(target) { can.onmotion.toggle(can, target, true) }) - } else { if (can.onkeymap.selectCtrlN(event, can, target, html.DIV_ITEM+":not(.filter):not(.hide)")) { return } - can.page.Select(can, target, html.DIV_ITEM, function(target) { + can.page.Select(can, output, html.DIV_ITEM, function(target) { can.onmotion.toggle(can, target, true) }) + } else { if (can.onkeymap.selectCtrlN(event, can, output, html.DIV_ITEM+":not(.filter):not(.hide)")) { return } + can.page.Select(can, output, html.DIV_ITEM, function(target) { can.onmotion.toggle(can, target, target.innerText.indexOf(event.currentTarget.value) > -1 || target == event.currentTarget.parentNode) }) } @@ -159,7 +159,8 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { }, onclick: function(event) { cb(event, item, event.currentTarget._list && can.onmotion.toggle(can, event.currentTarget._list)) }, oncontextmenu: function(event) { - if (can.base.isFunc(cbs)) { var menu = cbs(event, ui._target); if (menu) { can.user.carteRight(event, can, menu.meta, menu.list, menu) } } + if (can.base.isFunc(cbs)) { var menu = cbs(event, event.currentTarget); if (menu) { return can.user.carteRight(event, can, menu.meta, menu.list, menu) } } + can.user.carteItem(event, can, item) }} }) }], target.nextSibling, target.parentNode) _select && _select.click() @@ -195,7 +196,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { if (!next) { return true } next && next.click() } can.page.Remove(can, target), can.onexport.tabs && can.onexport.tabs(can) } - return {view: [[html.TABS, tabs.type, tabs.role, tabs.status]], title: tabs.title||tabs.text, list: [{text: [tabs.nick||tabs.name, html.SPAN, mdb.NAME]}, {icon: mdb.DELETE, onclick: function(event) { + return {view: [[html.TABS, tabs.type, tabs.role, tabs.status]], title: tabs.title||tabs.text, list: [tabs.icon && {icon: tabs.icon}, {text: [tabs.nick||tabs.name, html.SPAN, mdb.NAME]}, {icon: mdb.DELETE, onclick: function(event) { tabs._target._close(), can.onkeymap.prevent(event) }}], onclick: function(event) { can.onmotion.select(can, action, html.DIV_TABS, tabs._target), can.base.isFunc(cb) && cb(event, tabs)