1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-25 08:48:06 +08:00

opt chat.message

This commit is contained in:
IT 老营长 @云轩领航-创始人 2024-01-25 13:03:11 +08:00
parent 9df7dcd411
commit 1a9e64b92d
7 changed files with 40 additions and 25 deletions

View File

@ -192,7 +192,8 @@ var cli = {
DELAY: "delay",
PLAY: "play", STEP: "step",
QRCODE: "qrcode", COLOR: "color", BLACK: "black", WHITE: "white", BLUE: "blue", RED: "red", GRAY: "gray", CYAN: "cyan", GREEN: "green", PURPLE: "purple", YELLOW: "yellow",
MAGENTA: "magenta", SILVER: "silver", ALICEBLUE: "aliceblue", TRANSPARENT: "transparent",
MAGENTA: "magenta", SILVER: "silver", ALICEBLUE: "aliceblue",
TRANSPARENT: "transparent",
LINUX: "linux", DARWIN: "darwin", WINDOWS: "windows",
DONE: "done", COST: "cost", FROM: "from", PWD: "pwd",
}
@ -260,6 +261,7 @@ var chat = {
ONENGINE: "onengine", ONDAEMON: "ondaemon", ONAPPEND: "onappend", ONLAYOUT: "onlayout", ONMOTION: "onmotion", ONKEYMAP: "onkeymap",
ONIMPORT: "onimport", ONACTION: "onaction", ONDETAIL: "ondetail", ONEXPORT: "onexport",
ONSYNTAX: "onsyntax", ONFIGURE: "onfigure", ONPLUGIN: "onplugin",
ONINPUTS: "oninputs",
ONSIZE: "onsize", ONMAIN: "onmain", ONLOGIN: "onlogin", ONREMOTE: "onremote", ONSEARCH: "onsearch",
ONRESIZE: "onresize", ONKEYUP: "onkeyup", ONKEYDOWN: "onkeydown", ONMOUSEENTER: "onmouseenter", ORIENTATIONCHANGE: "orientationchange",
@ -331,6 +333,7 @@ var html = {value: {
FLEX: "flex", FLOW: "flow",
SCROLLBAR: "scrollbar",
VISIBILITY: "visibility",
TRANSPARENT: "transparent",
VERTICAL: "vertical", HORIZON: "horizon",
NOTICE: "notice", DANGER: "danger",
TOIMAGE: "toimage",

View File

@ -166,10 +166,12 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
}}])
})
while (args.length > 0) { if (args[args.length-1] != "") { break } args.pop() }
if (args.slice) {
can.core.List(args.slice(can.core.List(meta.inputs, function(item) { if (can.base.isIn(item.type, html.TEXTAREA, html.TEXT, html.SELECT)) { return item } }).length), function(item, index) { meta.inputs.push({type: mdb.TEXT, name: "args"+index, value: item}) })
}
function add(item, next) { item = can.base.isString(item)? {type: html.TEXT, name: item}: item, item.type != html.BUTTON && index++
return Volcanos(item.name, {_root: can._root, _follow: can.core.Keys(can._follow, item.name),
_target: can.onappend.input(can, item, args[index]||opts[item.name], option||can._option), _option: option||can._option, _action: can._action, _output: can._output, _status: can._status,
_target: can.onappend.input(can, item, args[index]||args[item.name]||opts[item.name], option||can._option), _option: option||can._option, _action: can._action, _output: can._output, _status: can._status,
CloneField: can.Clone, CloneInput: function() { can.onmotion.focus(can, add(item)._target) }, Input: can.Input, Option: can.Option, Action: can.Action, Status: can.Status,
}, [item.display, chat.PLUGIN_INPUT_JS], function(sub) { sub.Conf(item), sub._fields = can
if (item.type == html.TEXT) { can.page.Append(can, sub._target.parentNode, [{text: [sub._target.value, html.SPAN, mdb.VALUE]}]) }
@ -649,7 +651,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
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) {
target._can? show(target._can, cb): can.onappend._init(can, {type: html.INPUT, name: input, style: meta.name, mode: chat.FLOAT}, [path], function(sub) { sub.Conf(meta)
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)
if (meta.range) { for (var i = meta.range[0]; i < meta.range[1]; i += meta.range[2]||1) { msg.Push(mdb.VALUE, i) } cb(msg); return }
@ -1027,6 +1029,11 @@ Volcanos(chat.ONKEYMAP, {_init: function(can, target) { target = target||documen
default: return
} return can.Status(mdb.INDEX, target._index), can.onkeymap.prevent(event)
}
if (can.page.Select(can, can._output, html.DIV_ITEM, function(tr, index) {
can.onmotion.hidden(can, tr, tr.innerText.indexOf(target.value) > -1)
return tr
}).length > 0) { return }
// , target._index = -1, target._value = target.value
can.page.Select(can, can._output, [html.TBODY, html.TR], function(tr, index) { var has = false
can.page.Select(can, tr, html.TD, function(td) { has = has || td.innerText.indexOf(target.value)>-1 }), can.page.ClassList.set(can, tr, html.HIDDEN, !has)
}), target._index = -1, target._value = target.value

View File

@ -148,6 +148,8 @@ fieldset>div.output { width:100%; }
fieldset>div.status { width:100%; }
fieldset.rich>div.output>table.content { font-family:var(--code-font-family); }
fieldset.input>legend { display:none; }
fieldset.input.key>div.output>div.item:not(.hide) { display:flex; align-items:center; }
fieldset.input.key>div.output>div.item img { height:var(--header-height); width:var(--header-height); }
fieldset.input.key div.action { display:none; }
fieldset.input.key div.output table.content { width:100%; }
fieldset.input.key div.status { background-color:var(--plugin-bg-color); }
@ -203,6 +205,7 @@ body>div.input tr.icon td:last-child { position:relative; }
body>div.input tr.icon td:last-child img:first-child { position:absolute; height:28px; width:28px; left:12px; top:12px; }
body>div.input tr.icon td:last-child input { padding-left:var(--action-height); }
body>div.input tr.icons td:last-child img:first-child { position:absolute; height:28px; width:28px; left:2px; top:2px; }
body>div.input tr.icons td:last-child span:not(.icon) { position:absolute; left:32px; }
body>div.input tr.icons td:last-child input { padding-left:var(--action-height); }
body>div.input td span.icon { margin-left:-20px; visibility:hidden; }
body>div.input td span.icons { margin-left:-20px; visibility:hidden; }

View File

@ -87,11 +87,15 @@ 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)
TimeTrim: function(value) { var prefix = ""
var now = new Date(), year = now.getFullYear()+"-", pre = this.Time(now, "%y-%m-%d ")
if (value.indexOf(pre) == -1) { var list = ["昨天", "前天"]
for (var i = 0; i < list.length; i++) {
var yestoday = this.Time(new Date(now - (i+1)*24*60*60*1000), "%y-%m-%d ")
if (value.indexOf(yestoday) == 0) { prefix = list[i]+" ", pre = yestoday; break }
}
}
return prefix+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"

View File

@ -186,7 +186,7 @@ Volcanos("user", {
if (item.name && item.name != ctx.ACTION) { target.value = item.value||msg.Option(item.name)||can.Option(item.name)||can.Status(item.name)||target.value||"" }
item.mode = chat.SIMPLE, can.onappend.figure(can, can.base.Copy({space: msg.Option(web.SPACE), run: function(event, cmds, cb) { var _msg = can.request(event, {_handle: ice.TRUE, action: msg.Option(html.ACTION)}, msg, can.Option())
can.page.Select(can, ui.table, html.OPTION_ARGS, function(item) { item.name && item.value && _msg.Option(item.name, item.value) })
can.run(event, cmds, cb, true)
;(item.run||can.run)(event, cmds, cb, true)
}, _enter: function(event) { return action.submit(event, can, html.SUBMIT), true }}, item), target)
}, item.onkeydown = function(event) { if (event.key == code.ESCAPE) { event.target.blur() } }
item.placeholder = can.user.trans(can, item.placeholder||item.name, null, html.INPUT)

View File

@ -16,24 +16,18 @@ Volcanos(chat.ONFIGURE, {key: {
can.close(); if (msg.cb && msg.cb[index]) { return msg.cb[index](value) }
var _cb = can.Conf("select"); if (_cb) { return _cb(target.value = value) } can.base.isFunc(cb) && cb(can, value, target.value)
}}
}), can.onappend._status(can, [mdb.TOTAL, mdb.INDEX]), can.Status(mdb.TOTAL, msg.Length()), can.onmotion.toggle(can, can._status, msg.Length() > 5)
}), can.onappend._status(can, [mdb.TOTAL, mdb.INDEX]), can.Status(mdb.TOTAL, msg.Length()), can.Status("index", "-1")
can.onmotion.toggle(can, can._status, msg.Length() > 5), can.onmotion.toggle(can, can._target, can.Status("total") > 0)
can.core.CallFunc(can.oninputs._show, {event: event, can: can, msg: msg, target: target, name: name})
can.page.style(can, can._output, html.MAX_HEIGHT, can.page.height()/2, html.MIN_WIDTH, target.offsetWidth, html.MAX_WIDTH, can.Conf("style.width")||can.page.width()/2)
msg.append.length == 1 && can.page.ClassList.add(can, can._target, chat.SIMPLE), can.onlayout.figure({target: target}, can, can._target, false, 200)
can.onmotion.toggle(can, can._target, can.Status("total") > 0)
can.Status("index", "-1")
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) { 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)
}) },
onfocus: function(event, can, meta, target, cbs) {
return
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) },
onkeydown: function(event, can, meta, cb, target, sub, last) {
if (event.key == code.TAB) { return }
onkeydown: function(event, can, meta, cb, target, sub, last) { if (event.key == code.TAB) { return }
if (event.key == code.ENTER) { return meta._enter && (!can.page.tagis(event.target, html.TEXTAREA) || event.ctrlKey) && meta._enter(event, target.value)? sub && sub.close(): last(event) }
if (!sub) { return } can.onmotion.toggle(can, sub._target, true)
sub.hidden() || can.onkeymap.selectCtrlN(event, can, sub._output, "tr:not(.hidden)>td:first-child", function(td) { return meta.select && (sub.close(), meta.select(target.value = td.innerText)), cb(sub, td.innerText, target.value), td })

View File

@ -106,12 +106,12 @@ Volcanos(chat.ONIMPORT, {
can.page.SelectArgs(can, can._action, "", function(target) { target.value = his[i++]||"" }); break
} can.Update(event) },
})
Volcanos(chat.ONACTION, {list: ["刷新数据", "刷新界面", "切换浮动", "切换全屏", "生成链接",
Volcanos(chat.ONACTION, {list: ["刷新数据", "刷新界面", "切换浮动", "切换全屏", "发送聊天", "生成链接",
function(can) { if (!can.isCmdMode()) { return "打开链接" } }, function(can) { if (can.isCmdMode()) { return "打开首页" } },
function(can) { if (can.ConfSpace() || can.isCmdMode() && can.misc.Search(can, ice.POD)) { return "打开空间" } },
"共享工具",
function(can) { if (can.misc.Search(can, ice.MSG_DEBUG)) { return "查看源码" } },
function(can) { if (can.misc.Search(can, ice.MSG_DEBUG)) { return "查看镜像" } },
"共享工具",
["视图", "参数",
function(can) { if (can._action.innerHTML) { return "操作" } },
function(can) { if (can._status.innerHTML) { return "状态" } },
@ -157,7 +157,11 @@ Volcanos(chat.ONACTION, {list: ["刷新数据", "刷新界面", "切换浮动",
"打开空间": function(event, can) { can.user.open(can.misc.MergePodCmd(can, {pod: can.ConfSpace()||can.misc.Search(can, ice.POD)})) },
"打开链接": function(event, can) { can.user.open(can.onexport.link(can)) },
"发送聊天": function(event, can) {
can.user.input(event, can, [{name: "message", value: "dream"}], function(list) {
can.user.input(event, can, [{name: "message", display: "/require/usr/icebergs/core/chat/message.js", run: function(event, cmds, cb) {
can._root.Header.run(event, [ctx.ACTION, "message"].concat(cmds), function(msg) {
cb(msg)
})
}}], function(list) {
can._root.Header.run(event, [ctx.ACTION, "message", list[0], mdb.TYPE, "plug", web.SPACE, can.ConfSpace(), ctx.INDEX, can.ConfIndex(), ctx.ARGS, JSON.stringify(can.Option())])
})
},