From 9c1a69290dc6554c00187607ad118bb55292a5ae Mon Sep 17 00:00:00 2001 From: shy Date: Sat, 30 Dec 2023 20:18:30 +0800 Subject: [PATCH] opt git --- frame.js | 15 +++++-------- index.css | 11 ++++++---- panel/action.js | 4 +++- plugin/state.js | 33 +++++++++++++++++++++++----- plugin/story/{spide.js => spides.js} | 0 plugin/story/{trend.js => trends.js} | 0 plugin/table.js | 4 +++- 7 files changed, 46 insertions(+), 21 deletions(-) rename plugin/story/{spide.js => spides.js} (100%) rename plugin/story/{trend.js => trends.js} (100%) diff --git a/frame.js b/frame.js index d2c2417f..c11b1535 100644 --- a/frame.js +++ b/frame.js @@ -75,13 +75,9 @@ Volcanos(chat.ONDAEMON, {_init: function(can, name) { if (can.user.isLocalFile) }) }, _list: [""], pwd: function(can, arg) { can._wss_name = can.ondaemon._list[0] = arg[0] }, close: function(can, msg, sub) { can.user.close() }, exit: function(can, msg, sub) { can.user.close() }, - toast: function(can, sub, arg, cb) { - can.core.CallFunc(can.user.toast, [sub].concat(arg)) - }, - grow: function(can, msg, sub, arg) { - if (sub._fields && sub.sup && sub.sup.onimport._grow) { return sub.sup.onimport._grow(sub.sup, msg, arg.join("")) } - if (!sub._fields && sub && sub.onimport._grow) { return sub.onimport._grow(sub, msg, arg.join("")) } - }, + toast: function(can, sub, arg, cb) { can.core.CallFunc(can.user.toast, [sub].concat(arg)) }, + grow: function(can, msg, sub, arg) { var _can = sub._fields && sub.sup? sub.sup: sub; _can.onimport._grow(_can, msg, arg.join("")) }, + rich: function(can, msg, sub, arg) { var _can = sub._fields && sub.sup? sub.sup: sub; _can.onimport._rich(_can, msg, arg) }, refresh: function(can, sub) { can.base.isFunc(sub.Update) && sub.Update() }, action: function(can, msg, sub, arg) { if (arg[0] == "ctrl") { var list = [] @@ -474,7 +470,8 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { }) } return code.scrollBy && code.scrollBy(0, 10000), code }, tools: function(can, msg, cb, target) { can.onimport.tool(can, can.base.Obj(msg.Option(ice.MSG_TOOLKIT))||[], cb, target) }, - style: function(can, style, target) { target = target||can._fields||can._target + style: function(can, style, target) { if (!style) { return } + target = target||can._fields||can._target if (can.base.endWith(style, ".css")) { return can.require([style]) } can.base.isObject(style) && !can.base.isArray(style)? can.page.style(can, target, style): can.page.ClassList.add(can, target, style) }, @@ -730,7 +727,7 @@ Volcanos(chat.ONMOTION, {_init: function(can, target) { }, }, scrollHold: function(can, cb, target) { target = target || can._output; var left = target.scrollLeft; cb(), target.scrollLeft = left }, - scrollIntoView: function(can, target, margin) { if (can._scroll) { return } can._scroll = true, margin = margin||0 + scrollIntoView: function(can, target, margin) { if (!target || can._scroll) { return } can._scroll = true, margin = margin||0 var offset = (target.offsetTop-margin) - target.parentNode.scrollTop, step = offset < 0? -20: 20 if (Math.abs(offset) > 3000) { return target.parentNode.scrollTop = (target.offsetTop-margin), delete(can._scroll) diff --git a/index.css b/index.css index a46513fe..d1007b73 100644 --- a/index.css +++ b/index.css @@ -591,10 +591,13 @@ fieldset.plan>div.output>div.layout { height:100%; } fieldset.draw div.output svg { margin-bottom:-5px; } fieldset.draw>div.output>div.layout>div.layout>div.profile table { width:100%; } fieldset.draw>form.option>div.item.pid>input { width:var(--button-width) !important; } -fieldset.draw.trend div.output { overflow:hidden; } -fieldset.draw.trend div.output svg { background-color:#1b5b738c; } -fieldset.draw.spide div.output svg text { cursor:pointer; } -fieldset.draw.spide div.output svg path { stroke-width:1; } +fieldset.draw.trends div.output { overflow:hidden; } +fieldset.draw.trends div.output svg { background-color:#1b5b738c; } +fieldset.form>div.output { text-align:center; } +fieldset.form>div.output div.info { font-size:20px; padding:80px 20px; overflow:auto; } +fieldset.form>div.output input[type=button] { font-size:24px; border:var(--notice-bg-color) solid 1px; width:240px; height:48px; } +fieldset.draw.spides div.output svg text { cursor:pointer; } +fieldset.draw.spides div.output svg path { stroke-width:1; } fieldset.draw>div.output>div.layout>div.layout>div.profile { width:var(--project-width); flex:0 0 var(--project-width); } fieldset.word>div.output>fieldset.story:not(.full) { margin:var(--title-margin) 0; } fieldset.word>div.output fieldset.story:not(.float):not(.full)>form.option>div.icon.delete { display:none; } diff --git a/panel/action.js b/panel/action.js index 1f0024f3..c88dc0fa 100644 --- a/panel/action.js +++ b/panel/action.js @@ -217,7 +217,9 @@ Volcanos(chat.ONKEYMAP, { toggleTheme: function(can, theme) { can.setHeader(chat.THEME, can.getHeaderTheme() == theme? ice.AUTO: theme) }, toggleLayout: function(can, layout) { can.onaction.layout(can, can.onexport.layout(can) == layout? ice.AUTO: layout) }, }) -Volcanos(chat.ONPLUGIN, {_plugin: shy("默认插件", [mdb.NAME, ice.LIST, ice.BACK]), +Volcanos(chat.ONPLUGIN, { + _plugin: shy("默认插件", [mdb.NAME, ice.LIST, ice.BACK]), + _filter: shy("默认插件", [web.FILTER, ice.LIST, ice.BACK]), layout: shy("界面布局", {_init: function(can) { can.Option(chat.LAYOUT, can.getAction(chat.LAYOUT)) }}, ["layout:select=auto,tabs,tabview,horizon,vertical,grid,free,flow,page", ctx.RUN], function(can, msg, arg) { can.onaction.layout(can, arg[0]) }), diff --git a/plugin/state.js b/plugin/state.js index b696f90b..20a8acaf 100644 --- a/plugin/state.js +++ b/plugin/state.js @@ -8,7 +8,11 @@ Volcanos(chat.ONIMPORT, { _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() }, _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) { can.onappend.table(sub, msg), can.onappend.board(sub, msg), can.onmotion.story.auto(sub) }, + _inner: function(can, sub, msg) { + can.onmotion.scrollIntoView(can, can.onappend.table(sub, msg)) + can.onmotion.scrollIntoView(can, can.onappend.board(sub, msg)) + can.onmotion.story.auto(sub) + }, _field: function(can, msg, cb) { var height = can.base.Max(html.STORY_HEIGHT, can.ConfHeight()), width = can.ConfWidth() msg.Table(function(item) { can.onappend._plugin(can, item, {_space: can.ConfSpace(), index: item.index, args: can.base.Obj(item.args||item.arg, []), height: height, width: width}, function(sub) { if (can.base.isIn(sub.ConfIndex(), web.CODE_VIMER, web.CHAT_MACOS_DESKTOP, web.WIKI_PORTAL)) { height = can.base.Max(can.onexport.outputHeight(can), can.ConfHeight()) } @@ -21,10 +25,27 @@ Volcanos(chat.ONIMPORT, { _float: function(can, msg) { can.onimport._field(can, msg, function(sub) { can.onmotion.float(sub) }) }, _hold: function(can, msg, arg) { can.user.toast(can, arg||ice.SUCCESS) }, _back: function(can) { can.onimport.back({}, can) }, - _rich: function(can, msg) { if (can.page.Select(can, can._output, [html.TABLE_CONTENT, html.TBODY], function(table) { - var head = can.page.Select(can, can._output, [html.TABLE_CONTENT, html.TH], function(th) { return th.innerText }) - return can.page.Append(can, table, msg.Table(function(value) { return {row: can.core.List(head, function(key) { return value[key] })} })) - }).length == 0) { can.onappend.table(can, msg) } }, + _rich: function(can, msg) { var sub = can.sub + function _rich() { if (sub._rich_list.length == 0) { return } if (sub._rich_running) { return } sub._rich_running = true + var msg = sub._rich_list.shift(), list = msg.detail.slice(1) + if (!sub._rich._table) { + for (var i = 1; i < msg.detail.length; i += 2) { msg.Push(msg.detail[i], msg.detail[i+1]) } + sub._rich._table = can.onappend.table(sub._rich, msg) + } else { var list = [] + for (var i = 1; i < msg.detail.length; i += 2) { list.push(msg.detail[i+1]) } + can.page.Append(can, sub._rich._table, [{td: list}]), sub._rich._output.scrollTop += 100000 + } can.core.Timer(msg.Option(cli.DELAY)||0, function() { sub._rich_running = false, _rich() }) + } + if (sub._rich) { + (sub._rich_list = sub._rich_list||[]).push(msg); return _rich() + } else { + (sub._rich_list = sub._rich_list||[]).push(msg); if (sub._rich_list.length > 1) { return } + } + var height = can.onexport.outputHeight(can) + can.onappend.plugin(can, {index: "can._filter", title: "table.js", height: height}, function(sub) { + sub.onexport.output = function() { can.sub._rich = sub.sub, _rich(), can.onmotion.scrollIntoView(can, sub._target) } + }); return + }, _grow: function(can, msg, arg) { var sub = can.sub; if (sub && sub.onimport && sub.onimport.grow) { return sub.onimport.grow(sub, msg, msg.detail[1], msg.detail[2]) } if (msg.Option(ctx.DISPLAY)) { @@ -41,7 +62,7 @@ Volcanos(chat.ONIMPORT, { (can.sub._grow_list = can.sub._grow_list||[]).push(msg); if (can.sub._grow_list.length > 1) { return } } var height = can.onexport.outputHeight(can) - can.onappend.plugin(can, {index: "can._plugin", title: msg.Option(ctx.DISPLAY).split(nfs.PS).pop(), display: msg.Option(ctx.DISPLAY), height: height}, function(sub) { + can.onappend.plugin(can, {index: "can._filter", title: msg.Option(ctx.DISPLAY).split(nfs.PS).pop(), display: msg.Option(ctx.DISPLAY), height: height}, function(sub) { sub.onexport.output = function() { can.onmotion.scrollIntoView(can, sub._target), can.sub._grow = sub.sub, _grow() } }); return } diff --git a/plugin/story/spide.js b/plugin/story/spides.js similarity index 100% rename from plugin/story/spide.js rename to plugin/story/spides.js diff --git a/plugin/story/trend.js b/plugin/story/trends.js similarity index 100% rename from plugin/story/trend.js rename to plugin/story/trends.js diff --git a/plugin/table.js b/plugin/table.js index 595a305b..6d8a3010 100644 --- a/plugin/table.js +++ b/plugin/table.js @@ -1,4 +1,6 @@ -Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onmotion.clear(can, target) +Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { + can.onappend.style(can, can.Conf("style")) + can.onmotion.clear(can, target) if (can.Mode() == html.ZONE) { return can.onimport._vimer_zone(can, msg, target) } var cbs = can.onimport[can.Conf(ctx.STYLE)||msg.Option(ctx.STYLE)]; if (can.base.isFunc(cbs)) { can.onappend.style(can, can._args[ctx.STYLE], target), can.core.CallFunc(cbs, {can: can, msg: msg, target: target})