diff --git a/frame.js b/frame.js index 91224196..b70408a0 100644 --- a/frame.js +++ b/frame.js @@ -141,16 +141,15 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { can.core.Item(meta.feature, function(key, cb) { cb.help && sub.user.trans(sub, kit.Dict(key, cb.help)) }) meta.msg && can.onmotion.delay(can, function() { var msg = sub.request(); msg.Copy(can.base.Obj(meta.msg)) 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), can.base.isFunc(cb) && cb(sub) + }), meta.inputs && sub.onappend._option(sub, meta, sub._option, meta.msg) sub._legend && (sub._legend.onclick = function(event) { can.user.carte(event, sub, sub.onaction, sub.onaction.list.concat([[ctx.ACTION].concat(can.core.Item(meta.feature._trans))]), function(event, button) { can.misc.Event(event, sub, function(msg) { msg.RunAction(event, can.core.Value(sub, chat._OUTPUTS_CURRENT), [ctx.ACTION, button]) || msg.RunAction(event, sub, [ctx.ACTION, button]) || sub.runAction(event, button) }) }) }) - sub.isCmdMode() && can.onappend.style(sub, can.misc.Search(can, ctx.STYLE)) - sub.isCmdMode() && sub.Conf(can.misc.Search(can)) - if (can.user.isMobile && !can.user.isLandscape()) { return } - if (can.page.ClassList.has(can, sub._target, html.OUTPUT)) { return } + sub.isCmdMode() && can.onappend.style(sub, can.misc.Search(can, ctx.STYLE)), sub.isCmdMode() && sub.Conf(can.misc.Search(can)) + can.base.isFunc(cb) && cb(sub) + if (can.user.isMobile && !can.user.isLandscape()) { return } if (can.page.ClassList.has(can, sub._target, html.OUTPUT)) { return } sub.isCmdMode() && !can.base.isIn(meta.index, web.CODE_VIMER, web.CODE_INNER, web.CHAT_MACOS_DESKTOP) && can.page.insertBefore(can, can.user.header(can), sub._output, sub._fields) }); return sub }, diff --git a/index.css b/index.css index 169b38f4..62f3b653 100644 --- a/index.css +++ b/index.css @@ -1,5 +1,5 @@ * { tab-size:4; box-sizing:border-box; padding:0; border:0; margin:0; } -body { background-color:black; font-size:16px; } +body { font-size:16px; } legend { padding:0 20px; } input:not([type=file]) { padding:0 10px; } input:not([type=button]) { width:120px; } @@ -69,17 +69,6 @@ body>div.upload div.output div.progress { background-color:red; height:10px; wid body>div.upload div.status div.cost { float:left; } body>div.upload div.status div.show { float:right; } body>div.upload div.status div.size { text-align:center; } -/* hover */ -input:hover[type=button][name=create] { background-color:blue; color:white; } -input:hover[type=button][name=insert] { background-color:blue; color:white; } -input:hover[type=button][name=restart] { background-color:blue; color:white; } -input:hover[type=button][name=start] { background-color:blue; color:white; } -input:hover[type=button][name=run] { background-color:blue; color:white; } -input:hover[type=button][name=open] { background-color:blue; color:white; } -input:hover[type=button][name=stop] { background-color:red; color:white; } -input:hover[type=button][name=trash] { background-color:red; color:white; } -input:hover[type=button][name=delete] { background-color:red; color:white; } -input:hover[type=button][name=remove] { background-color:red; color:white; } /* font */ legend { font-size:1.2rem; line-height:30px; height:32px; } select, input { font-size:1rem; height:32px; } textarea::placeholder, input::placeholder { font-style:italic; } @@ -122,7 +111,6 @@ div.action>div.item.select:hover>span.icon { visibility:visible; } div.item.text>span.icon.delete { font-size:20px; visibility:hidden; } div.item.text:hover>span.icon.delete { visibility:visible; } div.tabs span.icon { margin-left:5px; visibility:hidden; } -div.tabs span.icon:hover { background-color:aliceblue; color:black; } div.tabs>div:hover span.icon { visibility:visible; } div.tabs>div.select span.icon { visibility:visible; } div.action>div.tabs:hover span.icon { visibility:visible; } @@ -177,11 +165,12 @@ fieldset>div.output>div.project { border-right:gray solid 1px; min-width:120px; fieldset>div.output div.profile { border-left:gray solid 1px; max-width:320px; } fieldset>div.output div.display { border-top:gray solid 1px; } /* table card */ -div.output.card>div.item.stop { color:gray; } +div.output.card>div.item.stop { color:var(--disable-fg-color); } div.output.card>div.item { padding:10px; border:#e7e7e7 solid 1px; margin:10px; width:320px; float:left; } div.output.card>div.item>div.title { font-size:1.2rem; font-weight:bold; padding:10px; border-bottom:solid 1px #e7e7e7; } div.output.card>div.item>div.content { padding:10px; height:70px; } div.output.card>div.item>div.action { text-align:right; width:100%; display:flex; } +div.output.card>div.item:not(:hover)>div.action { visibility:hidden; } div.output.card>div.item>div.action>input { margin-right:5px; } /* display */ fieldset.panel>legend { display:none; } @@ -208,7 +197,24 @@ fieldset.plug div.output table.content { width:100%; } div.carte.select.float>div.item { text-align:center; } legend, select, input[type=button], th, table.content td, h1, h2, h3, div.item, div.tabs { cursor:pointer; } div.story[data-type=spark] { cursor:copy; } +/* hover */ +input:hover[type=button][name=create] { background-color:var(--create-bg-color); color:var(--create-fg-color); } +input:hover[type=button][name=insert] { background-color:var(--create-bg-color); color:var(--create-fg-color); } +input:hover[type=button][name=restart] { background-color:var(--create-bg-color); color:var(--create-fg-color); } +input:hover[type=button][name=start] { background-color:var(--create-bg-color); color:var(--create-fg-color); } +input:hover[type=button][name=run] { background-color:var(--create-bg-color); color:var(--create-fg-color); } +input:hover[type=button][name=open] { background-color:var(--create-bg-color); color:var(--create-fg-color); } +input:hover[type=button][name=stop] { background-color:var(--danger-bg-color); color:var(--danger-fg-color); } +input:hover[type=button][name=trash] { background-color:var(--danger-bg-color); color:var(--danger-fg-color); } +input:hover[type=button][name=delete] { background-color:var(--danger-bg-color); color:var(--danger-fg-color); } +input:hover[type=button][name=remove] { background-color:var(--danger-bg-color); color:var(--danger-fg-color); } /* theme */ +body { + --body-bg-color:black; --body-fg-color:silver; + --danger-bg-color:red; --danger-fg-color:white; + --create-bg-color:blue; --create-fg-color:white; + --disable-fg-color:gray; +} body { background-color:var(--body-bg-color); color:var(--body-fg-color); } body legend { background-color:var(--legend-bg-color); border-radius:var(--input-radius); } body legend:hover { color:var(--hover-fg-color) } @@ -231,17 +237,18 @@ body div.item:hover { background-color:var(--hover-bg-color); color:var(--hover- body div.item.select { background-color:var(--hover-bg-color); color:var(--hover-fg-color); } body span.item:hover { background-color:var(--hover-bg-color); color:var(--hover-fg-color); } body span.item.select { background-color:var(--hover-bg-color); color:var(--hover-fg-color); } +body span.icon:hover { background-color:var(--hover-bg-color); color:var(--hover-fg-color); } body div.action div.tabs:hover { background-color:var(--hover-bg-color); color:var(--hover-fg-color); } body div.action div.tabs.select { background-color:var(--hover-bg-color); color:var(--hover-fg-color); } body div.output { background-color:var(--output-bg-color); } body fieldset>div.status { border-top:var(--status-border); } -body fieldset:not(.panel) { background-color:var(--plugin-bg-color); border-radius:var(--plugin-radius); } +body fieldset:not(.panel) { background-color:var(--plugin-bg-color); color:var(--plugin-fg-color); border-radius:var(--plugin-radius); } body fieldset.panel:not(.main) { background-color:var(--panel-bg-color); color:var(--panel-fg-color); } body fieldset.panel:not(.main)>div.output { background-color:var(--panel-output-bg-color); color:var(--panel-output-fg-color); } body fieldset.input div.output { background-color:var(--plugin-bg-color); } body fieldset.input tr:hover { background-color:var(--tr-hover-bg-color); } body fieldset.input td:hover { background-color:var(--td-hover-bg-color); } -body div.float { background-color:var(--float-bg-color); } +body div.float { background-color:var(--float-bg-color); color:var(--float-fg-color); } body div.carte div.item { background-color:var(--carte-bg-color); } body div.carte div.item:hover { background-color:var(--hover-bg-color); } body div.zone>div.item { background-color:var(--th-bg-color); } diff --git a/lib/user.js b/lib/user.js index c1f83266..8ec07eb2 100644 --- a/lib/user.js +++ b/lib/user.js @@ -148,6 +148,7 @@ Volcanos("user", { input: function(event, can, form, cb, button) { if (!form || form.length == 0) { return cb() } var msg = can.request(event); event = event._event||event; var need = {} var ui = can.page.Append(can, document.body, [{view: [[html.INPUT, chat.FLOAT]], list: [ + msg.Option(wiki.TITLE) && {view: [wiki.TITLE, html.LEGEND, msg.Option(wiki.TITLE)]}, {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 @@ -214,7 +215,7 @@ Volcanos("user", { return a.click(), can.page.Remove(can, a), path }, toimage: function(can, name, target, silent) { var toast = can.user.toastProcess(can, "生成中...") - can.require(["https://cdn.jsdelivr.net/npm/html2canvas@1.0.0-rc.5/dist/html2canvas.min.js"], function() { toast.close() + can.require(["/require/modules/html2canvas/dist/html2canvas.min.js"], function() { toast.close() html2canvas(target||can._target).then(function (canvas) { var url = canvas.toDataURL(web.IMAGE_PNG) silent? (can.user.download(can, url, name, nfs.PNG), can.user.toastSuccess(can)): can.user.toastImage(can, name, url) }) diff --git a/panel/river.js b/panel/river.js index ff9a8bac..327f7f24 100644 --- a/panel/river.js +++ b/panel/river.js @@ -28,7 +28,11 @@ Volcanos(chat.ONACTION, {list: [mdb.CREATE, web.SHARE, web.REFRESH], _init: func onlayout: function(can, layout) { can.user.isMobile || can.onmotion.toggle(can, can._target, !layout || layout == "tabs") }, ontitle: function(can, msg) { can.misc.sessionStorage(can, CAN_RIVER, ""), can.misc.sessionStorage(can, CAN_STORM, "") }, - create: function(event, can) { can.user.input(event, can, [{name: mdb.TYPE, values: [aaa.TECH, aaa.ROOT, aaa.TECH, aaa.VOID], _trans: "类型"}, {name: mdb.NAME, value: "hi", _trans: "群名"}, {name: mdb.TEXT, value: "hello", _trans: "简介"}], function(args) { + create: function(event, can) { can.user.input(can.request(event, {title: "创建群组"}), can, [ + {name: mdb.TYPE, values: [aaa.TECH, aaa.ROOT, aaa.TECH, aaa.VOID], _trans: "类型"}, + {name: mdb.NAME, value: "hi", _trans: "群名", need: "must"}, + {name: mdb.TEXT, value: "hello", _trans: "简介"}, + ], function(args) { can.runAction(event, mdb.CREATE, args, function(msg) { can.misc.Search(can, {river: msg.Result()}) }) }) }, share: function(event, can) { can.core.CallFunc(can.ondetail.share, {event: event, can: can}) }, @@ -85,7 +89,7 @@ Volcanos(chat.ONDETAIL, { can.onmotion.delay(can, function() { toast.close(), next(), index == array.length-1 && can.user.toastSuccess(can) }) }) }) }, - addcmd: function(event, can, button, river, storm) { can.user.input(event, can, [{name: web.SPACE, value: can.misc.Search(can, ice.POD)||""}, {name: ctx.INDEX, need: "must"}, ctx.ARGS, ctx.DISPLAY, ctx.STYLE], function(args) { + addcmd: function(event, can, button, river, storm) { can.user.input(can.request(event, {title: "添加工具"}), can, [{name: web.SPACE, value: can.misc.Search(can, ice.POD)||""}, {name: ctx.INDEX, need: "must"}, ctx.ARGS, ctx.DISPLAY, ctx.STYLE], function(args) { can.run({}, [river, storm, chat.STORM, ctx.ACTION, mdb.INSERT].concat(args), function(msg) { can.onengine.signal(can, chat.ONSTORM_SELECT, can.request(event, {river: can.Conf(chat.RIVER, river), storm: can.Conf(chat.STORM, storm), refresh: ice.TRUE})) }) @@ -94,7 +98,10 @@ Volcanos(chat.ONDETAIL, { can.run(event, [river, storm, chat.STORM, ctx.ACTION, mdb.MODIFY].concat(args), function() { can.page.Modify(can, can.ui.storm_list[can.core.Keys(river, storm)], args[1]), can.user.toastSuccess(can) }) }) }, remove: function(event, can, button, river, storm) { can.run(event, [river, storm, chat.STORM, ctx.ACTION, mdb.REMOVE], function(msg) { can.misc.Search(can, {river: river, storm: ""}) }) }, - create: function(event, can, button, river) { can.user.input(event, can, [{name: mdb.NAME, value: "hi", _trans: "名称"}, {name: mdb.TEXT, value: "hello", _trans: "简介"}], function(args) { + create: function(event, can, button, river) { can.user.input(can.request(event, {title: "添加应用"}), can, [ + {name: mdb.NAME, value: "hi", _trans: "名称", need: "must"}, + {name: mdb.TEXT, value: "hello", _trans: "简介"}, + ], function(args) { can.run({}, [river, chat.STORM, ctx.ACTION, mdb.CREATE].concat(args), function(msg) { can.misc.Search(can, {river: river, storm: msg.Result()}) }) }) }, })