1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-25 08:48:06 +08:00
This commit is contained in:
IT 老营长 @云轩领航-创始人 2024-05-14 19:13:28 +08:00
parent ac01242ec1
commit 0f1566a0a8
13 changed files with 84 additions and 58 deletions

View File

@ -94,6 +94,7 @@ var web = {
WORKER: "worker", SERVER: "server", ORIGIN: "origin", VENDOR: "vendor",
GATEWAY: "gateway", ONLINE: "online", OFFLINE: "offline",
SHOW: "show",
FULL: "full", OPEN: "open", LINK: "link", HTTP: "http", DOMAIN: "domain", URL: "url",
DRAW: "draw", PLAY: "play", CLEAR: "clear", RESIZE: "resize", FILTER: "filter",
CANCEL: "cancel", SUBMIT: "submit", CONFIRM: "confirm", REFRESH: "refresh",

View File

@ -161,18 +161,12 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
return can.page.SelectArgs(can, action, key, value)[0]
},
Option: function(key, value) { value && (value = can.user.trans(sub, value, null, html.INPUT)); return can.page.SelectArgs(can, option, key, value)[0] },
Update: function(event, cmds, cb, silent) { event = event||{}
if (event.isTrusted) {
can.onengine.signal(can, "onevent", can.request(event, {query: can.page.getquery(can, event.target)}))
}
event.metaKey && sub.request(event, {metaKey: ice.TRUE})
sub.request(event)._caller()
var msg = sub.request(event), list = can.core.Value(sub, "sub.db._checkbox")
can.core.Item(list, function(key, value) { msg.Option(key, value) })
Update: function(event, cmds, cb, silent) { event = event||{}, sub.request(event)._caller(), event.metaKey && sub.request(event, {metaKey: ice.TRUE})
var msg = sub.request(event), list = can.core.Value(sub, "sub.db._checkbox"); can.core.Item(list, function(key, value) { msg.Option(key, value) })
sub.request(event, sub.Option())
if (event.isTrusted && cmds && cmds.length > 0 && cmds[0] == ctx.ACTION) {
can.onengine.signal(can, "onrecord", can.request({}, {cmds: [sub.ConfSpace(), sub.ConfIndex()].concat(cmds||[])}))
}
sub.request(event, sub.Option())
} can.onengine.signal(can, "onevent", can.request(event))
sub.onappend._output0(sub, sub.Conf(), event||{}, cmds||sub.Input([], !silent), cb, silent)
return true
},
@ -190,7 +184,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
sub.onappend._output(sub, msg, meta.display||msg.Option(ice.MSG_DISPLAY)||meta.feature.display)
}), meta.inputs && sub.onappend._option(sub, meta, sub._option, meta.msg)
sub._legend && (sub._legend.onclick = function(event) {
can.onengine.signal(can, "onevent", can.request(event, {query: `fieldset.${sub.ConfIndex()}>legend`}))
can.onengine.signal(can, "onevent", can.request(event))
can.user.carte(event, sub, sub.onaction, sub.onaction.list.concat([["操作"].concat(can.core.Item(meta.feature._trans))]), function(event, button) { can.misc.Event(event, sub, function(msg) {
can.misc.Inputs(sub, msg, [ctx.ACTION, button], null, meta) || msg.RunAction(event, sub.sub, [ctx.ACTION, button]) || msg.RunAction(event, sub, [ctx.ACTION, button]) || sub.runAction(event, button, [], function(msg) { can.onappend._output(sub, msg) })
}) })
@ -479,6 +473,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
return {type: html.INPUT, data: {type: html.BUTTON}, name: item.name, value: item.value, className: item.style, onclick: function(event) { run(event, item.name) }}
}))
can.page.Append(can, target, [{type: html.INPUT, data: {type: html.BUTTON}, name: html.MORE, value: can.user.trans(can, html.MORE), className: can.page.buttonStyle(can, html.MORE), onclick: function(event) {
can.onengine.signal(can, "onevent", can.request(event))
can.user.carte(event, can, {}, can.core.List(list.slice(limit-1), function(item) { return item.name }), function(event, button) { run(event, button) }, null, {})
}}])
}
@ -621,9 +616,11 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) {
if (key == ctx.ACTION && msg.IsDetail()) { can.onappend.style(can, ctx.ACTION, target.parentNode) }
key == ctx.ACTION && can.onappend.mores(can, target, data, msg.IsDetail()? 20: html.TABLE_BUTTON)
var list = can.page.Select(can, target, html.INPUT, function(target) {
var _icon = can.Conf("_icons."+target.name)||icon[target.name]; if (_icon && typeof _icon == code.STRING || target.name == mdb.DELETE) { return target }
var _icon = (can.page.icons(can, target.name)||{}).icon;
if (_icon && typeof _icon == code.STRING || target.name == mdb.DELETE) { return target }
})
can.core.List(list, function(target) { can.onappend.style(can, html.ICONS, target); var _icon = can.Conf("_icons."+target.name)||icon[target.name]
can.core.List(list, function(target) { can.onappend.style(can, html.ICONS, target);
var _icon = (can.page.icons(can, target.name)||{}).icon;
if (target.name == mdb.DELETE) { _icon = icon.trash }
can.page.insertBefore(can, [{icon: _icon, title: can.user.trans(can, target.name), onclick: target.onclick||function(event) {
can.Update(request(event)._event, [ctx.ACTION, target.name]), can.onkeymap.prevent(event)

View File

@ -513,6 +513,8 @@ fieldset.panel:not(.main) { background-color:var(--panel-bg-color); color:var(--
fieldset.panel:not(.main)>div.output { background-color:var(--panel-output-bg-color); color:var(--panel-output-fg-color); }
fieldset.panel:not(.main):not(.auto) div.item:hover { background-color:var(--panel-hover-bg-color); color:var(--panel-hover-fg-color); }
fieldset.panel:not(.main):not(.auto) div.item.select { background-color:var(--panel-hover-bg-color); color:var(--panel-hover-fg-color); }
fieldset.panel:not(.main):not(.auto) div.tabs:hover { background-color:var(--panel-hover-bg-color); color:var(--panel-hover-fg-color); }
fieldset.panel:not(.main):not(.auto) div.tabs.select { background-color:var(--panel-hover-bg-color); color:var(--panel-hover-fg-color); }
fieldset.panel:not(.main):not(.auto) input { background-color:var(--panel-input-bg-color); color:var(--panel-input-fg-color); }
fieldset.panel:not(.main):not(.auto) input:hover { background-color:var(--panel-hover-bg-color); color:var(--panel-hover-fg-color); }
fieldset.panel:not(.main):not(.auto) input::placeholder { background-color:var(--panel-input-bg-color); color:var(--disable-fg-color); }
@ -608,7 +610,7 @@ legend>span.icon:first-child { margin-right:var(--input-margin); }
legend>i:first-child { margin-right:var(--input-margin); }
select, input { font-size:var(--body-font-size); height:var(--action-height); } input::placeholder, textarea::placeholder { font-style:italic; color:var(--disable-fg-color); }
input[type=checkbox] { height:16px; width:16px; }
textarea { font-size:var(--body-font-size); padding:var(--input-padding); height:var(--textarea-height); width:100%; outline:none; resize:vertical; }
textarea { font-family:var(--input-font-family); font-size:var(--body-font-size); padding:var(--input-padding); height:var(--textarea-height); width:100%; outline:none; resize:vertical; }
table.content.full { width:100%; }
table.content col.time { width:180px; }
table.content col.action { width:var(--project); }

View File

@ -81,14 +81,16 @@ Volcanos("misc", {
msg.append = can.base.AddUniq(msg.append, key), msg[key] = msg[key]||[]
msg[key].push(can.base.isString(value)||can.base.isFunc(value)? value: JSON.stringify(value)); return msg
},
PushAction: function(button) {
var args = can.core.List(arguments)
PushButton: function(button) { var args = can.core.List(arguments)
msg.Push(ctx.ACTION, can.core.List(args, function(button) {
return can.page.Format(html.INPUT, "", mdb.TYPE, html.BUTTON, mdb.NAME, button, mdb.VALUE, can.user.trans(can, button))
}).join("")); return msg
},
PushAction: function(button) { var args = can.core.List(arguments)
can.core.List(msg.Length(), function() {
msg.Push(ctx.ACTION,
can.core.List(args, function(button) {
return can.page.Format(html.INPUT, "", mdb.TYPE, html.BUTTON, mdb.NAME, button, mdb.VALUE, can.user.trans(can, button))
}).join("")
)
msg.Push(ctx.ACTION, can.core.List(args, function(button) {
return can.page.Format(html.INPUT, "", mdb.TYPE, html.BUTTON, mdb.NAME, button, mdb.VALUE, can.user.trans(can, button))
}).join(""))
}); return msg
},
Echo: function(res) { msg.result = (msg.result||[]).concat(can.core.List(arguments)); return msg._hand = true, msg },

View File

@ -385,7 +385,8 @@ Volcanos("page", {
if (can.base.contains(name, ".ico", ".png", ".jpg")) { return {img: can.misc.Resource(can, (name.indexOf(nfs.PS) == -1? nfs.USR_ICONS: "")+name, space)} }
// if (can.page.unicode[name]) { return {text: [can.page.unicode[name], "", "icon"]} }
if (can.base.beginWith(name, "bi ")) { return {icon: name} }
if (icon[name]) { return {icon: icon[name]} }
var _icon = can.Conf("_icons."+name)||can.Conf("_trans.icons."+name)||can.core.Value(can.onaction, ["_trans.icons."+name])||icon[name];
if (_icon) { return {icon: _icon} }
},
requireChina: function(can, title, list, name, path) {
can.onappend.plugin(can, {title: title, display: "/plugin/story/china.js", style: html.FLOAT, height: can.ConfHeight(), width: can.ConfHeight()}, function(sub) {

View File

@ -106,7 +106,9 @@ Volcanos("user", {
action.close(event)
},
open: function(event) { meta.content.indexOf(ice.HTTP) == 0 && can.user.open(meta.content), meta.title.indexOf(ice.HTTP) == 0 && can.user.open(meta.title) },
close: function(event) { action.timer.stop = true, can.page.Remove(can, ui._target) },
close: function(event) {
event && event.isTrusted && can.onengine.signal(can, "onevent", can.request(event))
action.timer.stop = true, can.page.Remove(can, ui._target) },
cancel: function(event) { action.timer.stop = true, can.page.Remove(can, ui._target) },
timer: can.core.Timer({interval: 100, length: (meta.duration||1000)/100}, function(event, interval, index) {
if (index > 30) { ui.duration.innerHTML = index/10+(index%10==0?".0":"")+"s..." }
@ -148,6 +150,7 @@ Volcanos("user", {
meta = meta||can.ondetail||can.onaction||{}, list = can.base.getValid(list, meta.list, can.core.Item(meta)), trans = trans||meta._trans; if (!list || list.length == 0) { return }
var _events = event._events||event
function click(event, button, index) { can.misc.Event(event, can, function() { can.request(event, {action: button}), can.onkeymap.prevent(event), event._events = _events;
can.onengine.signal(can, "onevent", can.request(event));
(can.base.isFunc(cb)? cb(event, button, meta, carte, index):
meta[button]? can.core.CallFunc([meta, button], {event: event, can: can, msg: msg, button: button}):
can.Update(event, [ctx.ACTION, button])) || can.onmotion.clearCarte(can)
@ -192,8 +195,7 @@ Volcanos("user", {
input: function(event, can, form, cb, button) { if (!form || form.length == 0) { return cb() }
event = event||{}; var msg = can.request(event); event = event._event||event; var need = {}
var title = msg.Option(wiki.TITLE)||msg.Option(ctx.ACTION)
var ui = can.page.Append(can, document.body, [{view: [[html.INPUT].concat((can.ConfIndex()||"").split("."), msg.Option(mdb.TYPE), [chat.FLOAT])], list: [
// title && {view: [wiki.TITLE, html.LEGEND, title]},
var ui = can.page.Append(can, document.body, [{view: [[html.INPUT].concat((can.ConfIndex()||"").split("."), msg.Option(ctx.ACTION), msg.Option(mdb.TYPE), [chat.FLOAT])], list: [
{view: html.OPTION, list: [{type: html.TABLE, list: can.core.List(form, function(item) {
item = can.base.isString(item)? {type: html.TEXT, name: item}: item.length > 0? {type: html.SELECT, name: item[0], values: item.slice(1)}: item
item.type = item.type||(item.values? html.SELECT: item.name == html.TEXT? html.TEXTAREA: html.TEXT), need[item.name] = item.need
@ -218,6 +220,7 @@ Volcanos("user", {
can.onengine.signal(can, "onremove", can.request(event, {query: can.page.getquery(can, ui._target)}))
can.page.Remove(can, ui._target) },
submit: function(event, can, button) { var args = [], data = {}, err = false
can.onengine.signal(can, "onevent", can.request(event))
var list = can.page.Select(can, ui.table, html.OPTION_ARGS, function(item) {
if (item.value == "" && need[item.name] == "must") { err = true, item.focus(), can.user.toast(can, item.name+" 是必选字段, 请重新输入") }
return item.name && args.push(item.name, item.value||""), data[item.name] = item.value||""
@ -227,6 +230,11 @@ Volcanos("user", {
can.core.CallFunc(cb, {event: can.request(event, {_handle: ice.TRUE})._event, button: button, data: data, list: list, args: args, input: action}) || action.cancel()
}, _target: ui._target, _engine: function(event, can, button) { action.submit(event, can, button) },
});
can.page.Select(can, action._target, "input", function(target) {
target.onfocus = target.onfocus||function(event) {
can.onengine.signal(can, "onevent", can.request(event))
}
})
title && can.page.Select(can, action._target, "input[name=submit]", function(target) { target.value = can.user.trans(can, title) })
if (event && event.target) { can.onlayout.figure(event, can, ui._target)
can.user.isMobile && can.page.style(can, ui._target, html.LEFT, (can.page.width()-ui._target.offsetWidth)/2, html.TOP, can.getHeaderHeight(can))

View File

@ -13,25 +13,28 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg) { var river = can.Conf(chat.R
sub.run = function(event, cmds, cb) { return can.run(can.request(event, {pod: meta.pod||meta.space}), (can.base.beginWith(meta.index, "can.")? [meta.index]: [river, storm, meta.id||meta.index]).concat(cmds), cb) }
sub.onexport.output = function() { msg.Length() > 1 && can.onexport.isauto(can) && can.page.style(can, sub._output, html.HEIGHT, "", html.MAX_HEIGHT, ""), can.onaction.layout(can, list[3]) }
can.onaction.layout(can, list[3]), can.onimport._tabs(can, sub, meta), can._plugins = (can._plugins||[]).concat([sub])
can.onexport.layout(can) && list[0] == river && list[1] == storm? (can.base.isIn(list[2], sub.ConfIndex()) && (sub._tabs.click(), _select = sub)):
(index == 0 && (sub._tabs.click())), _select = _select||sub, skip || next()
can.onexport.layout(can) && list[0] == river && list[1] == storm? (can.base.isIn(list[2], sub.ConfIndex()) && (_select = sub)): (index == 0 && (_select = sub)), _select = _select||sub, skip || next()
})
}, function() { can.onaction.layout(can, list[3]), _select._tabs.click() })
},
_tabs: function(can, sub, meta) {
var tabs = [{view: [[html.ITEM, meta.name], "", can.user.trans(can, meta.name, meta.help)], title: meta.help, onclick: function(event) { can._current = sub
can.onengine.signal(can, "onevent", can.request(event, {query: can.page.getquery(can, event.target)}))
can.onmotion.select(can, can._output, html.FIELDSET_PLUGIN, sub._target), can.onmotion.select(can, can._action, html.DIV_ITEM, sub._tabs), can.onmotion.select(can, can._header_tabs, html.DIV_ITEM, sub._header_tabs)
var _init = true
var tabs = [{view: [[html.TABS, meta.name], "", can.user.trans(can, meta.name, meta.help)], title: meta.help, onclick: function(event) { can._current = sub
can.onmotion.select(can, can._output, html.FIELDSET_PLUGIN, sub._target)
can.onmotion.select(can, can._action, html.DIV_ITEM, sub._tabs)
can.onmotion.select(can, can._header_tabs, html.DIV_TABS, sub._header_tabs)
can.onmotion.delay(can, function() { sub._header_tabs.scrollIntoViewIfNeeded() })
var layout = can.onexport.layout(can); layout == FREE || (can._output.scrollTop = sub._target.offsetTop-10)
can.isCmdMode() || can.misc.SearchHash(can, can.Conf(chat.RIVER), can.Conf(chat.STORM), sub.ConfIndex(), layout)
sub.onimport.size(sub, can.ConfHeight()-can.Conf(html.MARGIN_Y), can.ConfWidth()-can.Conf(html.MARGIN_X), can.onexport.isauto(can))
can.onengine.signal(can, "onindex", can.request(_init? {target: event.target, type: "click", isTrusted: true}: event, {index: sub.ConfIndex()})), _init = false
// can.onengine.signal(can, "onevent", can.request(_init? {target: event.target, type: "click", isTrusted: true}: event)), _init = false
}, oncontextmenu: sub._legend.onclick}]; sub._header_tabs = can.page.Append(can, can._header_tabs, tabs)._target, sub._tabs = can.page.Append(can, can._action, tabs)._target
},
_menu: function(can, msg) { if (can.user.isMobile) { return }
if (!can.user.isTechOrRoot(can)) { return }
var target = can.setHeaderMenu(can.base.Obj(can.Conf(chat.MENUS)||msg.Option(chat.MENUS), can.onaction._menus), function(event, button, list) { list && can.core.CallFunc([can.onaction, list[0]], [can, button]) })
can.onmotion.hidden(can, can._header_tabs = can.page.Append(can, target, [html.TABS])._target)
can.onmotion.hidden(can, can._header_tabs = can.page.Append(can, target, ["_tabs"])._target)
},
})
Volcanos(chat.ONACTION, {_init: function(can, target) { can.db.list = can.misc.SearchHash(can)

View File

@ -39,6 +39,10 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can._wss = can.onda
},
_toast: function(can, msg, target) { can.ui.toast = can.page.Append(can, target, [{view: [[html.ITEM, chat.TOAST]], onclick: function(event) { can.onexport[NTIP](can) }}])._target },
_data: function(can, name, item) { can.db[name] = can.db[name]||can.request(), can.db[name].Push(item), can.onimport.count(can, name) },
tutor: function(event, can, type, text) {
!event._tutor && event.isTrusted && text && can.onimport._data(can, chat.TUTOR, {time: can.base.Time(), type: type, text: text})
event._tutor = true
},
value: function(can, name, value) { can.page.Select(can, can._output, "div.item>span."+name, function(target) { target.innerHTML = value }) },
count: function(can, name) { can.page.Select(can, can._output, can.core.Keys(html.SPAN, name), function(item) { item.innerHTML = can.Conf(name, parseInt(can.Conf(name)||"0")+1+"")+"" }) },
ntip: function(can, msg, time, title, content) { can.onimport._data(can, NTIP, {time: time, title: title, content: content}), can.page.Modify(can, can.ui.toast, [time, title, content].join(lex.SP)) },
@ -63,10 +67,13 @@ Volcanos(chat.ONACTION, {_init: function(can) {},
onrecord: function(can, msg) { var zone = can.misc.sessionStorage(can, "web.chat.script:zone"); zone && can.runAction(can.request(), nfs.SCRIPT, [zone].concat(msg.cmds[0])) },
onaction_cmd: function(can) { can.onappend.style(can, html.HIDE) },
onstorm_select: function(event, can, river, storm) { event.isTrusted != undefined && can.onimport._data(can, chat.TUTOR, {time: can.base.Time(), type: chat.STORM, text: [river, storm].join(",")}) },
ontheme: function(event, can, theme) { event.isTrusted && theme && can.onimport._data(can, chat.TUTOR, {time: can.base.Time(), type: chat.THEME, text: theme}) },
onevent: function(event, can, query) { event.isTrusted && query && can.onimport._data(can, chat.TUTOR, {time: can.base.Time(), type: event.type, text: query}) },
onproject: function(event, can, query) { event.isTrusted && query && can.onimport._data(can, chat.TUTOR, {time: can.base.Time(), type: "item", text: query}) },
onremove: function(event, can, query) { event.isTrusted && query && can.onimport._data(can, chat.TUTOR, {time: can.base.Time(), type: "remove", text: query}) },
ontheme: function(event, can, theme) { can.onimport.tutor(event, can, chat.THEME, theme) },
onevent: function(event, can, query) { can.onimport.tutor(event, can, event.type, query||can.page.getquery(can, event.currentTarget||event.target)) },
onindex: function(event, can, index) { can.onimport.tutor(event, can, ctx.INDEX, index) },
onproject: function(event, can, query) { can.onimport.tutor(event, can, html.ITEM, query) },
onremove: function(event, can, query) { can.onimport.tutor(event, can, mdb.REMOVE, query) },
oncommand_focus: function(can) { can.page.Select(can, can._output, ["div.cmd", html.INPUT], function(target) { can.onmotion.focus(can, target) }) },
onlayout: function(can, layout, before) { if (can.user.isMobile) { return }
can.page.ClassList.del(can, can._target, before), can.page.ClassList.add(can, can._target, layout)

View File

@ -16,23 +16,19 @@ fieldset.Header>div.output div.item.usernick>i { margin-left:var(--input-padding
fieldset.Header>div.output div.item.usernick:not(:hover)>i { visibility:hidden; }
fieldset.Header>div.output div.item.usernick { padding-right:0; }
fieldset.Header>div.output div.item.avatar { padding:0; }
body.mobile fieldset.Header>div.output div.item.usernick { display:none; }
fieldset.Header>div.output div.item.avatar>img { height:var(--header-height); clip-path:circle(40%); }
fieldset.Header>div.output div.item.search { padding:13.5px 5px; }
fieldset.Header>div.output div.item.search { padding:7px 5px; }
fieldset.Header>div.output div.item.search>i { color:unset; padding:7px; left:3px; }
fieldset.Header>div.output div.item.search>input { padding-left:25px; }
fieldset.Header>div.output div.item.search>span.icon { padding:var(--input-padding) var(--button-padding); }
fieldset.Header>div.output div.Action>div._tabs { white-space:pre; padding-left:100px; height:100%; overflow:auto; display:flex; flex-wrap:wrap; }
fieldset.Header>div.output div.Action>div._tabs div.tabs { font-style:italic; padding:13.5px 20px; }
fieldset.Header>div.output div.Action>div._tabs div.tabs:only-child { display:none; }
body.mobile fieldset.Header>div.output div.item.usernick { display:none; }
body.mobile fieldset.Header>div.output div.item.search>i { padding:0 10px; }
body.mobile fieldset.Header>div.output div.item.search>input { width:256px; }
body.mobile fieldset.Header>div.output div.item.search>input:not(:focus) { border-color:var(--disable-fg-color); }
fieldset.Header>div.output div.item.search>span.icon { padding:var(--input-padding) var(--button-padding); }
fieldset.Header>div.output div.Action>div.tabs { white-space:pre; height:100%; overflow:auto; display:flex; flex-wrap:wrap; }
/* fieldset.Header>div.output div.Action>div.tabs { justify-content:center; } */
fieldset.Header>div.output div.Action>div.tabs div.item { font-style:italic; }
fieldset.Header>div.output div.Action>div.tabs div.item { padding:13.5px 20px; }
fieldset.Header>div.output div.Action>div.tabs { padding-left:100px; }
/* fieldset.Header>div.output div.Action>div.tabs div.item.select { border-bottom:var(--box-notice3); } */
fieldset.Header>div.output div.Action>div.tabs div.item:only-child { display:none; }
body:not(.mobile) fieldset.Header>div.output div.title:first-child { width:var(--river-width); }
body:not(.mobile) fieldset.Header>div.output div.title img { margin-right:var(--button-margin); }
body:not(.mobile) fieldset.Header:not(.all):not(.tabs)>div.output div.title:first-child { padding-left:var(--button-padding); width:unset; }
@ -42,12 +38,8 @@ body:not(.width6) fieldset.Header.tabview>div.output>div.Action>div.item.dream {
body:not(.width6) fieldset.Header.tabview>div.output>div.Action>div.item.desktop { display:none; }
body:not(.width6) fieldset.Header>div.output>div.Action>div.item.portal { display:none; }
body:not(.width6) fieldset.Header>div.output>div.item.language { display:none; }
/* body.width2>fieldset.Header>div.output div.item:not(.usernick):not(.avatar) { padding:13.5px 5px; } */
/* body.width3>fieldset.Header>div.output div.item:not(.usernick):not(.avatar) { padding:13.5px 5px; } */
body.width3>fieldset.Header>div.output>div.item.time { display:none; }
body.width3>fieldset.Header>div.output>div.item.avatar { margin-right:var(--plugin-margin); }
/* body.width3>fieldset.Header>div.output div.Action>div.tabs { padding-left:0; } */
/* body.width4>fieldset.Header>div.output div.Action>div.tabs { padding-left:0; } */
body.width2>fieldset.Header>div.output div.Action>div.tabs { padding-left:50px; }
body.width2>fieldset.Header>div.output>div.item.avatar { margin-right:var(--plugin-margin); }
body.width2>fieldset.Header>div.output>div.item.theme { display:none; }

View File

@ -20,7 +20,7 @@ fieldset.River>div.toggle.next { bottom:-52px; }
fieldset.River:not(:hover)>div.toggle { visibility:hidden; }
fieldset.River.page { display:none; }
fieldset.River:not(.all):not(.tabs):not(.page) { width:var(--header-height); }
fieldset.River:not(.all):not(.tabs):not(.page)>div.action { flex-direction:column; overflow:hidden; visibility:hidden; }
fieldset.River:not(.all):not(.tabs):not(.page)>div.action { flex-direction:column; overflow:hidden; }
fieldset.River:not(.all):not(.tabs):not(.page)>div.action div.item { margin-right:0; }
fieldset.River:not(.all):not(.tabs):not(.page)>div.action div.item.share { display:none; }
fieldset.River:not(.all):not(.tabs):not(.page)>div.action div.item.refresh { display:none; }

View File

@ -7,15 +7,18 @@ Volcanos(chat.ONFIGURE, {key: {
can._show(can, msg, cb, target, name)
})
},
_show: function(can, msg, cb, target, name) {
_show: function(can, msg, cb, target, name) { msg.Option(ice.TABLE_CHECKBOX, "")
if (msg.Length() == 0 || msg.Length() == 1 && msg.Append(name) == target.value && target.value != "") { return can.onmotion.hidden(can) }
if (can.base.isIn(msg.append[msg.append.length-1], ctx.ACTION, "cb")) { msg.append = msg.append.slice(0, -1) } var list = {}
msg.Option(ice.TABLE_CHECKBOX, "")
can.onmotion.clear(can), can.onappend.table(can, msg, function(value, key, index, item) { value = item[key]
if (msg.append.length == 1 && index < 100 && list[value]) { return } list[value] = true
return {text: [value, html.TD, value == ""? html.HR: ""], style: msg.append && msg.append.length == 1? kit.Dict(html.MIN_WIDTH, target.offsetWidth-16): {}, onclick: function(event) {
return {text: [value, html.TD, [value == ""? html.HR: "", key]], style: msg.append && msg.append.length == 1? kit.Dict(html.MIN_WIDTH, target.offsetWidth-16): {}, onclick: function(event) {
can.onengine.signal(can, "onevent", can.request(event))
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)
}, _init: function(target) {
can.onappend.style(can, "i-"+index, target.parentNode)
// can.onappend.style(can, "s-"+can.base.replaceAll(item[name], "/", "_"), target.parentNode)
}}
})
can.showIcons = function(value, icons, title) { can.ui = can.ui||{}
@ -34,12 +37,18 @@ Volcanos(chat.ONFIGURE, {key: {
can.core.CallFunc([can.sup.sub, "oninputs", style], {event: event, can: can, msg: msg, target: target, name: name})
can.layout(msg)
},
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 }
onfocus: function(event, can, meta, target, cbs, mod) {
can.onengine.signal(can, "onevent", can.request(event));
meta._force && mod.onclick(event, can, meta, target, cbs) },
onclick: function(event, can, meta, target, cbs) {
can.onengine.signal(can, "onevent", can.request(event));
(target.value == "" || meta._force) && cbs(function(sub, cb) { if (sub.Status(mdb.TOTAL) > 0) { return }
sub.sup = can._fields? can.sup: can
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) },
onblur: function(event, can, sub, cb, target) {
can.onengine.signal(can, "onevent", can.request(event, {query: can.page.getquery(can, target)+","+target.value}));
sub && can.onmotion.delay(can, sub.close, 300) },
onkeyup: 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)

View File

@ -255,7 +255,9 @@ Volcanos(chat.ONACTION, {list: ["刷新数据",
} else {
can.onaction._close(event, can), can.onexport.close(can)
}
}, _close: function(event, can) { can.page.Remove(can, can._target) },
}, _close: function(event, can) {
can.onengine.signal(can, "onremove", can.request(event, {query: can.page.getquery(can, can._target)}))
can.page.Remove(can, can._target) },
clear: function(event, can) { can.onmotion.clear(can, can._output) },
actions: function(event, can) { can.onmotion.toggle(can, can._action) },
help: function(event, can) {

View File

@ -11,12 +11,14 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target, cb) {
card: function(can, msg, target, filter) { target = target||can.ui.content||can._output
can.page.Append(can, target, msg.Table(function(value) { if (filter && filter(value)) { return }
var img = can.misc.Resource(can, value.icon = value.icons||value.icon||value.image, msg.Option(ice.MSG_USERPOD), msg.Option(ice.MSG_USERWEB))
return {view: [[html.ITEM, value.type, value.status]], list: [
return {view: [[html.ITEM, value.type, value.status, "s-"+value.name]], list: [
{view: [wiki.TITLE, html.DIV], list: [
value.icon && {className: can.base.contains(img, ".jpg")? "jpg": "", img: img},
{view: wiki.TITLE, list: [{text: value.name}, can.onappend.label(can, value)]},
]}, {view: [wiki.CONTENT, html.DIV, value.text]},
{view: html.ACTION, inner: value.action, _init: function(target) { can.onappend.mores(can, target, value, html.CARD_BUTTON) }},
{view: html.ACTION, inner: value.action, _init: function(target) { can.onappend.mores(can, target, value, html.CARD_BUTTON)
can.page.Select(can, target, html.INPUT, function(target) { can.onappend.style(can, target.name, target) })
}},
]}
})), can.onimport.layout = can.onimport.layout||function() { var height = can.onlayout.expand(can, target); can.sup.onexport.outputMargin = function() { return height } }
},