From 7e4aaa6ffe40d8e476832489686b8243274b5141 Mon Sep 17 00:00:00 2001 From: shy Date: Sun, 3 Mar 2024 14:26:46 +0800 Subject: [PATCH] add some --- frame.js | 7 ++++--- index.css | 21 ++++++++++++--------- plugin/input/key.js | 3 ++- plugin/local/code/inner.css | 8 +++++++- plugin/local/code/inner.js | 24 ++++++++++++++++++++---- plugin/local/code/vimer.js | 12 +++++++----- plugin/table.js | 5 +++-- 7 files changed, 55 insertions(+), 25 deletions(-) diff --git a/frame.js b/frame.js index fc06d164..f4cf7716 100644 --- a/frame.js +++ b/frame.js @@ -659,11 +659,12 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { append(can.page.Append(can, target, [html.LAYOUT])._target, type==FLOW? FLEX: FLOW, item) } else if (can.base.isObject(item)) { if (item.index) { item._index = count++, ui.size[item._index] = item.height||item.width - can.base.isIn(item._command, web.PORTAL, web.DESKTOP, aaa.OFFER, aaa.APPLY) && can.onmotion.hidden(can, target) + can.base.isIn(item._command, web.PORTAL, web.DESKTOP, aaa.OFFER, aaa.APPLY, code.VIMER) && can.onmotion.hidden(can, target) + // can.onmotion.hidden(can, target), can.onmotion.delay(can, function() { can.onmotion.toggle(can, target, true) }, 300) can.onappend.plugin(can, item, function(sub) { can._plugins = (can._plugins||[]).concat([sub]) item.layout = function(height, width) { sub.onimport.size(sub, height, width) } can.onmotion.select(can, sub._target.parentNode, html.FIELDSET, sub._target) - sub.onexport._output = function() { can.onmotion.toggle(can, target, true) } + sub.onexport._output = function() { can.onmotion.delay(can, function() { can.onmotion.toggle(can, target, true) }) } }, target, ui[item._index] = can.onappend.field(can, item.type, {index: item.index, name: item.index.split(nfs.PT).pop(), help: item.help}, target)._target) } else { can.page.Append(can, target, [item]) } } @@ -758,7 +759,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { can.onlayout.figure(event, can, sub._target), can.onmotion.toggle(can, sub._target, true) sub.Status(html.HEIGHT, sub._output.offsetHeight), sub.Status(html.WIDTH, sub._output.offsetWidth) } - can.core.CallFunc(on, {event: event, can: can, meta: meta, cb: _cb, target: target, sub: target._can, last: last, cbs: function(cb) { + can.core.CallFunc(on, {event: event, can: can, meta: meta, cb: _cb, target: target, sub: target._can, mod: can.onfigure[input],last: last, cbs: function(cb) { target._can? show(target._can, cb): can.onappend._init(can, {type: html.INPUT, name: input, style: meta.name, mode: chat.FLOAT}, [path, meta.display], function(sub) { sub.Conf(meta) can.page.Append(can, sub._target, [{text: [can.page.unicode.remove, "", "close"], onclick: function() { sub.close() }}]) sub.run = function(event, cmds, cb) { var msg = sub.request(event) diff --git a/index.css b/index.css index c7e5a75f..73cbc748 100644 --- a/index.css +++ b/index.css @@ -179,7 +179,7 @@ div.project div.item.filter { padding:0; width:100%; } div.project div.item.filter>input { padding:0 25px; width:100% !important; } div.project div.item.search { padding:0; width:100%; } div.project div.item.search>input { padding:0 25px; width:100%; } -div.project div.expand { margin-right:var(--input-margin); float:left; transition:all .5s; } +div.project div.expand { margin-right:var(--input-margin); width:5px; float:left; transition:all .5s; } div.project div.expand.open { translate:1px 2px; rotate:90deg; transition:all .3s; } div.project div.item>div.name { padding-left:var(--button-padding); } div.project div.zone>div.item { text-align:center; padding:var(--input-padding); display:flex; align-items:center; } @@ -203,17 +203,20 @@ div.content>div.toggle.display { left:20%; bottom:-52px; rotate:90deg; border-to div.project:not(.toggle) { width:var(--project-width); flex:0 0 var(--project-width); } div.profile:not(.toggle) { width:50%; flex:0 0 50%; } /* fieldset */ -fieldset>div.action>div.online { - margin-left:var(--button-margin) !important; display:block; -} -fieldset>div.action>div.item.online.state { - box-shadow:none; - margin-right:var(--button-margin) !important; display:block; overflow:hidden; position:relative; -} +fieldset>div.action>div.online { margin-left:var(--button-margin) !important; display:block; } +fieldset>div.action>div.online.state { box-shadow:none; margin-right:var(--button-margin) !important; display:block; overflow:hidden; position:relative; } fieldset>div.action>div.online span { background-color:var(--hover-bg-color); color:var(--hover-fg-color); font-size:var(--status-font-size); position:absolute; bottom:0; } fieldset>div.action>div.online img { height:var(--action-height); transition:margin-right 1s; float:right; } fieldset>div.action>div.online img:hover { background-color:var(--hover-bg-color); } fieldset>div.action>div.online:not(:hover) img:not(:first-child) { margin-right:-20px; } + +fieldset>div.action>div.online { margin-left:var(--button-margin) !important; display:block; } +fieldset>div.action>div.online.state { box-shadow:none; margin-right:var(--button-margin) !important; display:block; overflow:hidden; position:relative; } +fieldset>div.action>div.online span { background-color:var(--hover-bg-color); color:var(--hover-fg-color); font-size:var(--status-font-size); position:absolute; bottom:0; } +fieldset>div.action>div.online img { height:var(--action-height); transition:margin-right 1s; float:right; } +fieldset>div.action>div.online img:hover { background-color:var(--hover-bg-color); } +fieldset>div.action>div.online:not(:hover) img:not(:first-child) { margin-right:-20px; } + body.mobile fieldset>div.action>div.online img:not(:first-child) { margin-right:-20px; } body.width6 fieldset>div.action>div.online:not(:hover) img:not(:first-child) { margin-right:var(--input-margin); } fieldset>div.action>div.online:hover img:not(:first-child) { margin-right:var(--input-margin); } @@ -858,7 +861,7 @@ body.mobile table.content.detail { word-break:break-all; white-space:unset; } body.windows fieldset.inner>div.output { overflow:hidden; } body.windows fieldset.inner>div.output>div.layout>div.layout>div.profile { overflow:hidden; } body.white fieldset.inner.cmd>div.output>div.layout>div.tabs div:not(.select):not(:hover) { background-color:transparent; } -body.zh fieldset.inner>div.output>div.project>div.zone>div.item { letter-spacing:10px; border-top:var(--box-border); } +body.zh fieldset.inner>div.output>div.project>div.zone>div.item { letter-spacing:10px; border-top:var(--box-border); box-shadow:var(--box-shadow); } body:not(.debug) fieldset.plugin.can._notfound { display:none; } fieldset.story.web.chat.wx.agent { position:fixed; left:0; bottom:0; } /* fieldset.story>form.option>div.item.text.path>input { width:var(--input-width); } */ diff --git a/plugin/input/key.js b/plugin/input/key.js index 1cd9254e..7b21513f 100644 --- a/plugin/input/key.js +++ b/plugin/input/key.js @@ -23,7 +23,8 @@ Volcanos(chat.ONFIGURE, {key: { msg.append.length == 1 && can.page.ClassList.add(can, can._target, chat.SIMPLE) can.onlayout.figure({target: target}, can, can._target, false, 200) }, - onclick: function(event, can, meta, target, cbs) { target.value == "" && cbs(function(sub, cb) { if (sub.Status(mdb.TOTAL) > 0) { return } + onfocus: function(event, can, meta, target, cbs, mod) { meta._force && mod.onclick(event, can, meta, target, cbs) }, + onclick: function(event, can, meta, target, cbs) { (target.value == "" || meta._force) && cbs(function(sub, cb) { if (sub.Status(mdb.TOTAL) > 0) { return } meta.msg && meta.msg.Length() > 0? sub._show(sub, meta.msg, cb, target, meta.name): sub._load(event, sub, cb, target, meta.name, target.value) }) }, onblur: function(event, can, sub, cb) { sub && can.onmotion.delay(can, sub.close, 300) }, diff --git a/plugin/local/code/inner.css b/plugin/local/code/inner.css index 20d46143..c9f46e79 100644 --- a/plugin/local/code/inner.css +++ b/plugin/local/code/inner.css @@ -45,6 +45,11 @@ fieldset.inner.cmd>div.output>div.layout>div.tabs>div.tabs>div.tabs { padding:va fieldset.inner.cmd>div.output>div.layout>div.tabs>div.head>div { white-space:pre; padding:10px; } fieldset.inner.cmd>div.output>div.layout>div.tabs>div.head>div.avatar { padding:0; } fieldset.inner.cmd>div.output>div.layout>div.tabs>div.head>div.avatar>img { height:var(--code-tabs-height); clip-path:circle(40%); } +fieldset.inner.cmd>div.output>div.layout>div.tabs>div.head>div.online { margin-left:var(--button-margin) !important; display:block; float:right; position:relative; } +fieldset.inner.cmd>div.output>div.layout>div.tabs>div.head>div.online span { background-color:var(--hover-bg-color); color:var(--hover-fg-color); font-size:var(--status-font-size); position:absolute; bottom:12px; } +fieldset.inner.cmd>div.output>div.layout>div.tabs>div.head>div.online img { height:var(--action-height); transition:margin-right 1s; float:right; } +fieldset.inner.cmd>div.output>div.layout>div.tabs>div.head>div.online img:hover { background-color:var(--hover-bg-color); } +fieldset.inner.cmd>div.output>div.layout>div.tabs>div.head>div.online:not(:hover) img:not(:first-child) { margin-right:-20px; } fieldset.inner.cmd>div.output>div.layout>div.path:not(.hide) { display:flex; } fieldset.inner>div.output>div.layout>div.path:not(.hide) { font-style:italic; box-shadow:var(--box-shadow); cursor:pointer; justify-content:flex-start; } fieldset.inner>div.output>div.layout>div.path>a { padding:var(--input-padding) var(--button-padding); } @@ -64,7 +69,8 @@ fieldset.inner>div.output>div.layout>div.path span.view { font-size:22px; paddin fieldset.inner>div.output>div.layout>fieldset.plug.output { white-space:pre; } /* fieldset.inner.cmd>div.output>div.layout>div.plug { height:var(--action-height); position:fixed; right:0; bottom:0; overflow:auto; } */ fieldset.inner.cmd>div.output>div.layout>div.plug { height:var(--action-height); overflow:auto; } -fieldset.inner.cmd>div.output>div.layout>div.plug>legend { font-size:var(--legend-font-size); font-style:italic; float:right; padding:0 var(--input-padding); } + +fieldset.inner.cmd>div.output>div.layout>div.plug>legend { font-size:var(--legend-font-size); font-style:italic; padding:0 var(--input-padding); margin-right:0; float:right; } fieldset.inner.cmd>div.output>div.layout>div.plug>legend:hover { color:unset; } fieldset.inner.cmd>div.output>div.layout>div.plug>legend>span.remove { padding:0 var(--input-padding); height:30px; } fieldset.inner.cmd>div.output>div.layout>div.plug>legend>span.remove:hover { background-color:var(--hover-bg-color); } diff --git a/plugin/local/code/inner.js b/plugin/local/code/inner.js index 10ecf50c..9136c15f 100644 --- a/plugin/local/code/inner.js +++ b/plugin/local/code/inner.js @@ -53,7 +53,11 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { var paths = can.core.Sp link.cmd == web.CODE_VIMER? can.onimport.tabview(can, link.path, link.file, link.line): can.onimport.tabview(can, link.path, link.cmd, ctx.INDEX) } }, can.base.isFunc(cb) && cb(msg) }, - _tabs: function(can) { if (!can.isCmdMode()) { return can.ui._tabs = can._action } + _tabs: function(can) { + if (!can.isCmdMode()) { + can.onimport._online(can) + return can.ui._tabs = can._action + } var ui = can.page.Append(can, can.ui.tabs, ["icon", "tabs", "head"]); can.ui._tabs = ui.tabs can.page.Append(can, ui.icon, can.core.List([ {name: can.page.unicode.menu, onclick: function() { can.user.carte(event, can, can.onaction, can.onaction.list) }}, @@ -62,6 +66,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { var paths = can.core.Sp can.onappend.style(can, html.FLEX, ui.head) can.onappend.style(can, html.FLEX, ui.tabs) can.onappend.style(can, html.FLEX, ui.icon) + can.ui.online = can.page.Append(can, ui.head, ["online"])._target, can.onimport._online(can) can.page.Append(can, ui.head, can.user.header(can).reverse()) }, __tabPath: function(can, cache) { var target = can.ui.path; can.onappend.style(can, html.FLEX, can.ui.path) @@ -290,8 +295,17 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { var paths = can.core.Sp can.page.style(can, can.ui.tabs.parentNode, html.WIDTH, can.ui.path.offsetWidth) can.page.style(can, can.ui.display, html.WIDTH, can.ui.path.offsetWidth) can.page.style(can, can.ui.display.parentNode, html.WIDTH, can.ui.path.offsetWidth) - can.ui.zone.source._layout(), can.ui.zone[can.Option(nfs.PATH)] && can.ui.zone[can.Option(nfs.PATH)]._layout() + // can.ui.zone.source._layout(), can.ui.zone[can.Option(nfs.PATH)] && can.ui.zone[can.Option(nfs.PATH)]._layout() } + can.page.SelectChild(can, can.ui.project, html.DIV_ZONE, function(target, index, list) { + can.page.SelectChild(can, target, html.DIV_ITEM, function(target) { + var height = can.ui.project.offsetHeight - list.length*target.offsetHeight + if (can.page.tagis(target.nextSibling, html.DIV_ACTION)) { height -= target.nextSibling.offsetHeight } + can.page.SelectChild(can, target.parentNode, html.DIV_LIST, function(target) { + can.page.style(can, target, html.MAX_HEIGHT, height) + }) + }) + }) try { can.isCmdMode() && can._msg._tab.scrollIntoView() } catch (e) {} }, exts: function(can, url, cb) { var sub = can.db.toolkit[url.split(web.QS)[0]]; if (sub) { return can.base.isFunc(cb)? cb(sub): sub.select() } @@ -307,7 +321,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { var paths = can.core.Sp grow: function(can, msg, arg) { can.onimport.exts(can, "inner/output.js", function(sub) { sub.Conf(ctx.INDEX, can.ConfIndex()) sub.select(true), can.onmotion.delay(can, function() { can.page.Append(can, sub._output, [{text: arg}]), sub._output.scrollTop = sub._output.scrollHeight - can.misc.sessionStorage(can, [can.ConfIndex(), "output"], sub._output.innerHTML) + can.misc.sessionStorage(can, [can.ConfIndex(), html.OUTPUT], sub._output.innerHTML) }) }) }, }, [""]) @@ -322,11 +336,13 @@ Volcanos(chat.ONFIGURE, { }, module: function(can, target, zone) { zone._delay_init = function() { can.runAction({}, mdb.INPUTS, [ctx.INDEX], function(msg) { can.onimport.tree(can, msg.Table(), ctx.INDEX, nfs.PT, function(event, item) { can.onimport.tabview(can, "", item.index, ctx.INDEX) }, target), zone._total(msg.Length()) + can.onmotion.orderShow(can, target) }) }, zone.toggle(false) }, plugin: function(can, target, zone) { zone._delay_init = function() { var total = 0 can.onimport.tree(can, can.core.ItemKeys(can.onengine.plugin.meta, function(key) { if (key[0] != "_") { return total++, {index: key} } }), ctx.INDEX, nfs.PT, function(event, item) { can.onimport.tabview(can, "", can.core.Keys(ice.CAN, item.index), ctx.INDEX) }, target), zone._total(total) + can.onmotion.orderShow(can, target) }, zone.toggle(false) }, }) Volcanos(chat.ONLAYOUT, { @@ -555,7 +571,7 @@ Volcanos(chat.ONACTION, { open: function(event, can, button) { var left = can.ui.project.offsetWidth+(can._output.offsetWidth)/4-34, width = (can._output.offsetWidth-can.ui.project.offsetWidth)/2 if (can.user.isMobile) { left = 0, width = can.page.width()-40 } - var input = can.user.input(can.request(event, {type: button}), can, [{name: nfs.FILE, style: {width: width}, select: function(item) { input.submit(event, can, web.SUBMIT) }, run: function(event, cmds, cb) { + var input = can.user.input(can.request(event, {type: button}), can, [{name: nfs.FILE, style: {width: width}, _force: true, select: function(item) { input.submit(event, can, web.SUBMIT) }, run: function(event, cmds, cb) { can.run(can.request(event, {paths: can.db.paths.join(mdb.FS)}), cmds, function(msg) { function push(type, name) { _msg.Push(nfs.PATH, can.core.List(arguments).join(nfs.DF)) } if (cmds[0] == ctx.ACTION && cmds[1] == mdb.INPUTS) { var _msg = can.onengine.signal(can, "tabview.open.inputs"), func = can.onexport.func(can) can.core.Item(can.db.tabview, function(key) { var ls = can.core.Split(key, nfs.DF); push(ls[0]+ls[1]) }), _msg.Copy(msg) diff --git a/plugin/local/code/vimer.js b/plugin/local/code/vimer.js index e0d455fd..0091bab3 100644 --- a/plugin/local/code/vimer.js +++ b/plugin/local/code/vimer.js @@ -2,7 +2,6 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { if (can.user.mod.isPod) can.require(["/plugin/local/code/inner.js"], function(can) { can.onimport._last_init(can, msg, function() { can.onengine.listen(can, "tabview.line.select", function(msg) { can.onaction._selectLine(can) }) can.db.undo = [], can.db.redo = [], can.onimport._input(can), cb && cb(msg) - can.onimport._online(can) }) }) }, _input: function(can) { var ui = can.page.Append(can, can.ui.content.parentNode, [ @@ -42,18 +41,21 @@ Volcanos(chat.ONFIGURE, { 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, nfs.PATH, nfs.PS, function(event, item) { can.onimport.tabview(can, path, 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) { - show(target, zone, path), zone._toggle = function() { can.ui.zone.source && can.ui.zone.source._layout(), zone._layout() } - }) }), target) + show(target, zone, path), zone._toggle = function() { + // can.ui.zone.source && can.ui.zone.source._layout() + // zone._layout() + } + }) }), target), can.onmotion.orderShow(can, target, html.DIV_ZONE) }, space: function(can, target, zone) { can.onimport._zone(can, zone, web.DREAM, function(sub, msg) { sub.onimport._open = function(_, msg, arg) { var link = can.misc.ParseURL(can, arg) if (link.pod) { can.onimport.tabview(can, "", link.pod, web.SPACE), sub.Update(); return } can.onimport.tabview(can, "", arg, web.SPACE) } - sub.onexport.record = function(sub, value, key) { - can.onimport.tabview(can, "", value, web.SPACE) } + sub.onexport.record = function(sub, value, key) { can.onimport.tabview(can, "", value, web.SPACE) } can.page.Select(can, sub._output, html.DIV_ITEM, function(target, index) { can.onappend.style(can, msg.status[index], target) }) }), zone.toggle(false) }, }) diff --git a/plugin/table.js b/plugin/table.js index 6359ef94..1f98d96d 100644 --- a/plugin/table.js +++ b/plugin/table.js @@ -31,7 +31,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.sup.onexport.record(can, value.name, mdb.NAME, value, event) }, function() { return shy(action, function(event, button, meta, carte) { can.misc.Event(event, can, function(msg) { carte.close() can.sup.onexport.action(can, button, value) || can.run(event, [ctx.ACTION, button], function(msg) { can.sup.onimport._process(can.sup, msg) || can.Update() }) - }, value) }) }) + }, value) }) }), can.onmotion.orderShow(can, target) }) }, _zone: function(can, zone, index, cb, field) { zone._delay_init = function() { can.onimport.plug(can, can.base.isObject(index)? index: {index: index, style: html.OUTPUT, mode: mdb.ZONE, field: field}, function(sub) { sub.run = function(event, cmds, cb) { can.runActionCommand(can.request(event, {mode: mdb.ZONE}), index.index||index, cmds, cb) } @@ -51,6 +51,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { zone: function(can, list, target) { return can.page.Append(can, target, can.core.List(list, function(zone) { can.base.isString(zone) && (zone = {name: zone}); if (!zone) { return } zone._layout = function() { var height = target.offsetHeight, count = 0 + // debugger can.page.SelectChild(can, target, "", function(target) { can.page.SelectChild(can, target, html.DIV_ITEM, function(target) { height -= target.offsetHeight }) can.page.SelectChild(can, target, html.DIV_ACTION, function(target) { height -= target.offsetHeight }) @@ -241,7 +242,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { return index < 5 && {img: can.misc.Resource(can, value.username == can.user.info.username? value.icons: value.avatar||"usr/icons/contexts.png"), title: [[value.usernick, value.username].join(lex.SP), [value.agent, value.system, value.ip].join(lex.SP)].join(lex.NL)} })) - can.page.Append(can, can.ui.online, [{text: msg.Length()+""}]) + msg.Length() > 0 && can.page.Append(can, can.ui.online, [{text: msg.Length()+""}]) }), can.onimport._online(can, 30000) }, delay) }, })