diff --git a/const.js b/const.js index 8a8ffeae..56191584 100644 --- a/const.js +++ b/const.js @@ -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", diff --git a/frame.js b/frame.js index 8f9cb4be..ed240044 100644 --- a/frame.js +++ b/frame.js @@ -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) diff --git a/index.css b/index.css index 8ce1821b..33a40e8f 100644 --- a/index.css +++ b/index.css @@ -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); } diff --git a/lib/misc.js b/lib/misc.js index 4f2759c1..c30467c9 100644 --- a/lib/misc.js +++ b/lib/misc.js @@ -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 }, diff --git a/lib/page.js b/lib/page.js index 626fa8b7..3ac3ac51 100644 --- a/lib/page.js +++ b/lib/page.js @@ -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) { diff --git a/lib/user.js b/lib/user.js index ad01eac5..16398cc5 100644 --- a/lib/user.js +++ b/lib/user.js @@ -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)) diff --git a/panel/action.js b/panel/action.js index 3e8a9187..d64ba375 100644 --- a/panel/action.js +++ b/panel/action.js @@ -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) diff --git a/panel/footer.js b/panel/footer.js index 5c8d0455..fb7d1397 100644 --- a/panel/footer.js +++ b/panel/footer.js @@ -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) diff --git a/panel/header.css b/panel/header.css index 98bb4e02..fa7046b7 100644 --- a/panel/header.css +++ b/panel/header.css @@ -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; } diff --git a/panel/river.css b/panel/river.css index b665f87a..2de6b39a 100644 --- a/panel/river.css +++ b/panel/river.css @@ -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; } diff --git a/plugin/input/key.js b/plugin/input/key.js index 02408d3a..1c563f4b 100644 --- a/plugin/input/key.js +++ b/plugin/input/key.js @@ -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) diff --git a/plugin/state.js b/plugin/state.js index 5db4bbff..5e4c277c 100644 --- a/plugin/state.js +++ b/plugin/state.js @@ -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) { diff --git a/plugin/table.js b/plugin/table.js index 5d013851..0e5eee6c 100644 --- a/plugin/table.js +++ b/plugin/table.js @@ -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 } } },