diff --git a/frame.js b/frame.js index 7dcc59c3..ca99da92 100644 --- a/frame.js +++ b/frame.js @@ -115,8 +115,7 @@ Volcanos(chat.ONDAEMON, {_init: function(can, name, type, cbs) { if (can.user.is can.core.CallFunc(can.core.Value(can, arg[0]), kit.Dict({can: can}, arg.slice(1))) }, input: function(can, msg, sub, arg) { can.page.Select(can, sub._target, "input:focus", function(target) { target.value += arg[0] }) }, - online: function(can, sub) { debugger }, - _online: function(can, delay) { can.onmotion.delay(can, function() { can = can._fields? can.sup: can + _online: function(can, delay) { false && can.onmotion.delay(can, function() { can = can._fields? can.sup: can if (can.ui._online) { return } can.ui._online = true if (!can.ui.online) { if (can.isCmdMode()) { @@ -160,7 +159,9 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { value && (value = can.user.trans(sub, value, null, html.INPUT)) 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] }, + 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||{}, 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()) @@ -985,15 +986,17 @@ Volcanos(chat.ONMOTION, {_init: function(can, target) { }, }, scrollHold: function(can, cb, target) { target = target || can._output; var left = target.scrollLeft; cb(), target.scrollLeft = left }, - scrollIntoView: function(can, target, margin) { if (!target || !target.parentNode || can._scroll) { return } can._scroll = true, margin = margin||0 - var offset = (target.offsetTop-margin) - target.parentNode.scrollTop, step = offset < 0? -20: 20 + scrollIntoView: function(can, target, margin, parent) { + parent = parent||target.parentNode + if (parent._scroll) { return } parent._scroll = true, margin = margin||0 + var offset = (target.offsetTop-margin) - parent.scrollTop, step = offset < 0? -20: 20 if (Math.abs(offset) > 3000) { - return target.parentNode.scrollTop = (target.offsetTop-margin), delete(can._scroll) + return parent.scrollTop = (target.offsetTop-margin), delete(can._scroll) } can.core.Timer({interval: 10, length: offset/step}, function() { - target.parentNode.scrollTop += step + parent.scrollTop += step }, function() { - target.parentNode.scrollTop = (target.offsetTop-margin), delete(can._scroll) + parent.scrollTop = (target.offsetTop-margin), delete(can._scroll) }) }, clearFloat: function(can) { diff --git a/index.css b/index.css index 20c590c5..61a7f07b 100644 --- a/index.css +++ b/index.css @@ -83,7 +83,7 @@ body { --input-font-family:var(--code-font-family); --table-font-family:var(--code-font-family); --svg-font-family:var(--code-font-family); --body-font-size:14px; --legend-font-size:18px; --status-font-size:12px; - --code-font-size:14px; --code-line-height:20px; --code-tabs-height:38px; + --code-font-size:14px; --code-line-height:20px; --code-tabs-height:43px; --icon-font-size:var(--legend-font-size); --svg-font-size:24px; --svg-stroke-width:1; } body.web.code.vimer.cmd { --code-line-height:24px; } @@ -239,8 +239,11 @@ div.project div.zone>div.item span:hover { background-color:var(--hover-bg-color div.project>div.zone>div.item span:first-child { font-style:italic; font-weight:bold; line-height:var(--action-height); } div.project div.zone>div.item span:first-child { flex-grow:1; } div.project div.zone>div.item span.icon { letter-spacing:0; font-size:22px !important; padding:0 var(--input-padding); display:none; } -div.project div.zone>div.item span.icon.refresh { margin-top:-2px; } -div.project div.zone:hover>div.item span.icon { display:block; } +div.project div.zone>div.item i { position:unset } +div.project div.zone:hover>div.item span.icon { display:block; height:24px; line-height:24px; } +div.project div.zone:hover>div.item span.icon.refresh { line-height:22px; } +div.project div.zone:hover>div.item span.icon.menu { line-height:22px; } +div.project div.zone>div.item { display:flex; } div.project div.zone>div.list>div.zone>div.item { text-align:left; padding-left:var(--button-padding); transition:all .5s; } div.project div.zone>div.list>div.zone>div.item:hover { margin-left:var(--button-margin); transition:all .3s; } div.item>i.bi-chevron-down { float:right; transition:all .5s; } @@ -372,12 +375,11 @@ body>div.input input[name=cancel] { border:var(--box-danger); } body>div.input input[name=submit] { border:var(--box-notice); } body>div.input input[name=submit]:hover { background-color:var(--notice-bg-color); color:var(--notice-fg-color); } body>div.input input[name=cancel]:hover { background-color:var(--danger-bg-color); color:var(--danger-fg-color); } -body>div.input div.action { padding:var(--table-padding); width:100%; position:sticky; bottom:0; flex-direction:row-reverse; } -body>div.input.login div.action { padding:0; } +body>div.input div.action { padding:var(--table-padding); width:100%; position:sticky; bottom:0; flex-direction:row-reverse; cursor:move; } body>div.input div.action>div.item { margin-left:var(--button-margin); float:right; } body>div.input div.action>div.item>input[type=button] { width:112px; } body>div.input.login { flex-direction:column; } -body>div.input.login>div.action { border-bottom:var(--box-border); flex-direction:row; } +body>div.input.login>div.action { border-bottom:var(--box-border); padding:0; flex-direction:row; } body>div.input.login>div.action>div.tabs { padding:var(--button-padding); } body>div.input.login>div.action>div.tabs.select { color:unset; } body>div.input.login>div.output { text-align:center; min-height:var(--qrcode-height); min-width:var(--iframe-height); overflow:hidden; clear:both; } @@ -857,7 +859,6 @@ fieldset.inner>div.output>div.project div.item.modify { background-color:#008000 fieldset.vimer>div.output>div.project div.item.modify { background-color:#00800036; } fieldset.vimer>div.output>div.project>div.zone.space div.item.stop { color:var(--disable-fg-color); } fieldset.vimer>div.output>div.project>div.zone.space fieldset>div.output>div.item { height:42px; } -fieldset.vimer>div.output>div.project>div.zone.space fieldset>div.output>div.item.select { border-left:var(--box-notice3); } fieldset.xterm>div.action>div.tabs:only-child { display:none; } fieldset.xterm>div.layout { clear:both; } fieldset.xterm>form.option>div.item.args1 { display:none; } @@ -931,9 +932,10 @@ fieldset.studio>div.output>fieldset.story { margin:var(--plugin-margin); } fieldset.studio>div.output>fieldset.story:not(.select) { display:none; } fieldset.studio>div.output>fieldset.story>form.option div.icon.delete { display:none; } fieldset.plug>div.output table.content { width:100%; } -fieldset.plug.dream.zone>div.output>div.item { display:flex; padding:var(--input-padding); margin:var(--input-margin); } +fieldset.plug.dream.zone>div.output>div.item { display:flex; padding:var(--input-padding); } fieldset.plug.dream.zone>div.output>div.item>img { margin-right:var(--input-margin); } fieldset.plug.dream.zone>div.output>div.item>span { line-height:var(--action-height); } +fieldset.plug.dream.zone>div.output>div.item.origin.select { border-right:var(--box-danger3); } fieldset.cmd>div.item.state { line-height:22px; padding:var(--input-padding) var(--button-padding); float:right; } fieldset.cmd>div.item.avatar { padding:0; height:var(--action-height); } fieldset.cmd>div.item.avatar>img { height:var(--action-height); } diff --git a/lib/page.js b/lib/page.js index cbfaed37..68f1feb9 100644 --- a/lib/page.js +++ b/lib/page.js @@ -304,6 +304,7 @@ Volcanos("page", { }, tagClass: function(target) { return target.tagName.toLowerCase()+(target.className? nfs.PT+target.className.replaceAll(lex.SP, nfs.PT): "") }, isDisplay: function(target) { return target && target.style.display != html.NONE && target.className.indexOf(html.HIDE) == -1 }, + isSelect: function(target) { return target && target.className.indexOf(html.SELECT) > -1 }, isIconInput: function(can, name) { return can.base.isIn(name, mdb.CREATE, mdb.INSERT, mdb.PRUNES, mdb.PRUNE, ice.HELP, cli.START, cli.CLOSE, web.REFRESH) || icon[name] || can.Conf("feature._icons."+name) || can.core.Value(can.onaction, ["_trans.icons", name]) }, diff --git a/lib/user.js b/lib/user.js index 011e6497..eae5fc3e 100644 --- a/lib/user.js +++ b/lib/user.js @@ -147,7 +147,10 @@ Volcanos("user", { }, carte: function(event, can, meta, list, cb, parent, trans) { var msg = can.request(event); event = msg._event function remove_sub(carte) { carte._sub && can.page.Remove(can, carte._sub._target), delete(carte._sub) } parent? remove_sub(parent): can.onmotion.clearCarte(can) - 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 } + meta = meta||can.ondetail||can.onaction||{}, list = can.base.getValid(list, meta.list, can.core.Item(meta, function(key) { + if (can.base.beginWith(key, "_")) { return } + return key + })), 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, {_type: html.ACTION})); diff --git a/plugin/local/code/inner.css b/plugin/local/code/inner.css index b6b20558..4c847617 100644 --- a/plugin/local/code/inner.css +++ b/plugin/local/code/inner.css @@ -1,42 +1,26 @@ -fieldset.inner>div.output { justify-content:flex-start; } fieldset.inner>div.output div.content td.text { height:var(--code-line-height); } -fieldset.inner>div.output div.content td.text span.comment { color:var(--code-comment); } fieldset.inner>div.output div.content td.text span.keyword { color:var(--code-keyword); box-shadow:var(--keyword-box-shadow); } +fieldset.inner>div.output div.content td.text span.comment { color:var(--code-comment); } fieldset.inner>div.output div.content td.text span.function { color:var(--code-function); } fieldset.inner>div.output div.content td.text span.constant { color:var(--code-constant); } fieldset.inner>div.output div.content td.text span.string { color:var(--code-string); box-shadow:var(--keyword-box-shadow); } -fieldset.inner>div.output div.content td.text span.object { color:var(--code-object); } -fieldset.inner>div.output div.content td.text span.datatype { color:var(--code-datatype); } fieldset.inner>div.output div.content td.text span.package { color:var(--code-package); } +fieldset.inner>div.output div.content td.text span.datatype { color:var(--code-datatype); } +fieldset.inner>div.output div.content td.text span.object { color:var(--code-object); } fieldset.inner>div.output>div.project { font-family:var(--code-font-family); } fieldset.inner>div.output>div.project div.list { border-left:none; } fieldset.inner>div.output>div.project div.item.select:not(:hover) { background-color:unset; } -fieldset.inner:not(.vimer)>div.output>div.project div.expand.open { color:var(--notice-bg-color); } -fieldset.inner>div.output>div.project div.zone div.action:not(.hide) { width:100%; } -fieldset.inner>div.output>div.project div.zone div.action>div.item { padding-right:0; width:100%; overflow:hidden; } -fieldset.inner>div.output>div.project div.zone div.action>div.item>input { padding-left:25px; width:100%; } -fieldset.inner>div.output>div.project div.zone.space>div.list div.output>div.item:hover { background-color:var(--hover-bg-color); } -fieldset.inner>div.output>div.layout>div.tabs { font-size:var(--code-font-size); display:none; } -fieldset.inner>div.output>div.layout>div.tabs>div:hover { background-color:unset; color:unset; box-shadow:unset; } -fieldset.inner>div.output>div.layout>div.tabs>div.tabs>div.tabs { padding-right:0; } -fieldset.inner>div.output>div.layout>div.tabs>div.tabs>div.tabs.select { background-color:var(--output-bg-color); color:unset; border-top:var(--box-notice3); box-shadow:var(--legend-box-shadow);} -fieldset.vimer>div.output.source>div.layout>div.tabs>div.tabs>div.tabs.select { border-top:var(--box-border3); } -fieldset.vimer>div.output.source.normal>div.layout>div.tabs>div.tabs>div.tabs.select { border-top:var(--box-notice3); } -fieldset.vimer>div.output.source.insert>div.layout>div.tabs>div.tabs>div.tabs.select { border-top:var(--box-danger3); } fieldset.inner>div.output>div.layout>div.tabs>div.tabs>div.tabs { border-top:var(--box-border3); border-top-color:transparent; } -fieldset.inner>div.output>div.layout>div.tabs>div.tabs>div.tabs:hover { background-color:var(--output-bg-color); color:unset; box-shadow:var(--legend-box-shadow); } +fieldset.inner>div.output>div.layout>div.tabs>div.tabs>div.tabs.select { box-shadow:var(--legend-box-shadow); background-color:var(--output-bg-color); border-top:var(--box-notice3); } +fieldset.inner>div.output>div.layout>div.tabs>div.tabs>div.tabs:hover { box-shadow:var(--legend-box-shadow); background-color:var(--output-bg-color); } fieldset.inner>div.output>div.layout>div.path { font-size:var(--code-font-size); display:none; } -fieldset.inner.cmd>div.output>div.layout>div.path:not(.hide) { display:flex; } fieldset.inner>div.output>div.layout>div.path:not(.hide) { box-shadow:var(--legend-box-shadow); font-style:italic; cursor:pointer; justify-content:flex-start; align-items:center; } -fieldset.inner>div.output>div.layout>div.path>a { padding:var(--input-padding) var(--button-padding); } +fieldset.inner>div.output>div.layout>div.path>a { padding:var(--input-padding); } fieldset.inner>div.output>div.layout>div.path>a:hover { background-color:var(--hover-bg-color); } fieldset.inner>div.output>div.layout>div.path>span { padding:var(--input-padding); white-space:pre; } fieldset.inner>div.output>div.layout>div.path>span:hover { background-color:var(--hover-bg-color); } -fieldset.inner>div.output>div.layout>div.path span.func { padding:var(--input-padding); } -fieldset.inner>div.output>div.layout>div.path span.mode { padding:var(--input-padding); } -fieldset.inner>div.output>div.layout>div.path span._space { flex-grow:1; } -fieldset.inner>div.output>div.layout>div.path span._space:hover { background-color:unset; cursor:normal; } -fieldset.inner>div.output>div.layout>div.path span.view { font-size:22px; font-style:normal; padding:0 var(--input-padding); margin-top:-5px; float:right; } +fieldset.inner>div.output>div.layout>div.path>span._space:hover { background-color:unset; } +fieldset.inner>div.output>div.layout>div.path>span.view { font-style:normal; font-size:22px; padding:0 var(--input-padding); } fieldset.inner>div.output>div.layout>div.display h1 { border-bottom:var(--box-border); margin:var(--title-margin) 0; } fieldset.inner>div.output>div.layout>div.display h2 { border-bottom:var(--box-border); margin:var(--title-margin) 0; } fieldset.inner>div.output>div.layout>div.display pre>code { padding-left:var(--table-padding); border-left:var(--box-notice3); display:block; } @@ -49,63 +33,63 @@ fieldset.inner>div.output>div.layout>div.layout>div.profile h2 { border-bottom:v fieldset.inner>div.output>div.layout>div.layout>div.profile pre>code { padding-left:var(--table-padding); border-left:var(--box-notice3); display:block; } fieldset.inner>div.output>div.layout>div.layout>div.profile>div.code { white-space:unset; padding:var(--table-padding); } fieldset.inner>div.output>div.layout>div.layout>div.profile div.status>div { padding:var(--input-padding); float:left; } -fieldset.inner>div.output>div.layout>div.layout div.content div.tips { color:var(--disable-fg-color); font-style:italic; line-height:var(--code-line-height); position:absolute; top:0; right:10px; } +fieldset.inner>div.output>div.layout>div.layout>div.content div.tips { color:var(--disable-fg-color); font-style:italic; line-height:var(--code-line-height); position:absolute; top:0; right:10px; } fieldset.inner>div.output>div.layout>div.layout>fieldset.story { box-shadow:unset; } fieldset.inner.cmd>div.output>div.layout>div.tabs:not(.hide) { background-color:var(--plugin-bg-color); height:var(--code-tabs-height); display:flex; } fieldset.inner.cmd>div.output>div.layout>div.tabs>div { height:var(--code-tabs-height); } 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; display:flex; } 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); 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; display:flex; } -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.qrcode { padding-top:5px; } +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.head { display:flex; flex-direction:row-reverse; } +fieldset.inner.cmd>div.output>div.layout>div.tabs>div.head>div { padding:0 var(--input-padding); 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; 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%); } +fieldset.inner.cmd>div.output>div.layout>div.path:not(.hide) { display:flex; } fieldset.inner.cmd>div.output>div.layout>div.plug { box-shadow:var(--th-box-shadow); height:var(--action-height); overflow:auto; } -fieldset.inner.cmd>div.output>div.layout>div.plug>legend { font-style:italic; font-size:var(--legend-font-size); padding:0 var(--input-padding); padding-right:0; margin-right:0; float:right; } -fieldset.inner.cmd>div.output>div.layout>div.plug>legend:hover { box-shadow:var(--notice-box-shadow); color:unset; } -fieldset.inner.cmd>div.output>div.layout>div.plug>legend>span.remove { padding:0 var(--input-padding); height:30px; } +fieldset.inner.cmd>div.output>div.layout>div.plug>legend { padding:0 var(--input-padding); padding-right:0; margin-right:0; float:right; } +fieldset.inner.cmd>div.output>div.layout>div.plug>legend:hover { box-shadow:var(--notice-box-shadow); } +fieldset.inner.cmd>div.output>div.layout>div.plug>legend>span.remove { padding:0 var(--input-padding); } fieldset.inner.cmd>div.output>div.layout>div.plug>legend>span.remove:hover { background-color:var(--hover-bg-color); } fieldset.inner.cmd>div.output>div.layout>div.plug>legend:not(:hover)>span.remove { visibility:hidden; } fieldset.inner fieldset.plug.can._plugin.search>form.option>div.item.value input { width:var(--project-width); } fieldset.inner fieldset.plug.can._plugin.search>form.option>div.item.filter input { width:var(--project-width); } -fieldset.inner:not(.monaco)>div.output div.content>tr.line * { font-family:var(--code-font-family); font-size:var(--code-font-size); } -fieldset.inner>div.output>div.layout>fieldset.plug.can._plugin.search>div.output>table.content tr td { cursor:pointer; } -fieldset.inner.plugin>div.output>div.layout>div.layout div.content tr.line.select>td.line { background-color:var(--notice-bg-color); color:white; } -fieldset.vimer.plugin>div.output>div.layout>div.layout div.content tr.line.select>td.line { background-color:unset; color:unset; } +fieldset.inner fieldset.plug.can._plugin.search>div.output>table.content tr td { cursor:pointer; } fieldset.inner.float>div.output>div.layout>div.path { font-size:var(--code-font-size); display:flex; } fieldset.Action.tabview fieldset.plugin.inner>div.output>div.layout>div.path:not(.hide) { font-size:var(--code-font-size); display:flex; } -div.input.vimer.find div.action div.item { margin:var(--input-margin); } -div.input.vimer.find div.action div.item.text input { width:var(--project-width) } -div.input.vimer.find div.action div.item.close span { display:none; } -div.path span.item { padding:var(--input-padding); } -div.carte.cmd.float { font-size:var(--code-font-size); } div.carte.cmd.float div.item { padding:var(--input-padding); } -div.carte.path.float { font-size:var(--code-font-size); } -div.carte.path.float div.item { padding:var(--input-padding); } -div.carte.path.float div.item.private { color:var(--disable-fg-color); } -div.vimer.open.float td:first-child { display:none; } -div.vimer.open.float td:nth-child(2) { display:none; } -div.vimer.plug.float div.item.text input { width:var(--river-width); } -div.layout.flex>input.current { clear:both; } -tr.line>td.line { -webkit-user-select:none; border-right:var(--box-border); cursor:pointer; } +fieldset.inner:not(.monaco)>div.output div.content>tr.line * { font-family:var(--code-font-family); font-size:var(--code-font-size); } +fieldset.inner.plugin>div.output>div.layout>div.layout div.content tr.line.select>td.line { background-color:var(--notice-bg-color); color:white; } +fieldset.vimer.plugin>div.output>div.layout>div.layout div.content tr.line.select>td.line { background-color:unset; color:unset; } +div.carte.inner.mode.float div.item { padding:var(--input-padding); } +div.carte.inner.path.float div.item { padding:var(--input-padding); } +div.carte.inner.path.float div.item.private { color:var(--disable-fg-color); } +div.input.inner.find.float div.action div.item { margin:var(--input-margin); } +div.input.inner.find.float div.action div.item.text input { width:var(--project-width); } +div.input.inner.find.float div.action div.item.close span { display:none; } +div.input.inner.find.float div.action div.item.replace input { border:var(--box-danger); } +div.input.inner.open.float td:first-child { display:none; } +div.input.inner.open.float div.item.text input { width:100% !important; } +div.input.inner.open.float td:nth-child(2) { display:none; } +tr.line>td.line { border-right:var(--box-border); cursor:pointer; -webkit-user-select:none; } tr.line>td.line { text-align:right; line-height:var(--code-line-height); padding:0 var(--button-padding); position:sticky; left:0; } tr.line>td.text { white-space:pre; line-height:var(--code-line-height); padding-left:var(--input-padding); width:100%; } tr.line:hover { background-color:var(--hover-bg-color); } -tr.line.insert { background-color:#283e2d; } tr.line.delete { background-color:#3c2626; } +tr.line.delete { background-color:#3c2626; } +tr.line.insert { background-color:#283e2d; } body.light tr.line.delete { background-color:#ffeef0; } body.light tr.line.insert { background-color:#e6ffed; } -body.white tr.line.insert { background-color:#ffeef0; } body.white tr.line.delete { background-color:#e6ffed; } +body.white tr.line.insert { background-color:#ffeef0; } body.width2 fieldset.inner>div.output>div.layout>div.path span.mode { display:none; } body.mobile fieldset.inner>div.output>div.layout>div.path span.func { display:none; } body.mobile fieldset.inner>div.output>div.layout>div.path span.mode { display:none; } +body.light fieldset.inner.cmd>div.output>div.layout>div.tabs>div.tabs>div.tabs { margin-right:var(--button-margin); } body:not(.mobile) fieldset.inner>div.output>div.layout>fieldset.plug { bottom:var(--action-height); } body:not(.windows) fieldset.inner>div.output>div.project * { font-family:var(--code-font-family); font-size:var(--code-font-size); } body:not(.windows) fieldset.inner>div.output>div.layout>div.tabs { font-family:var(--code-font-family); font-size:var(--code-font-size); } body:not(.windows) fieldset.inner>div.output>div.layout>div.path { font-family:var(--code-font-family); font-size:var(--code-font-size); } body.windows fieldset.inner.cmd>div.output>div.layout>div.tabs>div.icon>div.icon { font-size:20px !important; padding-top:6px; } body.windows fieldset.inner>div.output>div.layout>div.path span.view { margin-top:0; } -body.windows fieldset.inner>div.output>div.layout>div.path span.view { font-style:normal; } +body.windows fieldset.inner>div.output>div.layout>div.path span.view { font-style:normal; } \ No newline at end of file diff --git a/plugin/local/code/inner.js b/plugin/local/code/inner.js index a4be324b..72cc8d2d 100644 --- a/plugin/local/code/inner.js +++ b/plugin/local/code/inner.js @@ -46,6 +46,7 @@ Volcanos(chat.ONIMPORT, { can.page.Append(can, can.ui.path, [{text: [mode, "", [ice.MODE, can.db.mode||""]], onclick: function(event) { var list = {}; can.core.Item(can.onkeymap._mode[can.db.mode], function(k, cb) { list[k+" "+cb.help] = function(event, can, button) { can.core.CallFunc(cb, {event: event, can: can}) } }) can.core.Item(can.onkeymap._mode[can.db.mode+"_ctrl"], function(k, cb) { list["C-"+k+" "+cb.help] = function(event, can, button) { can.core.CallFunc(cb, {event: event, can: can}) } }) + list._style = "inner mode" can.user.carte(event, can, list, []) }}]) }, @@ -56,7 +57,7 @@ Volcanos(chat.ONIMPORT, { var carte, list = [web.FILTER]; can.core.Item(last, function(key) { list.push(key) }), list = list.concat(func.list) } can.page.Append(can, target, [{view: [[html.ITEM, "func"], html.SPAN, (func.current||"func")+nfs.PS+can.ui.content._max+func.percent+lex.SP+can.base.Size(can._msg.result[0].length)], onclick: function(event) { - carte = can.user.carte(event, can, {_style: nfs.PATH}, list, function(ev, button) { last[button] = true, carte.close() + carte = can.user.carte(event, can, {_style: "inner "+nfs.PATH}, list, function(ev, button) { last[button] = true, carte.close() var line = can.core.Split(button, nfs.DF, nfs.DF).pop() can.onimport.tabview(can, "", can.Option(nfs.FILE), line, function() { can.onaction.selectLine(can, line, true) }) }) @@ -83,7 +84,7 @@ Volcanos(chat.ONIMPORT, { }) }, tabPath: function(event, can, ps, key, pre, cb, parent) { can.runAction(event, mdb.INPUTS, [key, pre, lex.SPLIT], function(msg) { var _trans = {} - var carte = can.user[parent? "carteRight": "carte"](event, can, {_style: key}, (msg.Length() > 10? [web.FILTER]: []).concat(msg.Table(function(value) { + var carte = can.user[parent? "carteRight": "carte"](event, can, {_style: "inner "+key}, (msg.Length() > 10? [web.FILTER]: []).concat(msg.Table(function(value) { var p = can.core.Split(value[key], ps).pop()+(can.base.endWith(value[key], ps)? ps: ""); return _trans[p] = value[key], p })), function(event, button) { if (can.base.endWith(button, ps)) { can.onimport.tabPath(event, can, ps, key, pre+button, cb, carte); return true } else { cb(_trans[button], pre) } @@ -91,7 +92,7 @@ Volcanos(chat.ONIMPORT, { can.page.Select(can, carte, html.DIV_ITEM, function(target) { target.innerHTML.trim() != event.target.innerHTML.trim() && can.base.beginWith(target.innerHTML, file+nfs.PT) && carte.insertBefore(target, carte.firstChild) target.innerHTML.trim() == event.target.innerHTML.trim() && can.onappend.style(can, html.SELECT, target) - }) + }), can.onmotion.delay(can, function() { carte.scrollTop = 0 }) }) }, openzone: function(can, path, file, line) { if (line == web.SPACE) { @@ -100,7 +101,7 @@ Volcanos(chat.ONIMPORT, { if (can.base.beginWith(file, "can.")) { can.page.isDisplay(can.ui.zone.plugin._target) || can.ui.zone.plugin._legend.click() } else { - can.page.isDisplay(can.ui.zone.module._target) || can.ui.zone.module._legend.click() + can.page.isDisplay(can.ui.zone.command._target) || can.ui.zone.command._legend.click() } } else { if (can.ui.zone && can.ui.zone.source) { @@ -109,32 +110,28 @@ Volcanos(chat.ONIMPORT, { return true } }, - tabview: function(can, path, file, line, cb) { path = path||can.Option(nfs.PATH); var key = can.onexport.keys(can, path, file) - line && can.Option(nfs.LINE, line) + tabview: function(can, path, file, line, cb) { path = path||can.Option(nfs.PATH), line && can.Option(nfs.LINE, line); var key = can.onexport.keys(can, path, file) function isIndex() { return line == ctx.INDEX } function isSpace() { return line == web.SPACE } - function show(skip) { can._msg && can._msg.Option && can._msg.Option(nfs.LINE, can.Option(nfs.LINE)), can._msg = can.db.tabview[key] + function show() { can._msg && can._msg.Option && can._msg.Option(nfs.LINE, can.Option(nfs.LINE)), can._msg = can.db.tabview[key] can.Option(can.onimport.history(can, {path: path, file: file, line: can._msg.Option(nfs.LINE)||can.onexport.session(can, SELECT_LINE+nfs.DF+path+file)||1})) can.onsyntax._init(can, can._msg, function(content) { var msg = can._msg; can.onexport.hash(can), can.isCmdMode() && can.onexport.title(can, (isIndex()||isSpace()? "": path)+file) - can.onmotion.select(can, can.ui._tabs, html.DIV_TABS, msg._tab), can.isCmdMode() && msg._tab.scrollIntoView(), can.onmotion.toggle(can, can.ui.path, true) + can.onmotion.select(can, can.ui._tabs, html.DIV_TABS, msg._tab), can.onmotion.toggle(can, can.ui.path, true) if (isSpace()) { can.base.contains(file, "/") || can.onmotion.hidden(can, can.ui.path) can.ui.path.innerHTML = can.page.Format(html.A, can.base.trimPrefix(can.misc.MergePodCmd(can, {pod: file}), location.origin)) } else if (isIndex()) { can.onmotion.hidden(can, can.ui.path) - } else { can.onimport.__tabPath(can) - } can.onimport.openzone(can, path, file, line) + } else { can.onimport.__tabPath(can) } can.page.SelectChild(can, can.ui._content.parentNode, can.page.Keys(html.DIV_CONTENT, html.DIV_LAYOUT, html.FIELDSET_STORY, [[[html.IFRAME, html.CONTENT]]]), function(target) { can.onmotion.toggle(can, target, target == content) }), can.ui.content._plugin = msg._plugin can.page.SelectChild(can, can.ui._profile.parentNode, can.page.Keys(html.DIV_PROFILE, [[[html.IFRAME, html.PROFILE]]]), function(target) { if (target == msg._profile) { can.ui.profile = msg._profile, msg._profile_hidden || can.onmotion.toggle(can, target, true) } }), can.ui.profile._plugin = msg._profile - if (isSpace()) { var item = can.ui.zone.space[file]; can.onmotion.select(can, item.parentNode, html.DIV_ITEM, item) } - can.page.ClassList.set(can, can._output, nfs.SOURCE, !isIndex() && !isSpace()) - can.onimport.layout(can), can.ui.current && can.onmotion.toggle(can, can.ui.current, !isIndex() && !isSpace()) - skip || can.onmotion.delay(can, function() { can.onaction.selectLine(can, can.Option(nfs.LINE), true) }), can.base.isFunc(cb) && cb(), cb = null + can.page.ClassList.set(can, can._output, nfs.SOURCE, can.onimport.openzone(can, path, file, line)), can.onimport.layout(can) + can.onaction.selectLine(can, can.Option(nfs.LINE)), can.base.isFunc(cb) && cb(msg), cb = null var ls = can.onexport.path(can).split(nfs.PS); if (ls.length > 4) { ls = [ls.slice(0, 2).join(nfs.PS)+"/.../"+ls.slice(-2).join(nfs.PS)] } can.Status(kit.Dict(nfs.FILE, ls.join(nfs.PS))) }) } - function load(msg) { var skip = false; can.db.tabview[key] = msg; var name = file + function load(msg) { can.db.tabview[key] = msg; var name = file if (can.base.beginWith(file, web.HTTP)) { name = decodeURI(file.split(web.QS)[0]) var link = can.misc.ParseURL(can, name); if (link.pod) { name = link.pod } name = can.base.trimPrefix(name, location.origin) @@ -142,18 +139,16 @@ Volcanos(chat.ONIMPORT, { name = file.split(mdb.FS)[0].split(isIndex()? nfs.PT: nfs.PS).pop() } line && msg.Option(nfs.LINE, line) - var tabs = can.onimport.tabs(can, [{name: name, text: (isIndex() || isSpace()? "": path)+file, _menu: shy([nfs.SAVE, nfs.TRASH, web.REFRESH], function(event, button, meta) { - can.request(event, msg), can.onaction[button](event, can, button) - })}], function(event, tabs) { can._tab = msg._tab = tabs._target, show(skip), skip = true - can.onmotion.delay(can, function() { var item = can.ui.zone && can.ui.zone.source && can.ui.zone.source[path+file]; if (!item) { return } - item._tabs = tabs._target, can.page.ClassList.has(can, item, html.SELECT) || item.click() - }) + var tabs = can.onimport.tabs(can, [{name: name, text: (isIndex() || isSpace()? "": path)+file, _menu: shy(can.base.Obj(msg.Option(ice.MSG_ACTION), []), function(event, button, meta) { + can.request(event, msg), can.onaction[button]? can.onaction[button](event, can, button): can.onaction._runs(event, can, button) + })}], function(event, tabs) { + can._tab = msg._tab = tabs._target, show(), msg._item && (can.page.isSelect(msg._item) || msg._item.click(), can.onmotion.scrollIntoView(can, msg._item)) }, function(tabs) { can.onengine.signal(can, VIEW_REMOVE, msg), delete(can.db.tabview[key]) msg._content != can.ui._content && can.page.Remove(can, msg._content), msg._profile != can.ui._profile && can.page.Remove(can, msg._profile) can.onmotion.cacheClear(can, key, can.ui._content, can.ui._profile, can.ui._display) }, can.ui._tabs) } - if (can.db.tabview[key]) { return !can._msg._tab && !can.isSimpleMode()? load(can.db.tabview[key]): show() } + if (can.db.tabview[key]) { return can.isSimpleMode()? show(): can._msg._tab? (can._msg._tab.click(), show()): load(can.db.tabview[key]) } isIndex()||isSpace()? load(can.request({}, {index: file, line: line})): can.run({}, [path, file], load, true) }, history: function(can, record) { can.base.Eq(record, can.db.history[can.db.history.length-1], mdb.TEXT) || can.db.history.push(record) @@ -162,7 +157,10 @@ Volcanos(chat.ONIMPORT, { project: function(can) { can.onimport.zone(can, can.core.Item(can.onfigure, function(name, cb) { if (can.base.isFunc(cb)) { return {name: name, _toggle: function(zone) { var target = can.page.isDisplay(zone._target)? zone._target: can.ui.zone.source._target can.core.Item(can.ui.zone, function(key, zone) { key.indexOf(nfs.PS) > 0 || zone.toggle(zone._target == target) }), can.onimport.layout(can) - }, _init: function(target, zone) { return cb(can, target, zone, can.db.hash) }} + }, _init: function(target, zone) { var onclick = zone._legend.onclick + zone._legend.onclick = function(event) { if (can.page.isDisplay(zone._target)) { return } onclick(event) } + return cb(can, target, zone, can.db.hash) + }} } }), can.ui.project) }, profile: function(can, msg) { var _msg = can.db.tabview[can.onexport.keys(can)]; _msg.Option(html.WIDTH, msg.Option(html.WIDTH)), border = 1 var height = can.ui.content.offsetHeight, width = can.onexport.size(can, _msg.Option(html.WIDTH)||0.5, can.ConfWidth()-can.ui.project.offsetWidth)+border @@ -282,23 +280,28 @@ Volcanos(chat.ONFIGURE, { function show(target, zone, path) { can.run(can.request({}, {dir_root: path, dir_deep: true}), [nfs.PWD], function(msg) { can.onimport.tree(can, can.core.List(msg.Table(), function(item) { item._init = function(target) { can.ui.zone.source[path+item.path] = target } if (can.Option(nfs.FILE).indexOf(item.path) == 0) { item.expand = true } return item - }), function(event, item) { can.base.endWith(item.path, nfs.PS) || can.onimport.tabview(can, path, item.path) }, function() {}, target), zone._total(msg.Length()) + }), function(event, item, target) { can.base.endWith(item.path, nfs.PS) || can.onimport.tabview(can, path, item.path, "", function(msg) { + msg._item = target + }) }, function() {}, target), zone._total(msg.Length()) can.isCmdMode() && hash.length > 1 && can.onimport.tabview(can, hash[0], hash[1], hash[2]) }, true) } show(target, zone, can.Option(nfs.PATH)) }, - module: function(can, target, zone, hash) { + command: function(can, target, zone, hash) { zone._delay_init = function() { can.runAction({}, mdb.INPUTS, [ctx.INDEX], function(msg) { can.onimport.tree(can, msg.Table(function(value) { value.expand = hash[2] == ctx.INDEX && hash[1] == value.index return value - }), function(event, item) { can.onimport.tabview(can, "", item.index, ctx.INDEX) }, function() {}, target, null, ctx.INDEX, nfs.PT), zone._total(msg.Length()) + }), function(event, item, target) { can.onimport.tabview(can, "", item.index, ctx.INDEX, function(msg) { + msg._item = target + }) }, function() {}, target, null, ctx.INDEX, nfs.PT), zone._total(msg.Length()) }) }, zone.toggle(false) }, plugin: function(can, target, zone, hash) { zone._delay_init = function() { var total = 0 can.onimport.tree(can, can.core.ItemKeys(can.onengine.plugin.meta, function(key) { if (key[0] != "_") { return total++, {index: key, expand: hash[2] == ctx.INDEX && hash[1] == "can."+key} - } }), - function(event, item) { can.onimport.tabview(can, "", can.core.Keys(ice.CAN, item.index), ctx.INDEX) }, function() {}, target, null, ctx.INDEX, nfs.PT), zone._total(total) + } }), function(event, item, target) { can.onimport.tabview(can, "", can.core.Keys(ice.CAN, item.index), ctx.INDEX, function(msg) { + msg._item = target + }) }, function() {}, target, null, ctx.INDEX, nfs.PT), zone._total(total) }, zone.toggle(false) }, }) Volcanos(chat.ONSYNTAX, { @@ -488,11 +491,11 @@ Volcanos(chat.ONACTION, { case ssh.SHELL: return can.onimport.tabview(can, "", [web.CODE_XTERM, list[0].slice(6)].join(mdb.FS), ctx.INDEX) case cli.OPENS: return can.runAction(event, ls[0], ls[1], null, true) default: var ls = can.onexport.split(can, list[0]); can.onimport.tabview(can, ls[0], ls[1]) - } }); can.page.Modify(can, input._target, {className: "input vimer open float"}) + } }); can.page.Modify(can, input._target, {className: "input inner open float"}) can.page.style(can, input._target, html.LEFT, left, html.TOP, can._output.offsetHeight/4, html.RIGHT, "") }, find: function(event, can) { var last = can.onexport.line(can, can.current.line) - var ui = can.page.Append(can, can._output, [{view: "input vimer find float", list: [html.ACTION, html.OUTPUT], + var ui = can.page.Append(can, can._output, [{view: "input inner find float", list: [html.ACTION, html.OUTPUT], style: {left: can.ui.project.offsetWidth+can._output.offsetWidth/4-34, top: can._output.offsetHeight/2-60}}]); can.onmotion.move(can, ui._target) function find(begin, text) { for (begin; begin <= can.ui.content._max; begin++) { if (can.onexport.text(can, can.onaction._getLine(can, begin)).indexOf(text) > -1) { return last = begin, can.onaction.selectLine(can, begin, true) diff --git a/plugin/local/code/vimer.css b/plugin/local/code/vimer.css index 8cd66049..4bd3b957 100644 --- a/plugin/local/code/vimer.css +++ b/plugin/local/code/vimer.css @@ -1,29 +1,23 @@ -fieldset.vimer>div.output>div.layout>div.layout>div.layout div.content { border-left:var(--box-border); border-top:var(--box-border); } -fieldset.vimer>div.output>div.layout>div.layout input.current { background-color:transparent; color:transparent; padding-left:var(--input-padding); height:var(--code-line-height); position:absolute; } -fieldset.vimer>div.output>div.layout>div.layout div.content div.complete { background-color:unset; padding-top:0; display:none; position:absolute; height:1px; overflow:visible; } -fieldset.vimer>div.output>div.layout>div.layout div.content div.complete div.prefix { color:transparent; white-space:pre; float:left; } -fieldset.vimer>div.output>div.layout>div.layout div.content div.complete table.content thead { display:none; } -fieldset.vimer>div.output>div.layout>div.layout div.content div.complete table.content td:first-child { padding-left:0; } -fieldset.vimer>div.output>div.layout>div.layout div.content div.complete table.content { padding-left:var(--input-padding); width:unset; max-width:600px; display:block; box-shadow:var(--plugin-box-shadow); } -fieldset.vimer>div.output>div.layout>div.layout div.content.insert div.complete:not(.hide) { display:block; top:unset; } -fieldset.vimer.plugin>div.output>div.layout>div.layout div.content.normal input.current { caret-color:var(--notice-bg-color); border:var(--box-notice); } -fieldset.vimer.plugin>div.output>div.layout>div.layout div.content.insert input.current { caret-color:var(--danger-bg-color); border:var(--box-danger); } -fieldset.vimer.plugin>div.output>div.layout>div.layout div.content.normal tr.line.select>td.line { background-color:var(--notice-bg-color); color:white; } -fieldset.vimer.plugin>div.output>div.layout>div.layout div.content.insert tr.line.select>td.line { background-color:var(--danger-bg-color); color:white; } -fieldset.vimer>div.output.normal>div.layout>div.tabs>div.tabs>div.tabs.select { border-top:var(--box-notice3); } -fieldset.vimer>div.output.insert>div.layout>div.tabs>div.tabs>div.tabs.select { border-top:var(--box-danger3); } -fieldset.vimer>div.output.normal>div.layout>div.path span.mode.normal { color:var(--notice-bg-color); } -fieldset.vimer>div.output.insert>div.layout>div.path span.mode.insert { color:var(--danger-bg-color); } -fieldset.vimer>div.output.normal>div.project div.item.current { background-color:var(--hover-bg-color); border-right:var(--box-notice3); } -fieldset.vimer>div.output.insert>div.project div.item.current { background-color:var(--hover-bg-color); border-right:var(--box-danger3); } -fieldset.vimer>div.output.normal>div.project div.expand.open { color:var(--notice-bg-color); } -fieldset.vimer>div.output.insert>div.project div.expand.open { color:var(--danger-bg-color); } -fieldset.vimer>div.output>div.project div.expand.open { color:unset; } -div.input.vimer.open.float input[type=text] { width:100% !important; } - fieldset.vimer>div.output.source>div.project div.item.select { border-right:var(--box-border3); } -fieldset.vimer>div.output.source.normal>div.project div.item.select { border-right:var(--box-notice3); } -fieldset.vimer>div.output.source.insert>div.project div.item.select { border-right:var(--box-danger3); } fieldset.vimer>div.output.source>div.layout>div.tabs>div.tabs>div.tabs.select { border-top:var(--box-border3); } +fieldset.vimer>div.output.source.normal>div.project div.expand.open { color:var(--notice-bg-color); } +fieldset.vimer>div.output.source.normal>div.project div.item.select { border-right:var(--box-notice3); } fieldset.vimer>div.output.source.normal>div.layout>div.tabs>div.tabs>div.tabs.select { border-top:var(--box-notice3); } +fieldset.vimer>div.output.source.normal>div.layout>div.path span.mode.normal { color:var(--notice-bg-color); } +fieldset.vimer>div.output.source.normal>div.layout>div.layout>div.content tr.line.select>td.line { background-color:var(--notice-bg-color); color:white; } +fieldset.vimer>div.output.source.normal>div.layout>div.layout>div.content input.current { border:var(--box-notice); caret-color:var(--notice-bg-color); } +fieldset.vimer>div.output.source.insert>div.project div.expand.open { color:var(--danger-bg-color); } +fieldset.vimer>div.output.source.insert>div.project div.item.select { border-right:var(--box-danger3); } fieldset.vimer>div.output.source.insert>div.layout>div.tabs>div.tabs>div.tabs.select { border-top:var(--box-danger3); } +fieldset.vimer>div.output.source.insert>div.layout>div.path span.mode.insert { color:var(--danger-bg-color); } +fieldset.vimer>div.output.source.insert>div.layout>div.layout>div.content tr.line.select>td.line { background-color:var(--danger-bg-color); color:white; } +fieldset.vimer>div.output.source.insert>div.layout>div.layout>div.content input.current { border:var(--box-danger); caret-color:var(--danger-bg-color); } +fieldset.vimer>div.output.source.insert>div.layout>div.layout>div.content div.complete:not(.hide) { display:block; top:unset; } +fieldset.vimer>div.output.source>div.layout>div.layout input.current { background-color:transparent; color:transparent; padding-left:var(--input-padding); height:var(--code-line-height); position:absolute; } +fieldset.vimer>div.output.source>div.layout>div.layout>div.content div.complete { background-color:unset; padding-top:0; height:1px; overflow:visible; display:none; position:absolute; } +fieldset.vimer>div.output.source>div.layout>div.layout>div.content div.complete div.prefix { color:transparent; white-space:pre; float:left; } +fieldset.vimer>div.output.source>div.layout>div.layout>div.content div.complete table.content { box-shadow:var(--plugin-box-shadow); padding-left:var(--input-padding); width:unset; max-width:600px; display:block; } +fieldset.vimer>div.output.source>div.layout>div.layout>div.content div.complete table.content thead { display:none; } +fieldset.vimer>div.output.source>div.layout>div.layout>div.content div.complete table.content td:first-child { padding-left:0; } +fieldset.vimer>div.output>div.layout>div.tabs>div.tabs>div.tabs.origin.select { border-top:var(--box-danger3); } +div.input.vimer.open.float input[type=text] { width:100% !important; } \ No newline at end of file diff --git a/plugin/local/code/vimer.js b/plugin/local/code/vimer.js index ed1a6412..dab5bbe2 100644 --- a/plugin/local/code/vimer.js +++ b/plugin/local/code/vimer.js @@ -11,7 +11,6 @@ Volcanos(chat.ONIMPORT, { if (can.db.mode == mdb.NORMAL) { can.onkeymap.prevent(event) } }, onkeyup: function(event) { if (event.metaKey) { return } can.onimport._value(can); can.onkeymap._complete(event, can) - }, onfocus: function(event) { can.current.line.appendChild(can.ui.complete) }, onclick: function(event) { can.onkeymap._insert(event, can) }}, {view: [[code.COMPLETE]]}, ]); can.ui.current = ui.current, can.ui.complete = ui.complete, can.onkeymap._plugin(can) }, @@ -24,43 +23,32 @@ Volcanos(chat.ONFIGURE, { can.run({}, [ctx.ACTION, nfs.REPOS], function(msg) { var paths = can.db.paths can.core.List(paths.concat(msg.Table(function(value) { return value.path })), function(p) { if (can.base.beginWith(p, nfs.USR_LOCAL_WORK) || can.base.isIn(p, 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 (can.base.isIn(p, nfs.USR_LEARNING, nfs.USR_INTSHELL)) { return } if (p && paths.indexOf(p) == -1 && p[0] != nfs.PS) { paths.push(p) } }) function show(target, zone, path) { can.run(can.request({}, {_method: http.GET, dir_root: path, dir_deep: true}, can.Option()), [nfs.PWD], function(msg) { - zone._icon(kit.Dict( - web.REFRESH, function(event) { show(target, zone, path) }, - mdb.CREATE, function(event, button) { can.onaction.module(event, can, nfs.MODULE) }, - )), zone._total(msg.Length()) var cache, list = can.core.List(msg.Table(), function(item) { if (path == nfs.SRC && can.base.isIn(item.path, "main.ico", "main.svg", "version.go", "binpack.go", "binpack_usr.go")) { return } if (path == nfs.USR_RELEASE && can.base.isIn(item.path, "conf.go", "binpack.go")) { return } if (path == args[0] && args[1].indexOf(item.path) == 0) { item.expand = true } - item._init = function(target) { can.ui.zone.source[path+item.path] = target } return item - }); can.onmotion.clear(can, target) - cache = can.onimport.tree(can, list, function(event, item) { - can.base.endWith(item.path, nfs.PS) || can.onimport.tabview(can, path, item.path) + }); can.onmotion.clear(can, target), zone._total(msg.Length()) + cache = can.onimport.tree(can, list, function(event, item, target) { + can.base.endWith(item.path, nfs.PS) || can.onimport.tabview(can, path, item.path, "", function(msg) { msg._item = target }) }, function(event, target, item) { var msg = can.request(event); msg.Option(nfs.PATH, path), msg.Option(nfs.FILE, item.path) }, target, cache) - can.onmotion.delay(can, function() { - hash.length > 1 && can.onimport.openzone(can, hash[0], hash[1], hash[2]) && can.onimport.tabview(can, hash[0], hash[1], hash[2]), hash = [] - }) + can.onmotion.delay(can, function() { hash.length > 1 && can.onimport.openzone(can, hash[0], hash[1], hash[2]) && can.onimport.tabview(can, hash[0], hash[1], hash[2]), hash = [] }) + can.onimport._zone_icon(can, msg, zone, function(event, button) { can.onaction._runs(event, can, button) }) }, true) } if (paths.length == 1) { return show(target, zone, paths[0]) } can.page.Remove(can, zone._action) can.onimport.zone(can, can.core.List(paths, function(path) { return kit.Dict(mdb.NAME, path, path == args[0]? chat._INIT: chat._DELAY_INIT, function(target, zone) { show(target, zone, path) }) }), target) }) }, - space: function(can, target, zone, hash) { can.onimport._zone(can, zone, web.DREAM, function(sub, msg) { - sub.onimport._open = function(_, msg, arg) { can.onimport.tabview(can, "", arg, web.SPACE) } - sub.onexport.record = function(sub, value, key) { can.onimport.tabview(can, "", value, web.SPACE) } - can.page.Select(can, can._output, "div.item>span.name", function(target) { can.ui.zone.space[target.innerText] = target.parentNode - if (target.innerText == hash[1] && hash[2] == web.SPACE) { target.parentNode.click() } - }) - }), zone.toggle(false) }, + space: function(can, target, zone, hash) { can.onimport._zone(can, zone, web.DREAM, mdb.NAME, hash), zone.toggle(false) }, }) -Volcanos(chat.ONACTION, { +Volcanos(chat.ONACTION, {_trans: {input: {main: "程序", top: "顶域"}}, _run: function(event, can, button, args, cb) { can.runAction(event, button, args, cb||function(msg) { can.onmotion.delay(can, function() { can.onimport.tabview(can, msg.Option(nfs.PATH), msg.Option(nfs.FILE)) }, 300) can.ui.zone.source.refresh() @@ -107,19 +95,6 @@ Volcanos(chat.ONACTION, { }) }, "扩展": function(event, can) { can.user.input(can.request(event, {action: "extension"}), can, ["url"], function(list) { var sub = can.db.toolkit[list[0]]; sub? sub.select(): can.onimport.exts(can, list[0]) }) }, - "创建": function(event, can) { can.onaction.module(event, can, nfs.MODULE) }, - "编译": function(event, can) { can.onaction.compile(event, can, code.COMPILE) }, - "审批": function(event, can) { can.onimport.tabview(can, "", aaa.APPLY, ctx.INDEX) }, - "矩阵": function(event, can) { can.onimport.tabview(can, "", web.MATRIX, ctx.INDEX) }, - "聊天": function(event, can) { can.onimport.tabview(can, "", web.CHAT_MESSAGE, ctx.INDEX) }, - "源码": function(event, can) { can.onimport.tabview(can, "", web.CODE_GIT_STATUS, ctx.INDEX) }, - "计划": function(event, can) { can.onimport.tabview(can, "", web.TEAM_PLAN, ctx.INDEX) }, - "流程": function(event, can) { can.onimport.tabview(can, "", web.CHAT_FLOWS, ctx.INDEX) }, - "文档": function(event, can) { can.onimport.tabview(can, "", web.WIKI_WORD, ctx.INDEX) }, - "后台": function(event, can) { var pod = can.misc.Search(can, ice.POD); can.onimport.tabview(can, "", location.origin+"/c/admin"+(pod? "?pod="+pod: ""), web.SPACE) }, - "桌面": function(event, can) { can.onimport.tabview(can, "", web.CHAT_MACOS_DESKTOP, ctx.INDEX) }, - "官网": function(event, can) { can.onimport.tabview(can, "", can.misc.MergePodCmd(can, {cmd: web.PORTAL}), web.SPACE) }, - insertLine: function(can, value, before) { var line = can.onaction.appendLine(can, value); before && can.ui.content.insertBefore(line, can.onaction._getLine(can, before)); return can.onaction.rerankLine(can), can.onexport.line(can, line) }, deleteLine: function(can, line) { line = can.onaction._getLine(can, line); var next = line.nextSibling||line.previousSibling; return can.page.Remove(can, line), can.onaction.rerankLine(can), next }, _selectLine: function(can) { can.current && can.page.Select(can, can.current.line, "td.text", function(td) { var target = can.ui.current; if (!target) { return } @@ -134,23 +109,18 @@ Volcanos(chat.ONEXPORT, { hash: function(can) { return can.misc.SearchHash(can, can.Option(nfs.PATH), can.Option(nfs.FILE), can.Option(nfs.LINE)) }, }) Volcanos(chat.ONKEYMAP, { - scrollHold: function(can, count, begin) { - var top = can.ui.content.scrollTop, left = can.ui.content.scrollLeft + scrollHold: function(can, count, begin) { var top = can.ui.content.scrollTop, left = can.ui.content.scrollLeft can.ui.current.focus(), count != undefined && can.onkeymap.cursorMove(can.ui.current, count, begin == undefined? count: begin) can.ui.content.scrollTop = top, can.ui.content.scrollLeft = left }, - cursorDown: function(can, target) { - if (!can.current.next()) { return } + cursorDown: function(can, target) { if (!can.current.next()) { return } var p = can.onkeymap.cursorMove(target); can.onaction.selectLine(can, can.current.next()), can.onkeymap.cursorMove(target, 0, p) }, - cursorUp: function(can, target) { - if (!can.current.prev()) { return } - var p = can.onkeymap.cursorMove(target); can.onaction.selectLine(can, can.current.prev()), can.onkeymap.cursorMove(target, 0, p) }, - _model: function(can, value) { can.db.mode = value, can.onimport.__tabPath(can, true), - can.onmotion.toggle(can, can.ui.complete, false) - can.core.List([mdb.PLUGIN, mdb.NORMAL, mdb.INSERT], function(item) { can.page.ClassList.del(can, can.ui.content, item) }), can.page.ClassList.add(can, can.ui.content, value) - can.core.List([mdb.PLUGIN, mdb.NORMAL, mdb.INSERT], function(item) { can.page.ClassList.del(can, can._output, item) }), can.page.ClassList.add(can, can._output, value) - can.core.List([mdb.NORMAL, mdb.INSERT], function(item) { can.page.ClassList.del(can, can._fields, item) }), can.page.ClassList.add(can, can._fields, value) + cursorUp: function(can, target) { if (!can.current.prev()) { return } + var p = can.onkeymap.cursorMove(target); can.onaction.selectLine(can, can.current.prev()), can.onkeymap.cursorMove(target, 0, p) + }, + _model: function(can, value) { can.db.mode = value, can.onimport.__tabPath(can, true), can.onmotion.toggle(can, can.ui.complete, false) + can.core.List([mdb.NORMAL, mdb.INSERT], function(item) { can.page.ClassList.del(can, can._output, item) }), can.page.ClassList.add(can, can._output, value) }, _plugin: function(can) { can.onkeymap._model(can, mdb.PLUGIN), can.ui.current.blur() }, _normal: function(can) { can.onkeymap._model(can, mdb.NORMAL), can.onkeymap.scrollHold(can) }, diff --git a/plugin/table.js b/plugin/table.js index 6437ffaa..44ce74b5 100644 --- a/plugin/table.js +++ b/plugin/table.js @@ -28,34 +28,44 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target, cb) { cb && cb(target, value) }, onclick: function(event) { can.sup.onexport.record(can.sup, value.name, mdb.NAME, value) }}])._target }) }, - _icon: function(can, name, button, target) { can.page.Append(can, target, [{text: [can.page.unicode[name]||name, html.SPAN, [html.ICON, name]], onclick: function(event) { - can.base.isFunc(button)? button(event, button): can.onaction[button](event, can, button), can.onkeymap.prevent(event) - }}]) }, - _vimer_zone: function(can, msg, target) { msg.Table(function(value) { var action = can.page.parseAction(can, value) - can.onimport.item(can, {type: value.type, status: value.status, - icon: can.misc.Resource(can, value.icon||value.icons||value.avatar_url), - name: can.page.Color(value[can.Conf(mdb.FIELD)||mdb.VIEW]||value[mdb.NAME]||value[mdb.TEXT]||value[mdb.TYPE]), - title: value[mdb.TEXT]||value.description, - }, function(event) { - can.sup.onexport.record(can, value.name, mdb.NAME, value, event) - }, function() { return shy(action, function(event, button, meta, carte) { can.misc.Event(event, can, function(msg) { carte.close() - can.sup.onexport.action(can, button, value) || can.run(event, [ctx.ACTION, button], function(msg) { can.sup.onimport._process(can.sup, msg) || can.Update() }) - }, value) }) }) + _icon: function(can, name, button, target) { + var _icon = can.page.icons(can, name) || (can.page.unicode[name] && {text: [can.page.unicode[name]||name, html.SPAN, [html.ICON, name]]}) + if (!_icon) { return } + _icon.onclick = function(event) { can.base.isFunc(button)? button(event, button): can.onaction[button](event, can, button), can.onkeymap.prevent(event) } + can.page.Append(can, target, [_icon]) + }, + _vimer_zone: function(can, msg, target) { msg.Table(function(value) { value._select = value.name == can.Conf("_select") + can.onimport.item(can, value, function(event) { can.sup.onexport.record(can, value.name, mdb.NAME, value, event, event.currentTarget||event.target) }) }) }, - _zone: function(can, zone, index, cb, field) { zone._delay_init = function() { can.onimport.plug(can, can.base.isObject(index)? index: {index: index, style: html.OUTPUT, mode: mdb.ZONE, field: field}, function(sub) { - sub.run = function(event, cmds, cb) { can.runActionCommand(can.request(event, {mode: mdb.ZONE}), index.index||index, cmds, cb) } - zone._icon(kit.Dict( - web.REFRESH, function(event) { sub.Update(event) }, - mdb.CREATE, function(event) { sub.Update(event, [ctx.ACTION, mdb.CREATE]) }, - "=", function() { can.onimport.tabview(can, "", [sub.ConfIndex()].concat(sub.Conf(ctx.ARGS)).join(","), ctx.INDEX) }, - )) - var action = can.core.List(sub.Conf(ctx.INPUTS), function(item) { if (item.type == html.BUTTON && [ice.LIST, ice.BACK].indexOf(item.name) == -1) { return item.name } }) - sub.onexport.output = function(_sub, msg) { - zone._menu = shy({_trans: sub._trans}, action.concat(can.base.Obj(msg.Option(ice.MSG_ACTION), [])), function(event, button, meta, carte) { - sub.Update(event, [ctx.ACTION, button]), carte.close() - }), zone._total(msg.Length()), cb(sub, msg) - can.page.style(can, sub._output, html.MAX_HEIGHT, "", html.HEIGHT, ""), can.user.toastSuccess(can) + _zone_icon: function(can, msg, zone, cb) { + var action = can.core.List(can.Conf(ctx.INPUTS), function(item) { if (item.type == html.BUTTON && [ice.LIST, ice.BACK].indexOf(item.name) == -1) { return item.name } }) + var _menu = shy({}, action.concat(can.base.Obj(msg.Option(ice.MSG_ACTION), [])), function(event, button, meta, carte) { + cb? cb(event, button): can.Update(event, [ctx.ACTION, button]), carte.close() }) + if (_menu.list.length == 0) { + zone._icon(kit.Dict(web.REFRESH, function(event) { zone.refresh() })) + return + } + zone._icon(kit.Dict(web.REFRESH, function(event) { zone.refresh() }, "menu", function() { can.user.carte(event, can, _menu.meta, _menu.list, _menu) })) + }, + _zone: function(can, zone, index, field, hash) { zone._delay_init = function() { can.onimport.plug(can, can.base.isObject(index)? index: { + index: index, style: html.OUTPUT, mode: mdb.ZONE, field: field, _select: hash[2] == zone.name? hash[1]: "", + }, function(sub) { sub.run = function(event, cmds, cb) { can.runActionCommand(can.request(event, {mode: mdb.ZONE}), index.index||index, cmds, cb) } + sub.onexport.output = function(_sub, msg) { can.onimport._zone_icon(sub, msg, zone), zone._total(msg.Length()) + sub.onimport.size(sub, zone._target.offsetHeight, zone._target.offsetWidth, false), can.page.style(can, sub._output, html.MAX_HEIGHT, "", html.HEIGHT, "") + can.user.toastSuccess(can) }, can.ui.zone[zone.name].refresh = function() { sub.Update() } + sub.onimport._field = function(msg) { + msg.Table(function(value) { var pod = msg.Option(ice.MSG_USERPOD), cmd = value._command||value.index, args = can.base.Obj(value.args, []) + can.onimport.tabview(can, "", cmd == chat.IFRAME && args.length > 0? args[0]: "/s/"+pod+"/c/"+cmd, web.SPACE, function(msg) { + can.page.SelectOne(can, msg._tab, html.SPAN, function(target) { can.page.Modify(can, target, value.title||can.core.Keys(pod, cmd)) }) + }) + }) + } + sub.onimport._open = function(msg, arg) { can.onimport.tabview(can, "", arg, web.SPACE, function(msg) {}) } + sub.onexport.record = function(sub, value, key, item, event, target) { can.onimport.tabview(can, "", value, zone.name, function(msg) { + can.onappend.style(can, [item.type, item.status], msg._tab) + msg._item = target + }) } }, zone._target) } }, zone: function(can, list, target) { target = target||can.ui.project return can.page.Append(can, target, can.core.List(list, function(zone) { can.base.isString(zone) && (zone = {name: zone}); if (!zone) { return } @@ -171,8 +181,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target, cb) { } return {view: [[html.TABS, tabs.type, tabs.role, tabs.status]], title: tabs.title||tabs.text, list: [ can.onimport._icons(can, tabs), can.onimport._nick(can, tabs), {icon: mdb.DELETE, onclick: function(event) { tabs._target._close(), can.onkeymap.prevent(event) }}, - ], onclick: function(event) { - can.isCmdMode() && event.currentTarget.scrollIntoView() + ], onclick: function(event) { can.onmotion.scrollIntoView(can, tabs._target) if (can.page.ClassList.has(can, tabs._target, html.SELECT)) { return } can.onmotion.select(can, action, html.DIV_TABS, tabs._target), can.base.isFunc(cb) && cb(event, tabs) }, oncontextmenu: function(event) { var target = tabs._target, _action = can.page.parseAction(can, tabs) @@ -182,7 +191,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target, cb) { "Close Other", function(event) { target.click(), can.page.SelectChild(can, action, html.DIV_TABS, function(target) { target == tabs._target || target._close() }) }, "Rename Tabs", function(event) { can.user.input(event, can, [mdb.NAME], function(list) { can.page.SelectOne(can, target, html.SPAN, function(target) { can.page.Modify(can, target, list[0]||tabs.name) }) - can.onexport.tabs && can.onexport.tabs(can) + // can.onexport.tabs && can.onexport.tabs(can) }) }, menu.meta, ), ["Close", "Close Other", "Rename Tabs", ""].concat(can.base.getValid(menu.list, can.core.Item(menu.meta)), _action), function(event, button, meta) { (meta[button]||menu)(can.request(event, tabs), button, meta)