From e574bca6a81c0f519d281e55c78f0f56f6e2d5ad Mon Sep 17 00:00:00 2001 From: shy Date: Wed, 24 Jan 2024 19:15:11 +0800 Subject: [PATCH] add chat.message --- frame.js | 22 ++++++++++++---------- index.css | 7 ++++--- lib/base.js | 6 ++++++ lib/page.js | 2 +- panel/header.js | 1 + 5 files changed, 24 insertions(+), 14 deletions(-) diff --git a/frame.js b/frame.js index 2047047b..ebdf62a7 100644 --- a/frame.js +++ b/frame.js @@ -351,16 +351,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { can.onkeymap.input(event, can), can.onkeymap.selectOutput(event, can) } input.onkeyup = item.onkeyup||function(event) { if (item.name == html.FILTER) { - can.onmotion.delayOnce(can, function() { - var count = can.page.Select(can, can._output, html.TR, function(tr, index) { - if (!can.page.ClassList.set(can, tr, html.HIDE, index > 0 && tr.innerText.indexOf(event.target.value) == -1)) { return tr } - }).length - count += can.page.SelectChild(can, can.ui && can.ui.content? can.ui.content: can._output, html.DIV_ITEM, function(target) { - if (!can.page.ClassList.set(can, target, html.HIDE, target.innerText.indexOf(event.target.value) == -1)) { return target } - }).length - can.user.toast(can, "filter out "+count+" lines") - }, 1000) - + can.onmotion.filter(can, event.target.value) } }, icon.push({icon: mdb.DELETE, onclick: function(event) { _input.value = "", input.onkeyup({target: event.target.previousSibling}) }}) } if (item.range) { input._init = function(target) { can.onappend.figure(can, item, target, function(sub, value, old) { target.value = value, can.core.CallFunc([can.onaction, item.name], [event, can, item.name]) }) } } var _style = can.page.buttonStyle(can, item.name) @@ -855,6 +846,17 @@ Volcanos(chat.ONMOTION, {_init: function(can, target) { can.onmotion.resize(can, can._target, function(height, width) { can.onimport.size(can, height, width, true) }, top, left) }, clear: function(can, target) { return can.page.Modify(can, target||can._output, ""), target }, + filter: function(can, value) { + can.onmotion.delayOnce(can, function() { + var count = can.page.Select(can, can._output, html.TR, function(tr, index) { + if (!can.page.ClassList.set(can, tr, html.HIDE, index > 0 && tr.innerText.indexOf(value) == -1)) { return tr } + }).length + count += can.page.SelectChild(can, can.ui && can.ui.content? can.ui.content: can._output, html.DIV_ITEM, function(target) { + if (!can.page.ClassList.set(can, target, html.HIDE, target.innerText.indexOf(value) == -1)) { return target } + }).length + can.user.toast(can, "filter out "+count+" lines") + }, 500) + }, cache: function(can, next) { var list = can.base.getValid(can.base.Obj(can.core.List(arguments).slice(2)), [can._output]) var data = can._cache_data = can._cache_data||{}, old = list[0]._cache_key var key = next(function(save) { if (old) { data[old] = save } }, function(hash, load) { var bak = data[hash]; if (bak) { load(bak) } return hash }) diff --git a/index.css b/index.css index 69a67867..55d27b59 100644 --- a/index.css +++ b/index.css @@ -88,7 +88,7 @@ legend { font-family:var(--legend-font-family); padding:0 var(--legend-padding); select { padding:0 var(--button-padding); } input:not([type=file]) { padding:0 var(--button-padding); } input:not([type=button]) { padding:0 var(--input-padding); border-radius:0; outline:none; } -input[type=checkbox] { height:22px; width:22px; margin:5px; } +input[type=checkbox] { height:22px; width:22px; margin:var(--input-margin); } table.content.full { width:100%; } body.mobile table.content.detail { word-break:break-all; white-space:unset; } table.content thead { position:sticky; top:2px; } @@ -141,6 +141,7 @@ fieldset>form.option>div.item.button { border-radius:var(--button-radius); } fieldset>div.action div.item { box-shadow:var(--box-shadow); height:var(--action-height); } fieldset>div.action div.item:not(:last-child) { margin-right:var(--button-margin); } fieldset>div.action div.item.button { border-radius:var(--button-radius); } +fieldset>div.action div.item.filter input { padding-left:24px; } fieldset>div.action div.item.select:not(.cmds) { border-radius:var(--button-radius); } fieldset>div.action div.item.select.cmds { border-bottom:var(--notice-bg-color) solid 2px; height:var(--action-height); } fieldset>div.output { width:100%; } @@ -287,7 +288,7 @@ div.item.text.line>input { width:var(--button-width) !important; } 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; left:var(--input-padding); } +div.item.text>i:first-child { position:absolute; left:var(--input-padding); padding:var(--input-padding); } 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; height:var(--action-height); } @@ -475,7 +476,7 @@ span.keyword { color:var(--code-keyword); } span.function { color:var(--code-fun span.item.select { background-color:var(--hover-bg-color); color:var(--hover-fg-color); } span.item:hover { background-color:var(--hover-bg-color); color:var(--hover-fg-color); } span.icon:hover { background-color:var(--hover-bg-color); color:var(--hover-fg-color); } -div.item:hover { background-color:var(--hover-bg-color); color:var(--hover-fg-color); } +div.item:not(.text):hover { background-color:var(--hover-bg-color); color:var(--hover-fg-color); } div.item.select:not(.button) { background-color:var(--hover-bg-color); color:var(--hover-fg-color); } div.item.button.danger input:hover[type=button] { background-color:var(--danger-bg-color); color:var(--danger-fg-color); } div.item.button.notice input:hover[type=button] { background-color:var(--notice-bg-color); color:var(--notice-fg-color); } diff --git a/lib/base.js b/lib/base.js index e2e9be44..e5bf14d1 100644 --- a/lib/base.js +++ b/lib/base.js @@ -87,6 +87,12 @@ Volcanos("base", { if (typeof arg[i] == code.OBJECT && arg[i].length > 0 && arg[i].indexOf(item) > -1) { return true } if (item == arg[i]) { return true } } }, + TimeTrim: function(value) { + var now = new Date() + var year = now.getFullYear()+"-" + var pre = this.Time(now, "%y-%m-%d ") + return this.trimPrefix(value.split(":").slice(0, 2).join(":"), pre, year) + }, Time: function(time, fmt) { var now = this.Date(time) fmt = fmt||"%y-%m-%d %H:%M:%S" fmt = fmt.replace("%y", now.getFullYear()) diff --git a/lib/page.js b/lib/page.js index 94736f58..f131de76 100644 --- a/lib/page.js +++ b/lib/page.js @@ -331,7 +331,7 @@ Volcanos("page", { _list.push({type: html.BUTTON, name: ice.BACK}) break case web.FILTER: - _list.push({type: html.TEXT, name: web.FILTER}) + _list.push({type: html.TEXT, name: web.FILTER, icon: icon.search}) break case mdb.PAGE: _list.push({type: html.TEXT, name: mdb.OFFEND, value: can._msg.Option(mdb.OFFEND)}) diff --git a/panel/header.js b/panel/header.js index f44a155a..13dd377c 100644 --- a/panel/header.js +++ b/panel/header.js @@ -78,6 +78,7 @@ Volcanos(chat.ONACTION, {_init: function(can) {}, var p = can.misc.Search(can, ice.BACK); if (p && location.pathname == web.CHAT_SSO) { return location.reload() } can.user.info.userrole = msg.Option(ice.MSG_USERROLE), can.user.info.repos = msg.Option(nfs.REPOS) can.user.info.nodetype = msg.Option(ice.MSG_NODETYPE) + can.user.info.username = msg.Option(ice.MSG_USERNAME) can.user.info.usernick = can.Conf(aaa.USERNICK), can.user.info.email = msg.Option(aaa.EMAIL), can.user.info.avatar = msg.Option(aaa.AVATAR), can.user.info.background = msg.Option(aaa.BACKGROUND) lang(msg, function() { can.onmotion.clear(can), can.onimport._init(can, can.request(), can._output), can.onengine.signal(can, chat.ONLOGIN) }) }