From d75cfdadd2b9e1de201da6db0b55e1c3321fe72f Mon Sep 17 00:00:00 2001 From: shy Date: Sun, 26 Nov 2023 13:42:59 +0800 Subject: [PATCH] opt desktop --- const.js | 2 ++ favicon.ico | Bin 67646 -> 0 bytes frame.js | 9 ++++++--- index.css | 11 ++++++----- lib/misc.js | 7 ++++--- panel/action.css | 1 + panel/header.js | 2 +- plugin/state.js | 9 +++++---- plugin/table.js | 4 +++- 9 files changed, 28 insertions(+), 17 deletions(-) delete mode 100644 favicon.ico diff --git a/const.js b/const.js index 369041c7..40f990c5 100644 --- a/const.js +++ b/const.js @@ -154,6 +154,7 @@ var nfs = { TXT: "txt", CSV: "csv", JSON: "json", PNG: "png", WEBM: "webm", PWD: "./", SRC: "src/", SRC_TEMPLATE: "src/template/", SRC_DOCUMENT: "src/document/", + SRC_TEMPLATE_WEB_FAVICON: "src/template/web/favicon.ico", USR: "usr/", USR_LOCAL_WORK: "usr/local/work/", USR_VOLCANOS: "usr/volcanos/", USR_GEOAREA: "usr/geoarea/", USR_ICONS: "usr/icons/", USR_INTSHELL: "usr/intshell", USR_LEARNING: "usr/learning", REQUIRE: "/require/", REQUIRE_MODULES: "/require/modules/", @@ -213,6 +214,7 @@ var chat = { "input/key.js", "input/date.js", "story/json.js", + "story/stats.js", "story/spide.js", "story/trend.js", "local/code/xterm.js", diff --git a/favicon.ico b/favicon.ico deleted file mode 100644 index d4935e74a39e81a8a16ccd617ddb29656b2370e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67646 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 Zr0-7-V+`kd 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 diff --git a/frame.js b/frame.js index 31f77653..dd227a38 100644 --- a/frame.js +++ b/frame.js @@ -254,14 +254,16 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { if (can.onimport.size) { // if (can.isFullMode() || can.isCmdMode()) { can.ConfHeight(can.page.height()), can.ConfWidth(can.page.width()) } can.onimport.size(can, can.ConfHeight(), can.ConfWidth(), can.Conf("_auto"), can.Mode()) - can.onexport.output(sub, msg) can.isCmdMode() && can.page.style(can, can._output, html.HEIGHT, sub.ConfHeight(), html.WIDTH, sub.ConfWidth()) + can.onexport.output(sub, msg) } can.base.isFunc(cb) && cb(msg) }, target: output}) }) }, _status: function(can, list, status) { status = status||can._status, can.onmotion.clear(can, status); var keys = {} - can.core.List(can.base.Obj(list, can.core.Value(can, [chat.ONEXPORT, mdb.LIST])), function(item) { item = can.base.isString(item)? {name: item}: item + can.core.List(can.base.Obj(list, can.core.Value(can, [chat.ONEXPORT, mdb.LIST])).concat(can.misc.Search(can, log.DEBUG)==ice.TRUE? [ + {name: html.HEIGHT, value: can.ConfHeight()}, {name: html.WIDTH, value: can.ConfWidth()}, + ]: []), function(item) { item = can.base.isString(item)? {name: item}: item if (item && item.name == web.SPACE && item.value) { item.value = can.page.Format(html.A, can.misc.MergePodCmd(can, {pod: item.value}), item.value) } if (can.base.beginWith(item.value, nfs.PS, ice.HTTP)) { item.value = can.page.Format(html.A, item.value, item.value.split("?")[0]) } if (keys[item.name]) { return can.Status(item.name, item.value) } keys[item.name] = item @@ -600,7 +602,8 @@ Volcanos(chat.ONLAYOUT, {_init: function(can, target) { target = target||can._ro } } if (layout.left+target.offsetWidth > left+width) { layout.left = (right? rect.left: left+width)-target.offsetWidth-1 } - layout.left = can.base.Min(layout.left, 0), layout.top = can.base.Min(layout.top, 32) + layout.left = can.base.Min(layout.left, 0) + // layout.top = can.base.Min(layout.top, 32) can.page.style(can, target, html.MAX_HEIGHT, top+height-layout.top) }); can.onmotion.move(can, target, layout), can.onmotion.slideGrow(can, target) diff --git a/index.css b/index.css index 6e2dbf71..3fd08752 100644 --- a/index.css +++ b/index.css @@ -26,7 +26,7 @@ body { --code-object:silver; --code-datatype:lavender; --code-package:blue; --code-font-family:monospace; --svg-font-family:var(--code-font-family); --body-font-family:sans-serif; - --legend-font-family:var(--input-font-family); --status-font-family:var(--input-font-family); + --legend-font-family:var(--input-font-family); --status-font-family:var(--body-font-family); --input-font-family:cursive; --table-font-family:var(--body-font-family); --body-font-size:16px; --legend-font-size:20px; --icon-font-size:20px; @@ -144,7 +144,7 @@ body>div.carte input[name=filter] { margin:var(--input-margin); width:calc(100% body>div.carte div.item { white-space:pre; padding:var(--button-padding); } body>div.carte div.item span.icon.next { float:right; line-height:22px; height:22px; } body>div.carte.select.float>div.item { text-align:center; } -body>div.input { padding:var(--plugin-padding); } +body>div.input { padding:var(--plugin-padding); z-index:100; } body>div.input>legend { font-style:italic; width:100%; } body>div.input td { padding:var(--table-padding); } body>div.input td:nth-child(2) { padding:var(--table-padding) 0; } @@ -215,7 +215,7 @@ div.story[data-type=spark] { padding:0 var(--table-padding); border-left:var(--n fieldset>div.action>div.tabs { font-style:italic; padding:var(--input-padding) var(--button-padding); margin-left:var(--input-margin); box-shadow:var(--box-shadow); height:var(--action-height); } fieldset>div.action>div.cmds { font-style:italic; padding:var(--input-padding) var(--button-padding); margin-left:var(--input-margin); box-shadow:var(--box-shadow); height:var(--action-height); } fieldset>div.output>div.code { font-size:var(--code-font-size); } -fieldset>div.status { font-family:var(--status-font-family); font-style:italic; line-height:20px; max-height:var(--action-height); } +fieldset>div.status { font-family:var(--status-font-family); font-size:var(--status-font-size); font-style:italic; line-height:20px; max-height:var(--action-height); } fieldset>div.status>div.item { padding:var(--input-padding); height:31px; } fieldset>div.status>div.item>label { font-size:var(--status-font-size); } fieldset>div.status>div.item>span { margin-left:var(--input-padding); } @@ -253,7 +253,7 @@ div.item.text.limit>input { width:var(--button-width); } div.item.text.offend>input { width:var(--button-width); } div.item.text.will>input { border:var(--box-notice); } div.item.text>i:first-child { position:absolute; padding:7px; } -div.item.text>span.icon { font-size:var(--icon-font-size); padding:0 var(--input-padding); position:absolute; right:0; visibility:hidden; } +div.item.text>span.icon { font-size:var(--icon-font-size); padding:var(--input-padding); position:absolute; right:0; visibility:hidden; } div.item.text:hover>span.icon { visibility:visible; } div.item.button { position:relative; display:flex; align-items:center; height:var(--action-height); } div.item.button>span.icon { font-size:var(--icon-font-size); padding:0 var(--input-padding); } @@ -371,7 +371,8 @@ legend, form.option, form.option>div.item, div.action, div.action>div.item, div. 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.full { position:fixed; left:0; top:0; } -fieldset.auto, fieldset.full, fieldset.float, div.float { position:fixed; z-index:10; box-shadow:var(--box-shadow); } +fieldset.auto, fieldset.full, fieldset.float { position:fixed; z-index:10; box-shadow:var(--box-shadow); } +div.float { position:fixed; z-index:100; box-shadow:var(--box-shadow); } fieldset.plug { position:absolute; bottom:0; right:0; } div.output { position:relative; } div.layout.flex>* { float:left; clear:none; } diff --git a/lib/misc.js b/lib/misc.js index 48e9529f..8e5cbf1b 100644 --- a/lib/misc.js +++ b/lib/misc.js @@ -146,14 +146,15 @@ Volcanos("misc", { }) } return socket }, + ResourceFavicon(can) { return can.misc.Resource(can, nfs.SRC_TEMPLATE_WEB_FAVICON) }, Resource(can, path, space) { if (can.base.beginWith(path, web.HTTP, nfs.PS)) { return path } - return can.base.MergeURL(nfs.REQUIRE+path, ice.POD, space||can.Conf(web.SPACE)) + return can.base.MergeURL(nfs.REQUIRE+path+_version, ice.POD, space||can.ConfSpace()) }, ShareLocal(can, path, space) { if (can.base.beginWith(path, web.HTTP, nfs.PS)) { return path } - return can.base.MergeURL(nfs.SHARE_LOCAL+path, ice.POD, space||can.Conf(web.SPACE)) + return can.base.MergeURL(nfs.SHARE_LOCAL+path+_version, ice.POD, space||can.ConfSpace()) }, ShareCache(can, path, space) { if (can.base.beginWith(path, web.HTTP, nfs.PS)) { return path } - return can.base.MergeURL(nfs.SHARE_CACHE+path, ice.POD, space||can.Conf(web.SPACE)) + return can.base.MergeURL(nfs.SHARE_CACHE+path+_version, ice.POD, space||can.ConfSpace()) }, Template(can, path, file) { return can.base.Path(nfs.SRC_TEMPLATE, can.ConfIndex(), path, file) }, MergePath: function(can, file, path) { return file.indexOf(nfs.PS) == 0 || file.indexOf(ice.HTTP) == 0? file: can.base.Path(path, file) }, diff --git a/panel/action.css b/panel/action.css index 157a1e08..680d5c69 100644 --- a/panel/action.css +++ b/panel/action.css @@ -1,4 +1,5 @@ fieldset.Action { min-width:var(--project-width); } +fieldset.Action>div.output { overflow-x:hidden; } fieldset.Action>div.action { width:100%; display:none; background-color:var(--plugin-bg-color); } fieldset.Action>div.action div.item { font-style:italic; font-size:1.1rem; padding:10px 20px; } fieldset.Action.tabs>div.action { display:block; } diff --git a/panel/header.js b/panel/header.js index 050dddba..720d105a 100644 --- a/panel/header.js +++ b/panel/header.js @@ -3,7 +3,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { }, _title: function(can, msg, target) { can.core.List(can.base.getValid(can.Conf(chat.TITLE)||(can.user.isExtension? "contexts": location.host)||msg.result, [location.host]), function(item) { - can.page.Append(can, target, [{view: [[html.ITEM, chat.TITLE]], list: [{img: "/volcanos/favicon.ico"}, {text: item}], title: "返回主页", onclick: function(event) { can.onaction.title(event, can) }}]) + can.page.Append(can, target, [{view: [[html.ITEM, chat.TITLE]], list: [{img: can.misc.ResourceFavicon(can)}, {text: item}], title: "返回主页", onclick: function(event) { can.onaction.title(event, can) }}]) }) }, _state: function(can, msg, target) { can.core.List(can.base.Obj(can.Conf(chat.STATE)||msg.Option(chat.STATE), [aaa.USERNICK, aaa.AVATAR, mdb.TIME]).reverse(), function(item) { diff --git a/plugin/state.js b/plugin/state.js index bb41360d..b74c8345 100644 --- a/plugin/state.js +++ b/plugin/state.js @@ -48,9 +48,10 @@ Volcanos(chat.ONIMPORT, { can.Conf("_auto", auto), can.Mode(mode), can.ConfHeight(height), can.ConfWidth(width), height -= can.onexport.actionHeight(can)+can.onexport.statusHeight(can) auto || auto == undefined? (can.page.style(can, can._output, html.HEIGHT, "", html.WIDTH, "", html.MAX_HEIGHT, height, html.MAX_WIDTH, width), can.page.style(can, can._target, html.HEIGHT, "", html.WIDTH, "")): (can.page.style(can, can._output, html.HEIGHT, height, html.WIDTH, width, html.MAX_HEIGHT, "", html.MAX_WIDTH, ""), can.page.style(can, can._target, html.WIDTH, width)) - var sub = can.sub; if (!sub) { return auto } sub.Mode(mode), sub.ConfHeight(height), sub.ConfWidth(width) - can.onimport._size(can) - mode? sub.onlayout[mode](sub, height, width): sub.onlayout._init(sub, height, width); return auto + if (can.misc.Search(can, log.DEBUG) == ice.TRUE) { can.Status(html.HEIGHT, can.base.Max(height, can._output.offsetHeight), html.WIDTH, width) } + var sub = can.sub; if (!sub) { return auto } sub.Mode(mode), sub.ConfHeight(height), sub.ConfWidth(width), can.onimport._size(can) + mode? sub.onlayout[mode](sub, height, width): sub.onlayout._init(sub, height, width) + return auto }, display_size: function(can, sub) { var border = 1 can.page.style(can, sub._output, html.MAX_HEIGHT, "") @@ -204,7 +205,7 @@ Volcanos(chat.ONEXPORT, { outputHeight: function(can) { var height = can.sub.ConfHeight() - can.onexport.outputMargin(can) if (can.user.isMobile) { return can.ConfHeight() - can.onexport.actionHeight(can) - can.onexport.statusHeight(can) } can.page.SelectChild(can, can._output, html.TABLE, function(target) { height -= target.offsetHeight }) - return can.base.Min(height, can.sub.ConfHeight()/2) + return can.base.Max(can.base.Min(height, can.sub.ConfHeight()/2), can.ConfHeight()-html.ACTION_HEIGHT, 320) }, outputMargin: function(can) { return 0 }, statusHeight: function(can) { return can.page.ClassList.has(can, can._target, html.OUTPUT) || !can.page.isDisplay(can._status) || can._status.innerHTML == "" || (can._target.offsetHeight > 0 && can._status.offsetHeight == 0)? 0: html.STATUS_HEIGHT }, diff --git a/plugin/table.js b/plugin/table.js index 1fd4affc..22d500df 100644 --- a/plugin/table.js +++ b/plugin/table.js @@ -221,7 +221,9 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onmotion.clear( }, }) Volcanos(chat.ONLAYOUT, { - _init: function(can, height, width) { can.core.CallFunc([can.onimport, html.LAYOUT], {can: can, height: height, width: width}) }, + _init: function(can, height, width) { + can.core.CallFunc([can.onimport, html.LAYOUT], {can: can, height: height, width: width}) + }, zone: function(can, height, width) { can.onlayout._init(can, height, width) }, result: function(can, height, width) { can.onlayout._init(can, height, width) }, simple: function(can, height, width) { can.onlayout._init(can, height, width) },