diff --git a/const.js b/const.js index 56191584..4c42805b 100644 --- a/const.js +++ b/const.js @@ -369,7 +369,7 @@ var html = {value: { BODY: "body", FORM: "form", LABEL: "label", TITLE: "title", INNER: "inner", SPACE: "space", CLICK: "click", SELECT: "select", INPUT: "input", TEXT: "text", FILE: "file", TEXTAREA: "textarea", BUTTON: "button", CHECKBOX: "checkbox", CANCEL: "cancel", SUBMIT: "submit", UPLOAD: "upload", USERNAME: "username", PASSWORD: "password", - CONFIRM: "confirm", + CONFIRM: "confirm", CLOSE: "close", CLICK: "click", FOCUS: "focus", BLUR: "blur", TABLE: "table", THEAD: "thead", TBODY: "tbody", TR: "tr", TH: "th", TD: "td", HEADER: "header", NAV: "nav", MAIN: "main", ASIDE: "aside", FOOTER: "footer", FAVICON: "favicon", diff --git a/frame.js b/frame.js index 41976878..00bcb930 100644 --- a/frame.js +++ b/frame.js @@ -184,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, {type: "legend"})) + can.onengine.signal(can, "onevent", can.request(event, {_type: html.LEGEND, action: "legend"})) 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) }) }) }) @@ -207,7 +207,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { next: {name: mdb.NEXT, cb: function(event) { var sub = can.sub; sub.onaction && sub.onaction.next? sub.onaction.next(event, sub): can.onaction.next(event, can) }}, }[item.name||item||""]; if (!icon) { return } item.style = "icons" can.page.Append(can, option, [{view: [[html.ITEM, html.ICON, icon.name, item.name], html.DIV, can.page.unicode[icon.name]], title: can.user.trans(can, item.name), onclick: function(event) { - can.onengine.signal(can, "onevent", can.request(event, {type: "option"})) + can.onengine.signal(can, "onevent", can.request(event, {_type: html.OPTION})) if (icon.cb) { return icon.cb(event) } var msg = can.request(event), cmds = [ctx.ACTION, item.name]; msg.RunAction(event, can.sub, cmds) || msg.RunAction(event, can, cmds) || can.Update(event, cmds) }}]) @@ -224,6 +224,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { if (item.type == html.TEXT) { can.page.Append(can, sub._target.parentNode, [{text: [sub._target.value, html.SPAN, mdb.VALUE]}]) } if (item.type == html.BUTTON && can.page.isIconInput(can, item.name)) { can.onappend.icons(can, sub._target, item.name, item.onclick||function(event) { + can.onengine.signal(can, "onevent", can.request(event, {_type: html.OPTION})) can.Update(event, item.name == "refresh"? []: [ctx.ACTION, item.name].concat(can.page.SelectArgs(sub))) }) } @@ -251,7 +252,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { }, _action: function(can, list, action, meta, hold, limit) { meta = meta||can.onaction||{}, action = action||can._action, hold || can.onmotion.clear(can, action) function run(event, button) { can.misc.Event(event, can, function(msg) { var _can = can._fields? can.sup: can; can.requestAction(event, button) - action == can._action && can.onengine.signal(can, "onevent", can.request(event, {type: "action"})) + action == can._action && can.onengine.signal(can, "onevent", can.request(event, {_type: html.ACTION})) var cb = meta[button]||meta[chat._ENGINE]; cb? can.core.CallFunc(cb, {event: event, can: can, button: button}): can.run(event, can.base.isIn(button, mdb.LIST, web.REFRESH)? []: [ctx.ACTION, button].concat(_can.Input())) }) } @@ -288,7 +289,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { }, function(key, value) { return (value || value === "") && {view: [[html.ITEM, html.BUTTON, key, mdb.ICONS, "state"]], list: [{icon: icon[key]}], title: key == "_space"? "": can.user.trans(can, key), onclick: function(event) { - can.onengine.signal(can, "onevent", can.request(event, {type: "action", action: key})) + can.onengine.signal(can, "onevent", can.request(event, {_type: html.ACTION, action: key})) var cb = _can.onaction[value]; cb && _can.onaction[value](event, _can, value, _can.sub) }} }).concat(can.Conf("_plugin_action")||[]) @@ -383,7 +384,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { can.page.Append(can, status, [{view: [[html.ITEM, item.name]], list: [ {text: [can.page.Color(can.user.trans(can, item.name, null, html.INPUT)), html.LABEL]}, {text: [": ", html.LABEL]}, {text: [(item.value == undefined? "": (item.value+"").trim())+"", html.SPAN, item.name]}, ], onclick: function(event) { - can.onengine.signal(can, "onevent", can.request(event, {type: "status"})) + can.onengine.signal(can, "onevent", can.request(event, {_type: html.STATUS})) if (item.onclick) { return item.onclick(event) } if (!can.misc.isDebug(can)) { return } if (can.base.isIn(item.name, mdb.TIME)) { @@ -580,7 +581,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { if (key == "secretKey" && value) { _value = value.slice(0, 4)+"****" } if (key == aaa.PASSWORD && value) { _value = "********" } function onclick() { return false } - if (key == "enable") { + if (key == mdb.ENABLE) { if (value == ice.TRUE) { _value = `` function onclick() { run(event, mdb.MODIFY, [key, ice.FALSE]); return true } @@ -614,9 +615,7 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { }, onmouseover: function(event) { can.page.SelectChild(can, can._option, html.DIV_ITEM_TEXT, function(target) { can.page.ClassList.set(can, target, "will", can.page.ClassList.has(can, target, key)) }) }, _init: function(target) { - if (can.Option(key) === "") { - can.onappend.style(can, value, target.parentNode) - } + if (option.indexOf(key) > -1) { can.onappend.style(can, value, target.parentNode) } if (key == mdb.TYPE) { can.onappend.style(can, value, target.parentNode) } if (key == mdb.STATUS) { can.onappend.style(can, value, target.parentNode) } if (key == mdb.ENABLE) { can.onappend.style(can, value == ice.TRUE? mdb.ENABLE: mdb.DISABLE, target.parentNode) } @@ -627,10 +626,9 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { 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.page.icons(can, target.name)||{}).icon; - if (target.name == mdb.DELETE) { _icon = icon.trash } + 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.onengine.signal(can, "onevent", can.request(event, {type: "button"})) + can.onengine.signal(can, "onevent", can.request(event, {_type: html.BUTTON})) can.Update(request(event)._event, [ctx.ACTION, target.name]), can.onkeymap.prevent(event) }}], target.nextSibling, target.parentNode) }) @@ -1048,7 +1046,8 @@ Volcanos(chat.ONMOTION, {_init: function(can, target) { } }).length == 0) }) }, - tableFilter: function(can, target, value) { can.page.Select(can, target, html.TR, function(tr, index) { + tableFilter: function(can, target, value) { + can.page.Select(can, target, html.TR, function(tr, index) { index > 0 && can.page.ClassList.set(can, tr, html.HIDDEN, can.page.Select(can, tr, html.TD, function(td) { if (td.innerText.toLowerCase().indexOf(value.toLowerCase()) > -1) { return td } }) == 0) }) }, delayResize: function(can, target, key) { @@ -1086,12 +1085,12 @@ Volcanos(chat.ONMOTION, {_init: function(can, target) { }, target.click() }, clear: function(can, target) { return can.page.Modify(can, target||can._output, ""), target }, - filter: function(can, value, target) { target = target||can._output + filter: function(can, value, target) { target = target||can.ui.content||can._output can.onmotion.delayOnce(can, function() { - var count = can.page.Select(can, can._output, html.TR, function(tr, index) { + var count = can.page.Select(can, target, 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) { + count += can.page.SelectChild(can, target, 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") diff --git a/index.css b/index.css index 07f13656..cd4803c0 100644 --- a/index.css +++ b/index.css @@ -160,6 +160,7 @@ ol, ul { margin-left:var(--title-margin); } p { margin:var(--title-margin) 0; } kbd { padding:0 var(--input-padding); } img.qrcode { width:var(--qrcode-width); } +body.mobile fieldset>div.status { display:none; } /* output style */ div.title>div.status { line-height:20px; display:flex; } div.title>div.status>div.item { font-size:var(--status-font-size); font-weight:normal; white-space:pre; padding:0 var(--input-padding); display:flex; float:left; } @@ -191,8 +192,6 @@ div.output>div.code>div.form { text-align:center; font-size:15px; padding:60px 1 div.output>div.code>div.form>input[type=button] { min-width:200px; } div.output>div.code>div.form>input[type=button][name=confirm] { background-color:var(--notice-bg-color); color:var(--notice-fg-color); margin:var(--button-margin) 0; } body.en span[lang^=zh] { display:none; } body.zh span[lang^=en] { display:none; } - -// fieldset.plugin.cmd { display:flex; flex-wrap:wrap; justify-content:space-between; } fieldset.plugin.cmd:not(.output)>form.option { float:left; display:flex !important; } fieldset.plugin.cmd:not(.output)>div.action { float:left; display:flex !important; flex-grow:1; height:var(--action-height); overflow:auto; } fieldset.plugin.cmd:not(.output)>div.action div.tabs:last-child { margin-right:var(--button-margin); } @@ -209,14 +208,14 @@ div.project div.action div.item input:hover { border-right:var(--box-notice); } div.project div.action div.item.icons input { display:none; } div.project div.action div.item.icons { background-color:var(--plugin-bg-color); padding:0; } div.project div.list { margin-left:var(--button-margin); clear:both; } -body.width6 fieldset.plugin>div.output>div.project div.list { margin-left:var(--legend-margin); } div.project div.list { border-left:var(--disable-fg-color) dashed 1px; } -fieldset.inner>div.output>div.project div.list { border-left:none; } div.project div.list fieldset { position:static; } div.project div.item.select { border-right:var(--box-notice3); } +fieldset.inner>div.output>div.project div.list { border-left:none; } fieldset.vimer>div.output>div.project div.item.select { border-right:var(--box-border3); } fieldset.vimer.normal>div.output>div.project div.item.select { border-right:var(--box-notice3); } fieldset.vimer.insert>div.output>div.project div.item.select { border-right:var(--box-danger3); } +body.width6 fieldset.plugin>div.output>div.project div.list { margin-left:var(--legend-margin); } div.project div.item:not(.hide)>i:first-child { margin-right:var(--input-margin); } div.project div.item:not(.hide) { white-space:pre; line-height:24px; cursor:pointer; @@ -253,7 +252,6 @@ div.item.open>i.bi-chevron-down { rotate:-180deg; transition:all .3s; } div.item.text.trans input:not([type=button]) { transition:all 1s; } div.item.text.trans input:not([type=button]):focus { width:var(--river-width); transition:all .5s; } div.toggle { background-color:var(--hover-bg-color); color:var(--hover-fg-color); font-size:var(--action-height); padding-top:38px; height:120px; position:absolute; } -// div.toggle:hover { background-color:var(--hover-bg-color); color:var(--panel-hover-fg-color); } div.toggle.project { top:20%; left:0; border-top-right-radius:var(--plugin-radius); border-bottom-right-radius:var(--plugin-radius); } div.content>div.toggle.profile { top:20%; right:0; border-top-left-radius:var(--plugin-radius); border-bottom-left-radius:var(--plugin-radius); } div.content>div.toggle.display { left:20%; bottom:-52px; rotate:90deg; border-top-left-radius:var(--plugin-radius); border-bottom-left-radius:var(--plugin-radius); } @@ -565,7 +563,6 @@ fieldset>form.option div.item.button { border-radius:var(--button-radius); } fieldset>div.action div.item.button { border-radius:var(--button-radius); } fieldset>div.action div.item.button:last-child { margin-right:var(--button-margin); } fieldset.input.date.float>div.action div.item.button:last-child { margin-right:0; } -// fieldset>div.action div.item.select:not(.button) { border-bottom:var(--box-notice3); } fieldset>div.action div.item:not(.state) { box-shadow:var(--input-box-shadow); } fieldset>div.action>div.tabs:not(.state).select { box-shadow:var(--legend-box-shadow); } fieldset>div.action>div.cmds:not(.state) { box-shadow:var(--legend-box-shadow); } @@ -582,8 +579,8 @@ table.content th.select { border:var(--box-notice); } table.content.action td:last-child { box-shadow:var(--th-box-shadow); } table.content.detail tr.action td { box-shadow:var(--th-box-shadow); } div.project:not(.toggle) { border-right:var(--box-border); overflow-x:hidden; } -div.profile:not(.toggle) { border-left:var(--box-border); } -div.display:not(.toggle) { border-top:var(--box-border); } +div.layout>div.profile:not(.toggle) { border-left:var(--box-border); } +div.layout>div.display:not(.toggle) { border-top:var(--box-border); } body.mobile fieldset>legend { box-shadow:none; } body.mobile fieldset.plugin>legend>span { display:block; float:right; } body:not(.mobile) fieldset.plugin>div.action div.item:first-child { margin-left:var(--button-margin); } @@ -594,7 +591,6 @@ body { font-family:var(--body-font-family); } legend { font-family:var(--legend-font-family); font-style:italic; } input { font-family:var(--input-font-family); } kbd { font-family:var(--code-font-family); line-height:var(--code-line-height); } -// kbd:hover { background-color:var(--hover-bg-color); } kbd:hover { background-color:var(--notice-bg-color); color:var(--notice-fg-color); } table.content { font-family:var(--table-font-family); } table.content th { font-family:var(--input-font-family); font-style:italic; } @@ -627,13 +623,11 @@ fieldset>form.option>div.item.text.cmd>input { width:100%; } fieldset>form.option>div.item.select>input { min-width:var(--button-width); } fieldset>form.option>div.item.textarea { height:var(--textarea-height); width:100%; } fieldset>div.action div.item.filter input { padding-left:24px; } -fieldset>div.action div.item.state.filter input { width:120px; transition:all 0.8s; } +body:not(.mobile) fieldset>div.action div.item.state.filter input { width:120px; transition:all 0.8s; } fieldset>div.action div.item.state.filter input:focus { width:240px; transition:all 0.5s; } fieldset>div.action div.item { height:var(--action-height); } fieldset>div.action>div.tabs { font-style:italic; padding:var(--input-padding) var(--button-padding); height:var(--action-height); } -fieldset>div.action>div.cmds { font-style:italic; padding:var(--input-padding) var(--button-padding); height:var(--action-height); - min-width:60px; text-align:center; justify-content:center; align-items:center; -} +fieldset>div.action>div.cmds { font-style:italic; padding:var(--input-padding) var(--button-padding); height:var(--action-height); min-width:60px; text-align:center; justify-content:center; align-items:center; } fieldset>div.output>div.code { font-size:var(--code-font-size); } fieldset>div.output { width:100%; } fieldset>div.status { width:100%; } fieldset>div.status { font-family:var(--status-font-family); font-style:italic; font-size:var(--status-font-size); line-height:20px; max-height:var(--action-height); } @@ -692,9 +686,9 @@ div.item.button.create { display:flex; align-items:flex-start; } div.item.button.insert { display:flex; align-items:flex-start; } div.item.button.refresh { display:flex; align-items:flex-start; } div.item.button.create>span.icon { font-size:28px; line-height:26px; height:var(--action-height); } -body.windows div.item.button.create>span.icon { line-height:28px; } div.item.button.insert>span.icon { font-size:28px; line-height:26px; height:var(--action-height); } div.item.button.refresh>span.icon { font-size:28px; line-height:26px; height:var(--action-height); } +body.windows div.item.button.create>span.icon { line-height:28px; } body.windows div.item.button.refresh>span.icon { font-size:22px; line-height:30px; } div.item.button._space.icons { flex-grow:1; min-width:var(--button-margin); } div.item.button._space.icons:hover { background-color:unset; cursor:unset; } @@ -828,10 +822,12 @@ body.print div.float { background-color:snow; } body.print fieldset.draw div.output { background-color:lightgray; } body.print fieldset.draw div.output div.content svg { background-color:lightgray; } /* misc */ -body.mobile fieldset.float form.option div.item.text { display:none; } +fieldset.desktop { border:0; } fieldset.Action>div.output>fieldset.ssh.cloud.profile { box-shadow:none; background-color:transparent; } fieldset.Action>div.output>fieldset.ssh.cloud.profile:hover { box-shadow:none; } fieldset.Action>div.output>fieldset.ssh.cloud.profile>div.output { background-color:transparent; } +div.upload.float div.action>div.item.close input { display:none; } +body.mobile fieldset.float form.option div.item.text { display:none; } body:not(.cmd) fieldset.Action>div.output>fieldset.plugin>legend { border-top:var(--box-notice3); border-top-left-radius:0; } body:not(.cmd) fieldset.Action>div.output>fieldset.plugin>legend:not(:hover) { background-color:var(--output-bg-color); } fieldset.Action:not(.horizon):not(.grid)>fieldset.plugin>form.option>div.item.text.path>input { width:var(--project-width); } @@ -955,9 +951,6 @@ body.width6 fieldset.plugin.trans>form.option>div.item.text>input { width:var(-- body.width6 fieldset.story.xterm>form.option>div.item.hash input { width:var(--form-width); } body.width6 fieldset.desktop>div.output>div.desktop>fieldset.web.chat.iframe>form.option>div.item.hash>input { width:var(--river-width); } body.width2 fieldset.desktop>div.output>div.desktop>fieldset>form.option>div.item:last-child { margin-right:0; } -fieldset.desktop { border:0; } -// fieldset.desktop>div.action { color:var(--disable-fg-color); } -// fieldset.desktop>div.status { color:var(--disable-fg-color); } body.mobile fieldset.word:not(.cmd)>form.option>div.item>input[name=path] { width:180px; } body.mobile fieldset.word fieldset.inner>form.option input[type=text] { display:none; } body.mobile fieldset.vimer>form.option div.item.path input { width:var(--input-width); } diff --git a/lib/page.js b/lib/page.js index 3ac3ac51..cbfaed37 100644 --- a/lib/page.js +++ b/lib/page.js @@ -55,7 +55,9 @@ Volcanos("page", { case html.INNER: data.innerHTML = item.inner; break default: can.base.isUndefined(item[key]) || (data[key] = item[key]) } }) - if (item.view) { var list = can.core.List(item.view); if (can.base.isArray(list[0])) { list[0] = list[0].join(lex.SP) } + if (item.view) { var list = can.core.List(item.view); if (can.base.isArray(list[0])) { + list[0] = can.base.replaceAll(can.core.List(list[0], function(v) { return v }).join(lex.SP), ".", " ") + } list[0] && can.page.ClassList.add(can, data, list[0]), type = list[1]||type, data.innerHTML = list[2]||data.innerHTML||"", name = list[3]||name } else if (item.text) { var list = can.core.List(item.text); if (can.base.isArray(list[2])) { list[2] = list[2].join(lex.SP) } data.innerHTML = list[0]||data.innerHTML||"", type = list[1]||item.type||html.SPAN, list[2] && can.page.ClassList.add(can, data, list[2]) diff --git a/lib/user.js b/lib/user.js index 16398cc5..011e6497 100644 --- a/lib/user.js +++ b/lib/user.js @@ -90,7 +90,7 @@ Volcanos("user", { meta.title = meta.title||can.core.Keys(can.ConfSpace(), can.ConfIndex())||can._name.split(nfs.PS).slice(-2).join(nfs.PS) meta.hash && can.misc.isDebug(can) && (meta.title += " "+meta.hash.slice(0, 6)), meta.action = meta.action||[""] var width = meta.width||(html.QRCODE_WIDTH+2*html.PLUGIN_PADDING+10); if (width < 0) { width = can.page.width() + width } - var ui = can.page.Append(can, meta.action.list || meta.action.length > 1 || !can._root || !can._root.Action || !can._root.Action._toast ? document.body: can._root.Action._toast, [{view: [[chat.TOAST, meta.style, chat.FLOAT]], style: {width: width}, list: [ + var ui = can.page.Append(can, meta.action.list || meta.action.length > 1 || !can._root || !can._root.Action || !can._root.Action._toast ? document.body: can._root.Action._toast, [{view: [[chat.TOAST, can.Conf(ctx.INDEX)||can.ConfIndex(), meta.style, chat.FLOAT]], style: {width: width}, list: [ {view: [wiki.TITLE, "", meta.title||""], title: "点击复制", onclick: function(event) { can.user.copy(event, can, meta.title) }}, {view: [cli.CLOSE, "", can.page.unicode.close], title: "点击关闭", onclick: function() { action.close() }}, {view: "duration", title: "点击关闭", onclick: function() { action.close() }}, @@ -107,7 +107,7 @@ Volcanos("user", { }, 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) { - event && event.isTrusted && can.onengine.signal(can, "onevent", can.request(event)) + event && event.isTrusted && can.onengine.signal(can, "onevent", can.request(event, {_type: "close"})) 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) { @@ -150,13 +150,15 @@ 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.onengine.signal(can, "onevent", can.request(event, {_type: html.ACTION})); (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) }) } var isinput = can.page.tagis(event.target, html.INPUT) - var ui = can.page.Append(can, document.body, [{view: [[chat.CARTE, meta._style||msg.Option("_style")||can.base.replaceAll(can.ConfIndex()||"", nfs.PT, lex.SP)||"", chat.FLOAT]], list: can.core.List(list, function(item, index) { + var ui = can.page.Append(can, document.body, [{view: [[chat.CARTE, + can.Conf(ctx.INDEX)||can.ConfIndex(), msg.Option(ctx.ACTION), meta._style||msg.Option("_style"), + chat.FLOAT]], list: can.core.List(list, function(item, index) { if (typeof item == code.FUNCTION) { item = item(can); if (!item) { return } } if (item === "") { return {type: html.HR} } if (item == web.FILTER) { return { @@ -195,7 +197,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(ctx.ACTION), msg.Option(mdb.TYPE), [chat.FLOAT])], list: [ + var ui = can.page.Append(can, document.body, [{view: [[html.INPUT, can.Conf(ctx.INDEX)||can.ConfIndex(), 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 @@ -220,7 +222,6 @@ 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||"" @@ -231,9 +232,8 @@ Volcanos("user", { }, _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)) - } + target.onfocus = target.onfocus||function(event) { can.onengine.signal(can, "onevent", can.request(event)) } + var onclick = target.onclick; target.onclick = function(event) { can.onengine.signal(can, "onevent", can.request(event, {_type: target.name})), onclick && onclick(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) @@ -249,7 +249,7 @@ Volcanos("user", { }) }, upload: function(event, can, cb, silent) { var begin = new Date() - var ui = can.page.Append(can, document.body, [{view: [[html.UPLOAD, chat.FLOAT]], list: [ + var ui = can.page.Append(can, document.body, [{view: [[html.UPLOAD, can.Conf(ctx.INDEX)||can.ConfIndex(), chat.FLOAT]], list: [ html.ACTION, {view: html.OUTPUT, list: ["progress"]}, {view: html.STATUS, list: [html.SHOW, cli.COST, nfs.SIZE]}, ]}]); can.onlayout.figure(event, can, ui._target) var action = can.onappend._action(can, [{type: html.UPLOAD, onchange: function(event) { action.show(event, 0, event.target.files[0].size, 0) }}, {type: html.BUTTON, name: cli.CLOSE}], ui.action, { diff --git a/panel/footer.css b/panel/footer.css index 05eb96e0..14c8d722 100644 --- a/panel/footer.css +++ b/panel/footer.css @@ -17,7 +17,15 @@ body.mobile fieldset.Footer>div.output { font-style:italic; height:var(--footer- body.mobile fieldset.Footer>div.output div.toast { display:none; } body.mobile fieldset.Footer>div.output div.cmd { display:none; } -.picker { box-shadow:var(--notice-bg-color) 0px 0px 20px 5px !important; position:relative; left:-5px; top: -5px; transition:all 0.5s; background-color:blue !important; color:white !important; } +.picker { + box-shadow:var(--notice-bg-color) 0px 0px 20px 5px !important; + background-color:var(--notice-bg-color) !important; color:white !important; + position:relative; left:-5px; top: -5px; transition:all 0.5s; +} +.picker.danger { + box-shadow:var(--danger-bg-color) 0px 0px 20px 5px !important; + background-color:var(--danger-bg-color) !important; color:white !important; +} div.view span.string { color:#f29766; } div.view span.keyword { color:#5cadd4; } div.item:not(.string):not(.number):not(.boolean)>span.value { color:var(--disable-fg-color); font-style:italic; } diff --git a/panel/footer.js b/panel/footer.js index f82d6315..a0537649 100644 --- a/panel/footer.js +++ b/panel/footer.js @@ -39,9 +39,8 @@ 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 + tutor: function(event, can, type, text) { if (can.base.isIn(type, "keyup", "keydown")) { return } + !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+"")+"" }) }, @@ -70,7 +69,8 @@ Volcanos(chat.ONACTION, {_init: function(can) {}, ontheme: function(event, can, theme) { can.onimport.tutor(event, can, chat.THEME, theme) }, onevent: function(event, can, query) { var msg = can.request(event) - can.onimport.tutor(event, can, msg.Option(mdb.TYPE)||event.type, query||can.page.getquery(can, event.currentTarget||event.target)) }, + can.onimport.tutor(event, can, msg.Option("_type")||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) }, diff --git a/panel/search.js b/panel/search.js index 36ca820c..ee323959 100644 --- a/panel/search.js +++ b/panel/search.js @@ -63,9 +63,8 @@ Volcanos(chat.ONACTION, {_init: function(can) { can.onmotion.hidden(can) }, list sub.onimport.size(sub, can.ConfHeight(), can.ConfWidth()-1, true) }, can.ui.profile) } if (data.ctx == ice.NFS && data.cmd == nfs.PACK) { var ls = can.misc.SplitPath(can, data.text) - can.runAction(event, ctx.RUN, [web.CODE_VIMER, ctx.ACTION, mdb.RENDER, data.type, ls[1], ls[0]], function(msg) { msg.Table(function(meta) { - plugin(meta) - }), can.onappend.board(can, msg.Result(), can.ui.profile) }) + can.runAction(event, ctx.RUN, [web.CODE_VIMER, ctx.ACTION, mdb.RENDER, data.type, ls[1], ls[0]], function(msg) { + msg.Table(function(meta) { plugin(meta) }), can.onappend.board(can, msg.Result(), can.ui.profile) }) } else { plugin(meta) } diff --git a/plugin/local/code/inner.css b/plugin/local/code/inner.css index 344b22bf..427d9719 100644 --- a/plugin/local/code/inner.css +++ b/plugin/local/code/inner.css @@ -48,10 +48,10 @@ fieldset.inner.cmd>div.output>div.layout>div.tabs>div { height:var(--code-tabs-h fieldset.inner.cmd>div.output>div.layout>div.tabs>div.icon>div.icon { font-size:26px; line-height:32px; padding:2px 5px; position:sticky; top:0; } fieldset.inner.cmd>div.output>div.layout>div.tabs>div.tabs { justify-content:flex-start; flex-grow:1; flex-wrap:wrap; overflow:auto; } fieldset.inner.cmd>div.output>div.layout>div.tabs>div.tabs:hover { background-color:unset; } -fieldset.inner.cmd>div.output>div.layout>div.tabs>div.tabs>div.tabs { padding:var(--input-padding) var(--button-padding); height:var(--code-tabs-height); display:flex; align-items:center; } +fieldset.inner.cmd>div.output>div.layout>div.tabs>div.tabs>div.tabs { padding:var(--input-padding) var(--button-padding); margin-right:var(--button-margin); height:var(--code-tabs-height); display:flex; align-items:center; } fieldset.inner.cmd>div.output>div.layout>div.tabs>div.head { flex-direction:row-reverse; } fieldset.inner.cmd>div.output>div.layout>div.tabs>div.head>div { white-space:pre; padding:0 var(--input-padding); height:var(--code-tabs-height); display:flex; align-items:center; } -fieldset.inner.cmd>div.output>div.layout>div.tabs>div.head>div.online { margin-left:0 !important; margin-right:0 !important; } +fieldset.inner.cmd>div.output>div.layout>div.tabs>div.head>div.online { margin-left:0 !important; margin-right:0 !important; flex-direction: row-reverse; } fieldset.inner.cmd>div.output>div.layout>div.tabs>div.head>div.online img { height:24px; } fieldset.inner.cmd>div.output>div.layout>div.tabs>div.head>div.avatar { padding:0; } fieldset.inner.cmd>div.output>div.layout>div.tabs>div.head>div.avatar>img { height:32px; clip-path:circle(40%); } diff --git a/plugin/local/code/inner.js b/plugin/local/code/inner.js index 6d5fe16d..e9e3b116 100644 --- a/plugin/local/code/inner.js +++ b/plugin/local/code/inner.js @@ -10,7 +10,6 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { var paths = can.core.Sp if (can.Mode() == ice.MSG_RESULT) { msg.result = msg.result||[can._output.innerHTML], can.Mode(chat.SIMPLE), can.sup.Mode(chat.SIMPLE) } can.core.List(paths.concat(can.core.Split(msg.Option(nfs.REPOS))), function(p) { if (can.base.beginWith(p, nfs.USR_LOCAL_WORK, "C:/") || can.base.endWith(p, "-dict/") || can.base.isIn(p, - // nfs.USR_INTSHELL, nfs.USR_WEBSOCKET, nfs.USR_GO_QRCODE, nfs.USR_GO_GIT, nfs.USR_ICONS, nfs.USR_GEOAREA, nfs.USR_PROGRAM, nfs.USR_NODE_MODULES, )) { return } if (p && paths.indexOf(p) == -1 && p[0] != nfs.PS) { paths.push(p) } @@ -127,7 +126,6 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { var paths = can.core.Sp }}]) }, _tabIcon: function(can) { - // can.user.isWindows || can.page.Append(can, can.ui.path, can.core.Item({ "\u271A": shy({transform: "translate(0 2px)"}, function(event) { can.onaction.open(event, can, "open") }), "\u2756": shy({}, function(event) { can.onaction.plug(event, can, "plug") }), @@ -299,7 +297,6 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { var paths = can.core.Sp can.page.style(can, can.ui.tabs.parentNode, html.WIDTH, can.ui.path.offsetWidth) can.page.style(can, can.ui.display, html.WIDTH, can.ui.path.offsetWidth) can.page.style(can, can.ui.display.parentNode, html.WIDTH, can.ui.path.offsetWidth) - // can.ui.zone.source._layout(), can.ui.zone[can.Option(nfs.PATH)] && can.ui.zone[can.Option(nfs.PATH)]._layout() } can.page.SelectChild(can, can.ui.project, html.DIV_ZONE, function(target, index, list) { can.page.SelectChild(can, target, html.DIV_ITEM, function(target) { @@ -517,8 +514,7 @@ Volcanos(chat.ONSYNTAX, {_init: function(can, msg, cb) { if (!msg) { return } }) }, }) -Volcanos(chat.ONACTION, { - _trans: {show: "预览", exec: "展示"}, +Volcanos(chat.ONACTION, {_trans: {show: "预览", exec: "执行"}, _getLine: function(can, line) { return can.page.Select(can, can.ui.content, "tr.line>td.line", function(td, index) { if (td.parentNode == line || index+1 == line) { return td.parentNode } })[0] }, _getContent: function(can, line) { can.ui.content = line.parentNode, can._msg = can.ui.content._msg, can.Option(nfs.PATH, can._msg.Option(nfs.PATH)), can.Option(nfs.FILE, can._msg.Option(nfs.FILE)) @@ -648,7 +644,6 @@ Volcanos(chat.ONACTION, { }, }) Volcanos(chat.ONEXPORT, { - // list: [mdb.TIME, nfs.FILE, nfs.LINE, ice.BACK], path: function(can) { return can.Option(nfs.PATH)+can.Option(nfs.FILE) }, line: function(can, line) { return parseInt(can.core.Value(can.page.SelectOne(can, line, "td.line"), "innerText")) }, text: function(can, line) { return can.core.Value(can.page.SelectOne(can, line, "td.text"), "innerText") }, diff --git a/plugin/local/code/inner/search.js b/plugin/local/code/inner/search.js index f1805542..75fea40f 100644 --- a/plugin/local/code/inner/search.js +++ b/plugin/local/code/inner/search.js @@ -1,8 +1,9 @@ Volcanos(chat.ONIMPORT, { - list: ["value", "filter", "close:button"], - _init: function(can, msg) { - msg.Defer(function() { can.onappend.scroll(can, can._output) }) + list: [mdb.VALUE, "close:button"], + _init: function(can, msg) { msg.Defer(function() { can.onappend.scroll(can, can._output) }) can.onappend.table(can, msg), can.onappend.board(can, msg), can.onmotion.highlight(can, can.Option(mdb.VALUE, msg.Option(mdb.VALUE))) - can.page.Select(can, can._option, "input[name=filter]", function(target) { target.onkeyup = function(event) { can.onmotion.highlight(can, target.value) } }) + can.page.Select(can, can._option, "input[name=value]", function(target) { + can.onmotion.hidden(can, target) + }) }, })