From 94b4faee59204e6053fdcebd1e7ea6777c4457de Mon Sep 17 00:00:00 2001 From: shy Date: Sun, 19 May 2024 17:02:46 +0800 Subject: [PATCH] add some --- index.css | 168 ++++++++++------------ plugin/local/code/inner.css | 2 +- plugin/local/code/inner.js | 5 +- plugin/local/code/inner/debug.js | 15 -- plugin/local/code/inner/favor.js | 30 ---- plugin/local/code/inner/output.js | 6 - plugin/local/code/inner/search.js | 7 +- plugin/local/code/inner/sess.js | 21 --- plugin/local/code/inner/template.js | 21 --- plugin/local/code/vimer.css | 3 +- plugin/local/code/vimer.js | 72 ++++++---- plugin/local/code/xterm.js | 211 +++++++--------------------- plugin/local/team/plan.js | 2 +- plugin/local/wiki/draw.js | 2 +- plugin/local/wiki/feel.js | 2 +- plugin/state.js | 6 +- plugin/story/studio.js | 8 +- plugin/table.js | 18 +-- 18 files changed, 198 insertions(+), 401 deletions(-) delete mode 100644 plugin/local/code/inner/debug.js delete mode 100644 plugin/local/code/inner/favor.js delete mode 100644 plugin/local/code/inner/output.js delete mode 100644 plugin/local/code/inner/sess.js delete mode 100644 plugin/local/code/inner/template.js diff --git a/index.css b/index.css index 61a7f07b..20c3c098 100644 --- a/index.css +++ b/index.css @@ -1,35 +1,35 @@ /* variable */ @media (prefers-color-scheme: light) { -body { --plugin-bg-color:white; --plugin-fg-color:black; } -body { - --code-keyword:darkblue; --code-comment:green; - --code-function:darkcyan; --code-constant:gray; --code-string:brown; - --code-package:blue; --code-datatype:cornflowerblue; --code-object:purple; -} + body { --plugin-bg-color:white; --plugin-fg-color:black; } + body { + --code-keyword:darkblue; --code-comment:green; + --code-function:darkcyan; --code-constant:gray; --code-string:brown; + --code-package:blue; --code-datatype:cornflowerblue; --code-object:purple; + } } @media (prefers-color-scheme: dark) { -body { --plugin-bg-color:black; --plugin-fg-color:silver; } -body { - --code-keyword:royalblue; --code-comment:green; - --code-function:lightgreen; --code-constant:gray; --code-string:orange; - --code-package:lightskyblue; --code-datatype:lavender; --code-object:silver; -} + body { --plugin-bg-color:black; --plugin-fg-color:silver; } + body { + --code-keyword:royalblue; --code-comment:green; + --code-function:lightgreen; --code-constant:gray; --code-string:orange; + --code-package:lightskyblue; --code-datatype:lavender; --code-object:silver; + } } body.light { --plugin-bg-color:white; --plugin-fg-color:black; - --code-keyword:darkblue; --code-comment:green; + --code-keyword:darkblue; --code-comment:green; --code-function:darkcyan; --code-constant:gray; --code-string:brown; - --code-package:blue; --code-datatype:cornflowerblue; --code-object:purple; + --code-package:blue; --code-datatype:cornflowerblue; --code-object:purple; } body.dark { --plugin-bg-color:black; --plugin-fg-color:silver; - --code-keyword:dodgerblue; --code-comment:green; + --code-keyword:dodgerblue; --code-comment:green; --code-function:lightgreen; --code-constant:gray; --code-string:orange; - --code-package:lightskyblue; --code-datatype:lavender; --code-object:silver; + --code-package:lightskyblue; --code-datatype:lavender; --code-object:silver; } body { --shadow-color:var(--disable-fg-color); --border-color:var(--disable-fg-color); - --notice-color:blue; --danger-color:red; + --notice-color:blue; --danger-color:red; --code-bg-color:black; --code-fg-color:silver; --notice-bg-color:var(--notice-color); --notice-fg-color:white; --danger-bg-color:var(--danger-color); --danger-fg-color:var(--notice-fg-color); @@ -207,26 +207,22 @@ div.project div.action div.item input { border-right:var(--box-border); } 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.expand { margin-right:var(--input-margin); width:5px; float:left; transform: translate(1px, -1px) rotate(0deg); transition:all .5s; } +div.project div.expand.open { transform: translate(4px, -1px) rotate(90deg); transition:all .3s; } div.project div.list { margin-left:var(--button-margin); clear:both; } div.project div.list { border-left:var(--disable-fg-color) dashed 1px; } div.project div.list fieldset { position:static; } +div.project div.item { position:relative; } div.project div.item.select { border-right:var(--box-notice3); } -body.width6 fieldset.plugin>div.output>div.project div.list { margin-left:var(--legend-margin); } +div.project div.item:not(.hide) { white-space:pre; line-height:24px; cursor:pointer; padding:0 var(--input-padding); display:flex; align-items:center; } 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; - padding:0 var(--input-padding); display:flex; align-items:center; -} -div.project div.item img { height:var(--action-height); width:var(--action-height); } -div.project div.item img { margin:0; } -div.project div.item:not(:hover) input:not([type=button]) { border-right:0; } +div.project div.item:not(:hover) input:not([type=button]) { border-left:0; border-right:0; } div.project div.item.filter { background-color:var(--plugin-bg-color); padding:0; width:100%; position:sticky; top:0; z-index:1; } div.project div.item.filter>input { padding:0 25px; width:100% !important; } div.project div.item.search { padding:0; width:100%; } div.project div.item.search>input { padding:0 25px; width:100%; } -div.project div.expand { margin-right:var(--input-margin); width:5px; float:left; transform: translate(1px, -1px) rotate(0deg); transition:all .5s; } -div.project div.expand.open { transform: translate(4px, -1px) rotate(90deg); transition:all .3s; } -div.project div.item { position:relative; } +div.project div.item img { height:var(--action-height); width:var(--action-height); } +div.project div.item img { margin:0; } div.project div.item>div.name { padding:0 var(--input-padding); } div.project div.item>div.icon { position:absolute; right:var(--input-padding); } div.project div.item>div.icon:hover { background-color:var(--hover-bg-color); } @@ -255,8 +251,8 @@ div.toggle.project { top:20%; left:0; border-top-right-radius:var(--plugin-radiu 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); } div.project:not(.toggle) { width:var(--project-width); flex:0 0 var(--project-width); } -fieldset.story div.project:not(.toggle) { width:230px; flex:0 0 230px; } div.layout>div.profile:not(.toggle) { width:50%; flex:0 0 50%; } +fieldset.story div.project:not(.toggle) { width:230px; flex:0 0 230px; } /* fieldset */ body.mobile div.item.online.state { display:none; } div.item.online.state { margin-left:var(--button-margin) !important; display:block; align-items:center; } @@ -267,7 +263,7 @@ div.item.online.state img:hover { background-color:var(--hover-bg-color); } div.item.online.state:not(:hover) img:not(:first-child) { margin-right:-20px; } fieldset.output>div.header { display:none; } fieldset>div.header { display:contents; } -fieldset>div.header>div { line-height:22px; padding:var(--input-padding); margin:0 var(--input-margin); height:var(--action-height); float:right; } +fieldset>div.header>div { line-height:22px; padding:var(--input-padding); height:var(--action-height); float:right; } fieldset>div.header>div.avatar { padding:0; } fieldset>div.header div.online { padding:0; } fieldset>div.header img { height:var(--action-height); float:right; } @@ -395,6 +391,7 @@ body>div.input.login>div.display div.sso div.item>img { height:var(--action-heig body>div.input.login>div.display div.sso div.item>span { line-height:var(--action-height); padding:var(--input-padding); } body>div.input.simple td:first-child { display:none; } body>div.upload div.action input[type=file] { width:var(--form-width); } +body>div.upload div.action div.item.close input { display:none; } body>div.upload div.output { border:var(--box-notice); } body>div.upload div.output div.progress { background-color:var(--progress-bg-color); height:10px; width:0; } body>div.upload div.status div.cost { float:left; } @@ -552,7 +549,8 @@ fieldset.studio fieldset.story>legend { border-top-left-radius:0; } fieldset.float { box-shadow:var(--plugin-box-shadow); border:var(--plugin-border); border-radius:var(--plugin-radius); } fieldset:not(.panel):hover { box-shadow:var(--notice-box-shadow); } body:not(.cmd) fieldset.plugin>legend { box-shadow:var(--legend-box-shadow); margin-right:var(--legend-margin); } -body:not(.cmd) fieldset.story>legend { box-shadow:var(--legend-box-shadow); margin-right:var(--legend-margin); } +body:not(.cmd) fieldset.story>legend { box-shadow:var(--legend-box-shadow); } +// body:not(.cmd) fieldset.story:not(.float)>legend { margin-right:var(--legend-margin); } fieldset.story>legend { border-top-left-radius:var(--plugin-radius); } fieldset.float>form.option input { border-top:0; } fieldset.float>div.action input { border-top:0; } @@ -582,8 +580,8 @@ 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); } -body:not(.mobile) fieldset.story>div.action div.item:first-child { margin-left:var(--button-margin); } +body:not(.mobile) fieldset.plugin>div.action div.item:first-child:not(.icons) { margin-left:var(--button-margin); } +body:not(.mobile) fieldset.story>div.action div.item:first-child:not(.icons) { margin-left:var(--button-margin); } /* font */ body.windows { --code-font-family:"Courier New"; } body { font-family:var(--body-font-family); } @@ -777,7 +775,6 @@ body.mobile fieldset.plugin:not(.float):not(.full):not(.cmd)>div.action>div.butt body.mobile fieldset.Header { padding:0; width:100%; position:fixed; top:0; } body.mobile fieldset.Header>div.output { font-size:1.4rem; line-height:var(--header-height); } body.mobile fieldset.Header>div.output div.item { padding:0px var(--plugin-padding); } -// body.mobile fieldset.Header>div.output div.item.title>span { display:none; } body.mobile fieldset.Header>div.output div.item.text.title.search { display:none; } body.mobile fieldset.Search>div.action>div.item.filter>input { width:100%; } body.mobile fieldset.Search>div.action>div.item.filter>span { position:absolute; } @@ -822,56 +819,58 @@ 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 */ +fieldset.iframe>form.option>div.item.hash input { width:var(--form-width); } +fieldset.iframe.float>form.option>div.item.hash input { width:var(--form-width); } 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); } +fieldset.qrcode>div.output div.code { padding:0; } +fieldset.xterm>div.output>div.project { font-family:var(--code-font-family); } +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.inner.float>div.status { display:none; } +fieldset.dream>div.output>div.item div.content>span { padding:0 var(--input-padding); } +fieldset.dream>div.output>div.item div.content>span.files { background-color:purple; color:var(--notice-fg-color);} +fieldset.dream>div.output>div.item div.content>span.add { background-color:var(--notice-bg-color); color:var(--notice-fg-color);} +fieldset.dream>div.output>div.item div.content>span.del { background-color:var(--danger-bg-color); color:var(--danger-fg-color);} +fieldset.dream>div.output>div.item.begin>div.title { color:var(--disable-fg-color); font-style:italic; text-decoration:line-through; } +fieldset.dream>div.output>div.item.login { border:var(--box-danger); } +fieldset.dream>div.output>div.item.server { border:var(--box-notice); } +fieldset.dream>div.output>div.item.origin { border:var(--box-danger); } +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.web.stats>div.output { align-items: normal; } +fieldset.web.code.git>div.output>fieldset.web.code.inner>div.output { overflow:auto; } +fieldset.web.code.git.total.draw div.output { text-align:center; } +fieldset.web.code.git.trend>div.output rect { cursor:pointer; } +fieldset.web.code.git.status>div.output table.content { width:100%; } fieldset.web.code.docker.studio>div.output>fieldset>legend { display:none; } fieldset.web.code.docker.studio>div.output>fieldset>form.option>div:first-child { margin-left:var(--button-margin); } fieldset.web.code.system.unicode>div.output>table.content th { text-align:center; cursor:default;} fieldset.web.code.system.unicode>div.output>table.content td { text-align:center; cursor:default; } +fieldset.web.wiki.word>div.output>fieldset.story:not(.full) { margin:var(--title-margin) 0; } +fieldset.web.wiki.word>div.output fieldset.story:not(.float):not(.full)>form.option>div.icon.delete { display:none; } fieldset.web.chat.wx.scan>div.output>table.content tr.expired { color:var(--disable-fg-color); } fieldset.web.chat.wx.ide>div.output>table.content tr.current { background-color:var(--hover-bg-color); } +fieldset.web.chat.script>div.output>fieldset.story { margin-top:20px; } +fieldset.web.chat.script>div.output>table.content tr.done { background-color:var(--notice-bg-color); color:var(--notice-fg-color); } +fieldset.web.chat.location>div.output>div.layout>div.layout { position:relative; } +fieldset.web.chat.location>div.output .amap-toolbar { z-index:unset; } +fieldset.web.chat.location>div.output .amap-controls { z-index:unset; } +fieldset.web.chat.location>div.output .amap-maptypecontrol { z-index:unset; } +fieldset.web.chat.location>div.output>div.layout>div.layout>div.profile { background-color:var(--plugin-bg-color); position:absolute; right:0; width:360px; z-index:2; border-left:none; } +fieldset.web.chat.color table.content { border-collapse:collapse; } fieldset.web.mall.region>div.output>table.content td:nth-child(3) { text-align:right; } fieldset.web.mall.region>div.output>table.content td:nth-child(4) { text-align:right; } fieldset.web.mall.region>div.output>table.content td:nth-child(5) { text-align:right; } fieldset.web.mall.region>div.output>fieldset.web.mall.region.float>div.action { display:none; } -fieldset.web.dream>div.output>div.item div.content>span { padding:0 var(--input-padding); } -fieldset.web.dream>div.output>div.item div.content>span.files { background-color:purple; color:var(--notice-fg-color);} -fieldset.web.dream>div.output>div.item div.content>span.add { background-color:var(--notice-bg-color); color:var(--notice-fg-color);} -fieldset.web.dream>div.output>div.item div.content>span.del { background-color:var(--danger-bg-color); color:var(--danger-fg-color);} fieldset.feel.play.float>div.output { justify-content:center; } -fieldset.xterm>form.option>div.item.text.hash input { width:var(--url-input-width); } -fieldset.xterm.float>form.option>div.item.hash input { width:var(--form-width); } -fieldset.iframe.float>form.option>div.item.hash input { width:var(--form-width); } -fieldset.iframe>form.option>div.item.hash input { width:var(--form-width); } -fieldset.inner.float>div.status { display:none; } -fieldset.web.chat.color table.content { border-collapse:collapse; } fieldset.user>form.option>div.item.username input { width:var(--project-width); } fieldset.offer>div.output>table.content tr.invite { background-color:var(--notice-bg-color); color:var(--notice-fg-color); } fieldset.apply>div.output>table.content.detail.apply tr.action td.action { background-color:var(--notice-bg-color); color:var(--notice-fg-color); } -fieldset.inner>div.output>div.project div.item.modify { background-color:#00800036; } -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.xterm>div.action>div.tabs:only-child { display:none; } -fieldset.xterm>div.layout { clear:both; } -fieldset.xterm>form.option>div.item.args1 { display:none; } -fieldset.xterm>form.option>div.item.args0 { display:none; } -fieldset.xterm div.layout div.output { border-left:var(--box-border); border-top:var(--box-border); } -fieldset.xterm div.layout div.output.select { border:var(--box-border)} -fieldset.dream>div.output.card>div.item.begin>div.title { color:var(--disable-fg-color); font-style:italic; text-decoration:line-through; } -fieldset.dream>div.output.card>div.item.login { border:var(--box-danger); } -fieldset.dream>div.output.card>div.item.server { border:var(--box-notice); } -fieldset.dream>div.output.card>div.item.origin { border:var(--box-danger); } fieldset.trans>div.output>fieldset { margin:var(--button-margin); } fieldset.config form.option input[name=key] { width:var(--project-width); } -fieldset.qrcode>div.output div.code { padding:0; } fieldset.rich>div.output>table.content { font-family:var(--code-font-family); } fieldset.plan div.output div.content>table.content { height:100%; width:100%; } fieldset.plan>div.output>div.layout>div.layout>div.profile:not(.toggle) { width:unset; flex:unset; } @@ -884,24 +883,9 @@ fieldset.draw>div.output>div.layout>div.layout>div.profile { width:var(--project fieldset.draw div.output svg { margin-bottom:-5px; } fieldset.draw div.output svg { min-height:100%; } fieldset.draw div.output { display:flex; flex-direction:row; } -fieldset.draw.trends div.output { overflow:hidden; } -body:not(.dark) fieldset.draw.trends div.output svg { background-color:#1b5b738c; } fieldset.draw.spides div.output svg text { cursor:pointer; } fieldset.draw.spides div.output svg path { stroke-width:1; } -fieldset.web.stats>div.output { align-items: normal; } -fieldset.web.code.git>div.output>fieldset.web.code.inner>div.output { overflow:auto; } -fieldset.web.code.git.total.draw div.output { text-align:center; } -fieldset.web.code.git.trend>div.output rect { cursor:pointer; } -fieldset.web.code.git.status>div.output table.content { width:100%; } -fieldset.web.wiki.word>div.output>fieldset.story:not(.full) { margin:var(--title-margin) 0; } -fieldset.web.wiki.word>div.output fieldset.story:not(.float):not(.full)>form.option>div.icon.delete { display:none; } -fieldset.web.chat.script>div.output>fieldset.story { margin-top:20px; } -fieldset.web.chat.script>div.output>table.content tr.done { background-color:var(--notice-bg-color); color:var(--notice-fg-color); } -fieldset.web.chat.location>div.output>div.layout>div.layout { position:relative; } -fieldset.web.chat.location>div.output .amap-toolbar { z-index:unset; } -fieldset.web.chat.location>div.output .amap-controls { z-index:unset; } -fieldset.web.chat.location>div.output .amap-maptypecontrol { z-index:unset; } -fieldset.web.chat.location>div.output>div.layout>div.layout>div.profile { background-color:var(--plugin-bg-color); position:absolute; right:0; width:360px; z-index:2; border-left:none; } +fieldset.draw.trends div.output { overflow:hidden; } fieldset.can.data>div.output { font-family:var(--code-font-family); font-size:var(--code-font-size); white-space:pre; } fieldset.can.data>div.output div.item:not(.hide) { display:flex; gap:5px; } fieldset.can.data>div.output div.view div.item:not(.hide) { display:block; } @@ -931,11 +915,6 @@ fieldset.studio>div.action>div.item:not(.icons) { font-style:italic; } 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); } -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); } @@ -946,13 +925,23 @@ fieldset.Action.tabs table.content { width:100%; } fieldset.Action>div.output>fieldset.plugin:not(.float):not(.full):not(.cmd) { padding:var(--plugin-padding); margin:var(--plugin-margin); } fieldset.Action>div.output>fieldset.plugin:not(.float):not(.full):not(.cmd)>legend { float:none; } fieldset.Action>div.output>fieldset.plugin:not(.float):not(.full):not(.cmd)>legend:not(:hover) { background-color:var(--plugin-bg-color); } -body.mobile fieldset.float:not(.full):not(.cmd)>legend { float:none; } +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; } +fieldset.Action:not(.horizon):not(.grid)>fieldset.plugin>form.option>div.item.text.path>input { width:var(--project-width); } +body:not(.debug) fieldset.plugin.can._notfound { 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); } +body:not(.dark) fieldset.draw.trends div.output svg { background-color:#1b5b738c; } body.width6 fieldset.plugin.word>form.option>div.item.text>input { width:var(--project-width); } +body.width6 fieldset.plugin>div.output>div.project div.list { margin-left:var(--legend-margin); } body.width6 fieldset.plugin.iframe>form.option input[name=hash] { width:var(--form-width); } body.width6 fieldset.plugin.trans>form.option>div.item.text>input { width:var(--project-width); } 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; } +body.mobile fieldset.float form.option div.item.text { display:none; } +body.mobile fieldset.float:not(.full):not(.cmd)>legend { float:none; } 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); } @@ -963,7 +952,6 @@ body.windows fieldset.inner>div.output { overflow:hidden; } body.windows fieldset.inner>div.output>div.layout>div.layout>div.profile { overflow:hidden; } body.white fieldset.inner.cmd>div.output>div.layout>div.tabs div:not(.select):not(:hover) { background-color:transparent; } body.zh fieldset.inner>div.output>div.project>div.zone>div.item { letter-spacing:10px; border-top:var(--box-border); box-shadow:var(--legend-box-shadow); } -body:not(.debug) fieldset.plugin.can._notfound { display:none; } fieldset.story.web.chat.wx.agent { position:fixed; left:0; bottom:0; } div.output>fieldset.xterm.story>form.option>div.item.hash input { width:var(--form-width); } div.output>fieldset.iframe.story>form.option>div.item.hash input { width:var(--url-input-width); } diff --git a/plugin/local/code/inner.css b/plugin/local/code/inner.css index dfc1e67a..f1bd3636 100644 --- a/plugin/local/code/inner.css +++ b/plugin/local/code/inner.css @@ -70,7 +70,7 @@ div.input.inner.find.float div.action div.item.text input { width:var(--project- 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 div.item.text input[type=text] { 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; } diff --git a/plugin/local/code/inner.js b/plugin/local/code/inner.js index 1608f21c..6e42b58f 100644 --- a/plugin/local/code/inner.js +++ b/plugin/local/code/inner.js @@ -61,7 +61,7 @@ Volcanos(chat.ONIMPORT, { 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) }) }) - can.onmotion.delay(can, function() { can.page.Select(can, carte._target, html.DIV_ITEM, function(target) { + carte && can.onmotion.delay(can, function() { can.page.Select(can, carte._target, html.DIV_ITEM, function(target) { can.onappend.style(can, can.base.beginWith(target.innerText, "- ")? aaa.PRIVATE: aaa.PUBLIC, target) }) }) }}]) @@ -205,7 +205,7 @@ Volcanos(chat.ONIMPORT, { process: function(can, msg, target, height, width, cb) { can.onmotion.clear(can, target) if (msg.Option(ice.MSG_PROCESS) == ice.PROCESS_FIELD) { msg.Table(function(item) { item.type = chat.STORY, item.height = height, item.width = width, item.display = msg.Option(ice.MSG_DISPLAY) - if (can.base.isIn(item.index, web.CODE_XTERM, web.WIKI_WORD)) { item.style = html.OUTPUT } + if (can.base.isIn(item.index, web.WIKI_WORD)) { item.style = html.OUTPUT } can.onimport.plug(can, item, function(sub) { sub.onaction.close = function() { can.onmotion.hidden(can, target), can.onimport.layout(can) } sub.onexport.output = function(_sub, _msg) { can.base.isFunc(cb) && cb(_sub.sup, _msg) } @@ -547,7 +547,6 @@ Volcanos(chat.ONEXPORT, { text: function(can, line) { return can.core.Value(can.page.SelectOne(can, line, "td.text"), "innerText") }, size: function(can, size, full) { if (size > 1) { return size } if (size > 0) { return size*full } }, keys: function(can, path, file) { return [path||can.Option(nfs.PATH), file||can.Option(nfs.FILE)].join(nfs.DF) }, - hash: function(can) { return can.misc.SearchHash(can, can.Option(nfs.PATH), can.Option(nfs.FILE), can.Option(nfs.LINE)) }, content: function(can) { return can.page.Select(can, can.current&&can.current.content||can.ui.content, "td.text", function(item) { return item.innerText.trimEnd() }).join(lex.NL) }, position: function(can, index, total) { total = total||can.ui.content._max; return (parseInt(index))+nfs.PS+parseInt(total)+" = "+parseInt((index)*100/total)+"%" }, selection: function(can, str) { var s = document.getSelection().toString(), begin = str.indexOf(s), end = begin+s.length diff --git a/plugin/local/code/inner/debug.js b/plugin/local/code/inner/debug.js deleted file mode 100644 index 46597b98..00000000 --- a/plugin/local/code/inner/debug.js +++ /dev/null @@ -1,15 +0,0 @@ -Volcanos(chat.ONIMPORT, {_init: function(can, msg) { - can.core.List(can.misc._list, function(item) { - msg.Push(mdb.TIME, item[0]) - msg.Push(nfs.FILE, item[1].split(nfs.DF)[0].split("?")[0]) - msg.Push(nfs.LINE, item[1].split(nfs.DF)[1]) - msg.Push(mdb.TYPE, item[2]) - msg.Push(mdb.NAME, item[3]) - msg.Push(mdb.TEXT, item.slice(4).join(lex.SP)||"") - }), msg.StatusTimeCount(), can.onmotion.clear(can), can.onappend.table(can, msg) - can.page.Select(can, can._option, "input[name=name]", function(target) { - target.onkeyup = function(event) { can.misc.Event(event, can, function(msg) { - can.onmotion.highlight(can, target.value) - }) } - }) -}}) diff --git a/plugin/local/code/inner/favor.js b/plugin/local/code/inner/favor.js deleted file mode 100644 index ee235409..00000000 --- a/plugin/local/code/inner/favor.js +++ /dev/null @@ -1,30 +0,0 @@ -Volcanos(chat.ONIMPORT, {_init: function(can, cb) { - can.onimport.toolkit(can, {index: "web.code.favor"}, function(sub) { - sub.run = function(event, cmds, cb) { var msg = can.request(event) - if (can.misc.runAction(can, msg, cmds, cb, kit.Dict( - code.INNER, function(cmds) { - can.onimport.tabview(can, msg.Option(nfs.PATH), msg.Option(nfs.FILE), msg.Option(nfs.LINE)) - }, - ))) { return } - - can.runAction(event, code.FAVOR, cmds, function(msg) { - sub.onmotion.clear(sub), sub.onappend.table(sub, msg, function(value, key, index, line) { - if (msg.append.length == 2 && msg.append[0] == mdb.KEY && msg.append[1] == mdb.VALUE) { - if (key == mdb.VALUE) { key = line.key } - } - if (key != ctx.ACTION) { value = sub.page.replace(sub, value, nfs.PWD, "") } - - return {text: ["", html.TD], list: [{text: [value, html.DIV]}], onclick: function(event) { var target = event.target - if ([mdb.ZONE, mdb.ID].indexOf(key) > -1) { return sub.onimport.change(event, sub, key, value) } - - if (target.tagName == "INPUT" && target.type == html.BUTTON) { var msg = sub.request(event, line, sub.Option()) - return sub.runAction(event, target.name, [], function(msg) { sub.run() }) - } - - line.line && can.onimport.tabview(can, line.path, line.file.replace(nfs.PWD, ""), parseInt(line.line)) - }} - }, sub._output), sub.onappend._status(sub, msg.Option(ice.MSG_STATUS)) - }) - }, can.base.isFunc(cb) && cb(sub) - }) -}}) diff --git a/plugin/local/code/inner/output.js b/plugin/local/code/inner/output.js deleted file mode 100644 index facfaf67..00000000 --- a/plugin/local/code/inner/output.js +++ /dev/null @@ -1,6 +0,0 @@ -Volcanos(chat.ONIMPORT, { - _init: function(can, msg, cb) { cb && cb(msg) - can._output.innerHTML = can.misc.sessionStorage(can, [can.ConfIndex(), "output"])||"" - can.page.style(can, can._output, html.MIN_HEIGHT, 200, html.WIDTH, can.ConfWidth(), "white-space", "pre", "padding", "10px") - }, -}) \ No newline at end of file diff --git a/plugin/local/code/inner/search.js b/plugin/local/code/inner/search.js index 75fea40f..0fa47b6e 100644 --- a/plugin/local/code/inner/search.js +++ b/plugin/local/code/inner/search.js @@ -1,9 +1,6 @@ -Volcanos(chat.ONIMPORT, { - list: [mdb.VALUE, "close:button"], +Volcanos(chat.ONIMPORT, {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=value]", function(target) { - can.onmotion.hidden(can, target) - }) + can.page.Select(can, can._option, "input[name=value]", function(target) { can.onmotion.hidden(can, target) }) }, }) diff --git a/plugin/local/code/inner/sess.js b/plugin/local/code/inner/sess.js deleted file mode 100644 index 70a700d0..00000000 --- a/plugin/local/code/inner/sess.js +++ /dev/null @@ -1,21 +0,0 @@ -Volcanos(chat.ONIMPORT, {_init: function(can, args, cb) { var SESS = "web.code.sess" - can.onimport.toolkit(can, {index: SESS}, function(sub) { - sub.run = function(event, cmds, cb) { var msg = can.request(event) - if (can.misc.runAction(can, msg, cmds, cb, kit.Dict( - nfs.SAVE, function(cmds) { - can.runActionCommand(event, SESS, [ctx.ACTION, mdb.CREATE, - "tool", JSON.stringify(can.onexport.tool(can)), - "tabs", JSON.stringify(can.onexport.tabs(can)), - ], cb) - }, - nfs.LOAD, function(cmds) { - can.onimport.sess(can, { - tool: JSON.parse(msg.Option("tool")), - tabs: JSON.parse(msg.Option("tabs")), - }) - }, - ))) { return } - can.runActionCommand(event, SESS, cmds, cb) - }, can.base.isFunc(cb) && cb(sub) - }) -}}) diff --git a/plugin/local/code/inner/template.js b/plugin/local/code/inner/template.js deleted file mode 100644 index b3921cc6..00000000 --- a/plugin/local/code/inner/template.js +++ /dev/null @@ -1,21 +0,0 @@ -Volcanos(chat.ONIMPORT, {_init: function(can, args, cb) { - can.onimport.toolkit(can, {index: "web.code.template"}, function(sub) { - sub.run = function(event, cmds, cb) { var msg = sub.request(event, can.Option()) - if (can.misc.runAction(can, msg, cmds, cb, kit.Dict( - nfs.DEFS, function(cmds) { - can.user.input(event, can, can.base.Obj(msg.Option("args")||"[]"), function(data) { - var msg = can.request(event); can.core.Item(data, function(key, value) { msg.Option(key, value) }) - can.runActionCommand(event, "web.code.template", [nfs.DEFS].concat(cmds), function(msg) { - can.base.isFunc(cb) && cb(msg) - can.onimport.project(can, can.Option(nfs.PATH)) - can.onimport.tabview(can, can.Option(nfs.PATH), msg.Option("main"), "", function() { - can.onimport.tabview(can, can.Option(nfs.PATH), cmds[1], 1, function() {}) - }, true) - }) - }) - } - ))) { return } - can.runActionCommand(event, "web.code.template", cmds, cb) - }, can.base.isFunc(cb) && cb(sub) - }) -}}) diff --git a/plugin/local/code/vimer.css b/plugin/local/code/vimer.css index 4bd3b957..b824719f 100644 --- a/plugin/local/code/vimer.css +++ b/plugin/local/code/vimer.css @@ -19,5 +19,4 @@ fieldset.vimer>div.output.source>div.layout>div.layout>div.content div.complete 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 +fieldset.vimer>div.output>div.layout>div.tabs>div.tabs>div.tabs.origin.select { border-top:var(--box-danger3); } \ No newline at end of file diff --git a/plugin/local/code/vimer.js b/plugin/local/code/vimer.js index dab5bbe2..c98d32c2 100644 --- a/plugin/local/code/vimer.js +++ b/plugin/local/code/vimer.js @@ -22,20 +22,23 @@ Volcanos(chat.ONFIGURE, { source: function(can, target, zone, hash) { var args = [can.Option(nfs.PATH), can.Option(nfs.FILE)] 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 (can.base.beginWith(p, nfs.USR_LOCAL_WORK) || can.base.isIn(p, + nfs.USR_LEARNING, nfs.USR_INTSHELL, + nfs.USR_ICONS, nfs.USR_GEOAREA, nfs.USR_PROGRAM, nfs.USR_NODE_MODULES, + nfs.USR_WEBSOCKET, nfs.USR_GO_QRCODE, nfs.USR_GO_GIT, + )) { 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) { - 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 } - return item + function show(target, zone, path) { can.run(can.request({}, {dir_root: path, dir_deep: true}), [nfs.PWD], function(msg) { + var cache, list = can.core.List(msg.Table(), function(value) { + if (path == nfs.SRC && can.base.isIn(value.path, "main.ico", "main.svg", "version.go", "binpack.go", "binpack_usr.go")) { return } + if (path == nfs.USR_RELEASE && can.base.isIn(value.path, "conf.go", "binpack.go")) { return } + if (path == args[0] && args[1].indexOf(value.path) == 0) { value.expand = true } + return value }); 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) { + }, function(event, item, target) { 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 = [] }) @@ -63,22 +66,19 @@ Volcanos(chat.ONACTION, {_trans: {input: {main: "程序", top: "顶域"}}, }) }, reload: function(can, msg) { - function imports(str) { var block = "", count = 0; can.core.List(str.split(lex.NL), function(item) { - if (can.base.beginWith(item, "import (")) { block = can.core.Split(item)[0]; return } - if (can.base.beginWith(item, ")")) { block = ""; return } - if (can.base.beginWith(item, "import ")) { count++; return } + function imports(str) { var block = "", count = 0; can.core.List(str.split(lex.NL), function(text) { + if (can.base.beginWith(text, "import (")) { block = can.core.Split(text)[0]; return } + if (can.base.beginWith(text, ")")) { block = ""; return } + if (can.base.beginWith(text, "import ")) { count++; return } if (block == "import") { count++ } }); return count } if (can.onexport.parse(can) == nfs.GO) { var line = can.onaction.selectLine(can); can.onmotion.clear(can, can.ui.content), can.ui.content._max = 0 - can.core.List(msg.Result().split(lex.NL), function(item) { can.onaction.appendLine(can, item) }) + can.core.List(msg.Result().split(lex.NL), function(text) { can.onaction.appendLine(can, text) }) can.onaction.selectLine(can, line+imports(msg.Result())-imports(msg.Option(nfs.CONTENT))) } }, - remove: function(can, p) { - var target = can.ui.zone.source[p]; if (target._tabs) { target._tabs._close() } can.page.Remove(can, target) - }, trash: function(event, can, button) { var msg = can.request(event), p = msg.Option(nfs.PATH)+msg.Option(nfs.FILE) - can.onaction._run(event, can, button, [p], function(msg) { can.onaction.remove(can, p) }) + can.onaction._run(event, can, button, [p], function(msg) { can.ui.zone.source.refresh() }) }, script: function(event, can, button) { can.onaction._runs(event, can, button) }, module: function(event, can, button) { can.onaction._runs(can.request(event, {title: can.user.trans(can, button, "创建模块")}), can, button) }, @@ -89,14 +89,27 @@ Volcanos(chat.ONACTION, {_trans: {input: {main: "程序", top: "顶域"}}, }) } var toast = can.user.toastProcess(can, cli.RESTART); can.onmotion.delay(can, function() { toast.close(), can.user.toastSuccess(can, cli.RESTART) }, 3000) }) }, - "命令": function(event, can) { can.user.input(event, can, [{name: ctx.INDEX, need: "must"}, ctx.ARGS], function(list) { can.onimport.tabview(can, "", list[0]+(list[1]? mdb.FS+list[1]: ""), ctx.INDEX) }) }, - "插件": function(event, can) { can.user.input(can.request(event, {type: "plug"}), can, [{name: ctx.INDEX, need: "must"}, ctx.ARGS], function(list, data) { var sub = can.db.toolkit[list.join(",")]; if (sub) { sub.select(); return } - can.onimport.toolkit(can, {index: data.index, args: can.core.Split(data.args||"")}, function(sub) { can.db.toolkit[list.join(",")] = sub.select() }) + "命令": function(event, can) { can.user.input(event, can, [{name: ctx.INDEX, need: "must"}, ctx.ARGS], function(data) { + can.onimport.tabview(can, "", data.index+(data.args? mdb.FS+data.args: ""), ctx.INDEX) + }) }, + "插件": function(event, can) { can.user.input(can.request(event, {type: "plug"}), can, [{name: ctx.INDEX, need: "must"}, ctx.ARGS], function(list, data) { + var key = list.join(","), sub = can.db.toolkit[key]; if (sub) { return sub.select() } + can.onimport.toolkit(can, {index: data.index, args: can.core.Split(data.args||"")}, function(sub) { can.db.toolkit[key] = sub.select() }) + }) }, + "扩展": 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.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]) }) }, - 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 }, + insertLine: function(can, text, before) { + var line = can.onaction.appendLine(can, text) + 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 } can.current.line.appendChild(target), can.page.style(can, target, html.LEFT, td.offsetLeft-1, html.TOP, td.offsetTop, html.WIDTH, can.base.Min(td.offsetWidth, can.ui.content.offsetWidth-can.page.Select(can, can.current.line, "td.line")[0].offsetWidth)) target.value = td.innerText, can.db.mode == mdb.NORMAL && can.onkeymap._normal(can) @@ -105,9 +118,6 @@ Volcanos(chat.ONACTION, {_trans: {input: {main: "程序", top: "顶域"}}, }) }) }) }, }) -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 can.ui.current.focus(), count != undefined && can.onkeymap.cursorMove(can.ui.current, count, begin == undefined? count: begin) @@ -119,8 +129,8 @@ Volcanos(chat.ONKEYMAP, { 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) + _model: function(can, mode) { can.db.mode = mode, can.onimport.__tabPath(can, true), can.onmotion.toggle(can, can.ui.complete, false) + can.core.List([mdb.NORMAL, mdb.INSERT], function(mode) { can.page.ClassList.del(can, can._output, mode) }), can.page.ClassList.add(can, can._output, mode) }, _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) }, @@ -188,7 +198,7 @@ Volcanos(chat.ONKEYMAP, { v: shy("渲染界面", function(event, can) { can.onaction.show(event, can) }), r: shy("执行命令", function(event, can) { can.onaction.exec(event, can) }), - Escape: shy("切换模式", function(event, can) { can.onkeymap._plugin(can) }), + Escape: shy("切换模式", function(can) { can.onkeymap._plugin(can) }), ArrowLeft: shy("光标左移", function(can, target) { can.onkeymap.cursorMove(target, -1) }), ArrowRight: shy("光标右移", function(can, target) { can.onkeymap.cursorMove(target, 1) }), ArrowDown: shy("光标下移", function(can, target) { can.onkeymap.cursorDown(can, target) }), @@ -265,7 +275,7 @@ Volcanos(chat.ONKEYMAP, { d: shy("删除字符", function(can, target) { can.user.isWindows && can.onkeymap.deleteText(target, target.selectionStart, 1) }), }, insert: { - Escape: shy("退出编辑", function(event, can) { can.onkeymap._normal(can), can.ui.current._keylist = [] }), + Escape: shy("退出编辑", function(can) { can.onkeymap._normal(can), can.ui.current._keylist = [] }), ArrowUp: shy("光标上移", function(can, target) { can.onkeymap.cursorUp(can, target) }), ArrowDown: shy("光标下移", function(can, target) { can.onkeymap.cursorDown(can, target) }), Backspace: shy("删除字符", function(event, can, target) { if (target.selectionStart > 0 || !can.current.prev()) { return } can.onkeymap.prevent(event) diff --git a/plugin/local/code/xterm.js b/plugin/local/code/xterm.js index de33684b..72dd86b0 100644 --- a/plugin/local/code/xterm.js +++ b/plugin/local/code/xterm.js @@ -1,178 +1,73 @@ -(function() { const RECOVER_STORE = "recover:" -Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { can.page.requireModules(can, ["xterm/css/xterm.css", "xterm", "xterm-addon-fit", "xterm-addon-web-links"], function() { - var item = can.base.Obj(msg.TableDetail()); item.hash = item.hash||can.Option(mdb.HASH)||"only", can.onmotion.clear(can) - if (item.type == html.LAYOUT) { can.onimport._layout(can, item) } else { can.onimport._connect(can, item, can._output) } can.onimport.layout(can) - can.sup.onexport.link = function() { return can.misc.MergePodCmd(can, {pod: can.ConfSpace(), cmd: can.ConfIndex(), hash: item.hash}) } - can.sup.onexport.title(can, item.name||item.type), can.base.isFunc(cb) && cb(msg), can.onappend._status(can), can.onkeymap._build(can) +Volcanos(chat.ONIMPORT, { + _init: function(can, msg, cb) { can.page.requireModules(can, ["xterm/css/xterm.css", "xterm", "xterm-addon-fit", "xterm-addon-web-links"], function() { + if (can.Option(mdb.HASH) || can.Option("args0")) { var item = can.base.Obj(msg.TableDetail()); item.hash = item.hash||can.Option(mdb.HASH)||can.Option("args0")||"current" + can.onimport._connect(can, item, can._output) + } else { + can.ui = can.onappend.layout(can), can.onimport._project(can, msg, can.db.hash) + } cb && cb(msg) }) }, - _layout: function(can, item) { - function connect(item, output, tabs) { can.run(can.request({}, item), [item.hash], function(msg) { - can.core.Item(msg.TableDetail(), function(key, value) { item[key] = value }) - can.onappend._status(can), can.onimport._connect(can, item, output, tabs) - }, true); return output } - function show(list, target, root, tabs) { root = root||target, can.core.List(list, function(item) { - if (item.type.indexOf(html.LAYOUT) == 0) { - show(item.list, can.page.Append(can, target, [item.type])._target, root, tabs)._root = root - } else { - connect(item, can.page.Append(can, target, [html.OUTPUT])._target, tabs)._root = root - } - }); return target } - var main, output = can._output; can.core.List(can.base.Obj(item.text), function(item) { - if (item.type.indexOf(html.LAYOUT) == 0) { var tabs = can.onimport._tabs(can, item, {}) - var target = show(item.list, can.page.insertBefore(can, [item.type], can._status), null, tabs); target._tabs = tabs, tabs._output = target - if (item.type.indexOf(html.HIDE) == -1) { main = target } - } else { - var target = connect(item, output||can.page.insertBefore(can, [html.OUTPUT], can._status)); output = null - main = main||target - } - }), main && can.onaction.select(can, main) - }, - _tabs: function(can, item, output) { if (output != output._root && output._root) { return output._tabs = output._root._tabs } - var tabs = can.onimport.tabs(can, [{name: item.name||item.type||item.hash}], function() { - can.onmotion.delay(can, function() { var output = tabs._output; can.onaction.select(can, output._root||output) }) - }, function() { can.onaction.delete(can, tabs._output) }); return tabs._output = output, output._tabs = tabs - }, - _theme: function(can, item) { return can.base.Obj(item.theme)||( - can.getHeaderTheme() == html.LIGHT? {background: cli.WHITE, foreground: cli.BLACK, cursor: cli.BLUE}: - can.getHeaderTheme() == html.DARK? {foreground:"silver", cursor: "silver"}: - can.getHeaderTheme() == chat.BLACK? {background: "#061c3c9e", foreground:cli.WHITE, cursor: cli.WHITE}: - {background: "#d5cfcf3b", foreground: cli.BLACK, cursor: cli.BLUE} - ) }, - _connect: function(can, item, output, tabs, text) { - var term = new Terminal({fontSize: html.CODE_FONT_SIZE, tabStopWidth: 4, cursorBlink: true, theme: can.onimport._theme(can, item)}) - term._item = item, term._output = output, output._term = term, output._tabs || (tabs? (output._tabs = tabs): can.onimport._tabs(can, item, output)) - var fitAddon = new FitAddon.FitAddon(); term.loadAddon(fitAddon), term._fit = fitAddon, can.onmotion.delay(can, function() { fitAddon.fit() }) - term.onTitleChange(function(title) { can.onexport.title(can, term, title) }), can.onexport.title(can, term, item.name) + _project: function(can, msg, hash) { msg.Table(function(value) { + value.nick = `${value.hash}(${value.name||value.type||"ish"})`, value._select = value.hash == hash[0] + can.onimport.item(can, value, function(event, item, show, target) { + can.onimport.tabsCache(can, can.request(), value.hash, value, target, function() { + value._term = can.onimport._connect(can, value, can.ui.content) + }) + }) + }) }, + _connect: function(can, item, target, text) { + var term = new Terminal({fontSize: html.CODE_FONT_SIZE, tabStopWidth: 4, cursorBlink: true, theme: can.onimport._theme(can, item)}); term._item = item + term.onTitleChange(function(title) { can.onexport.title(can, term, title) }), can.onexport.title(can, term, item.nick) term.onResize(function(size) { can.onimport._resize(can, term, size) }) term.onData(function(data) { can.onimport._input(can, term, data) }) term.onCursorMove(function() { can.onexport.term(can, term) }) + var fitAddon = new FitAddon.FitAddon(); term.loadAddon(fitAddon), term._fit = fitAddon, can.onmotion.delay(can, function() { fitAddon.fit() }) term.loadAddon(new WebLinksAddon.WebLinksAddon()) - can.onmotion.clear(can, output), term.open(output), term.focus() - can.onengine.listen(can, chat.ONTHEMECHANGE, function() { term.selectAll(), can.onimport._connect(can, item, output, tabs, can.base.trimSuffix(term.getSelection(), lex.NL)) }) - can.page.style(can, output, html.BACKGROUND_COLOR, term._publicOptions.theme.background||cli.BLACK) - can.current = term - output.onclick = function() { output._tabs._current = output, term.focus(), can.onexport.term(can, term) - can.current = term - can.page.Select(can, can._fields, html.DIV_OUTPUT, function(target) { can.page.ClassList.set(can, target, html.SELECT, target == output) }) - }; return can.db = can.db||{}, can.db[item.hash] = term + can.onmotion.clear(can, target), term.open(target), term.focus() + can.onengine.listen(can, chat.ONTHEMECHANGE, function() { term.selectAll(), can.onimport._connect(can, item, target, can.base.trimSuffix(term.getSelection(), lex.NL)) }) + can.page.style(can, target, html.BACKGROUND_COLOR, term._publicOptions.theme.background||cli.BLACK) + return can.db[item.hash] = term + }, + _theme: function(can, item) { return can.base.Obj(item.theme)||( + can.getHeaderTheme() == html.LIGHT? {background: cli.WHITE, foreground: cli.BLACK, cursor: cli.BLUE}: + can.getHeaderTheme() == html.DARK? {foreground: cli.SILVER, cursor: cli.SILVER}: + can.getHeaderTheme() == chat.BLACK? {background: "#061c3c9e", foreground:cli.WHITE, cursor: cli.WHITE}: + {background: "#d5cfcf3b", foreground: cli.BLACK, cursor: cli.BLUE} + ) }, + _resize: function(can, term, size) { + can.runAction(can.request({}, size, term._item), web.RESIZE, [], function(msg) {}) }, - _resize: function(can, term, size) { can.runAction(can.request({}, size, term._item), web.RESIZE, [], function(msg) { - can.onexport.term(can, term); if (msg.IsErr()) { can.misc.Warn(msg.Result()) } - }) }, _input: function(can, term, data) { - can.runAction(can.request({}, {rows: term.rows, cols: term.cols}, term._item), html.INPUT, [btoa(data)], function(msg) { - if (msg.IsErr()) { can.misc.Warn(msg.Result()) } - }), can._output = term._output + can.runAction(can.request({}, {rows: term.rows, cols: term.cols}, term._item), html.INPUT, [btoa(data)], function(msg) {}) }, input: function(can, msg, hash, text) { var arg = msg.detail.slice(1); arg = [hash||arg[0], text||arg[1]] - term = can.db[arg[0]]||can.current, can.onimport._input(can, term, arg[1]) + term = can.db[arg[0]], can.onimport._input(can, term, arg[1]) }, - grow: function(can, msg, hash, text) { var arg = msg.detail.slice(1); arg = [hash||arg[0], text||arg[1]] - term = can.db[arg[0]]||can.current; arg[1] == "~~~end~~~"? can.onaction.delete(can, term._output): term.write(arg[1]); msg.Option(ice.LOG_DISABLE, ice.TRUE) + grow: function(can, msg, hash, text) { var arg = msg.detail.slice(1); arg = [hash||arg[0], text||arg[1]], term = can.db[arg[0]] + if (arg[1] == "~~~end~~~") { arg[0] == "current"? can.sup.onmotion._close({}, can.sup): can.sup.onimport._back(can.sup) } else { term.write(arg[1]) } }, - layout: function(can) { function show(target, height, width) { var list = can.page.SelectChild(can, target, can.page.Keys(html.DIV_OUTPUT, html.DIV_LAYOUT)) - var h = height/list.length, w = width; if (can.page.ClassList.has(can, target, html.FLEX)) { h = height, w = width/list.length } if (target == can._fields) { h = height, w = width } - can.core.List(list, function(target) { can.page.style(can, target, html.HEIGHT, h, html.WIDTH, w), can.page.ClassList.has(can, target, html.LAYOUT)? show(target, h, w): target._term && target._term._fit.fit() }) - } show(can._fields, can.ConfHeight(), can.ConfWidth()) }, -}) -Volcanos(chat.ONKEYMAP, { - _mode: { - normal: { - u: function(event, can) { can.onaction.split(event, can, html.FLOW) }, - v: function(event, can) { can.onaction.split(event, can, html.FLEX) }, - j: function(event, can) { can.onaction.selectSibling(can, html.FLOW) }, - k: function(event, can) { can.onaction.selectSibling(can, html.FLOW, true) }, - h: function(event, can) { can.onaction.selectSibling(can, html.FLEX, true) }, - l: function(event, can) { can.onaction.selectSibling(can, html.FLEX) }, - c: function(event, can) { can.onaction.tabnew(event, can) }, - e: function(event, can) { can.user.input({target: can._output._tabs}, can, [mdb.NAME], function(list) { can.onexport.title(can, can._output._term, list[0]) }) }, - n: function(event, can) { can._output._tabs.nextSibling && can._output._tabs.nextSibling.click() }, - p: function(event, can) { can._output._tabs.previousSibling && can._output._tabs.previousSibling.click() }, - s: function(event, can) { can.onaction.sess(event, can) }, - t: function(event, can) { can.user.input({target: can._output._tabs}, can, [ctx.INDEX, ctx.ARGS], function(list, data) { can.onimport.tool(can, [data], function(sub) { - sub.select(), sub.onexport.record = function(_, value) { can.onimport._input(can, can._output._term, value+lex.NL) } - }, can._fields) }) }, - f: function(event, can) { - var input = can.user.input({target: can._output._tabs}, can, [{type: mdb.TEXT, name: nfs.FILE, select: function(item) { - var ls = item.split(nfs.DF); switch (ls[0]) { - case "tabs": can.page.Select(can, can._action, [html.DIV_TABS, html.SPAN_NAME], function(target) { target.innerText == ls[1] && target.click() }); break - case web.LAYOUT: can.Option(mdb.HASH, ls[1]), can.Update(); break - case ctx.INDEX: can.onimport.tool(can, [ls[1]], function(sub) { sub.select() }); break - case ssh.SHELL: can.onaction.tabnew(can.request({}, {_handle: ice.TRUE, type: ls[1]}), can); break - default: can.onimport._input(can, can._output._term, item+lex.NL) - } input.cancel() - }, run: function(event, cmds, cb) { can.run(event, cmds, function(msg) { var _msg = can.request() - function push(type, name) { _msg.Push(nfs.FILE, can.core.List(arguments).join(nfs.DF)) } - can.page.Select(can, can._action, [html.DIV_TABS, html.SPAN_NAME], function(target) { push("tabs", target.innerText) }) - _msg.Copy(msg), can.core.Item(can.onengine.plugin.meta, function(key, value) { push(ctx.INDEX, "can."+key) }), cb(_msg) - }) }}], function(list) {}) - }, - Escape: function(can) { can.onmotion.clearFloat(can), can._output.click() }, - }, - }, _engine: {}, + layout: function(can) { can.ui.layout(can.ConfHeight(), can.ConfWidth(), 0, function() { + can.core.Item(can.db, function(hash, term) { term._fit && term._fit.fit() }) + can.db.value && can.db.value._term && can.onexport.term(can, can.db.value._term) + }) }, }) Volcanos(chat.ONACTION, { - tabnew: function(event, can) { can.Update(event, [ctx.ACTION, mdb.CREATE], function(msg) { can.Update(event, [msg.Result()], function(msg) { - can.onaction.select(can, can._output = can.page.insertBefore(can, [html.OUTPUT], can._status)), can.onimport._init(can, msg) - }) }) }, - split: function(event, can, button) { can.Update(event, [ctx.ACTION, mdb.CREATE], function(msg) { can.Update(event, [msg.Result()], function(msg) { - if (can.page.ClassList.has(can, can._output.parentNode, button)) { var layout = can._output.parentNode } else { - var layout = can.page.insertBefore(can, [{view: [[html.LAYOUT, button]]}], can._output); layout.appendChild(can._output) - } var root = can._output._root||layout, tabs = can._output._tabs; tabs._output = root, root._tabs = tabs - can._output._root = root, can._output = can.page.insertBefore(can, [html.OUTPUT], can._output.nextSibling, layout) - can._output._root = root, can._output._tabs = tabs, can.onimport._init(can, msg), can.onmotion.delay(can, function() { can._output.click() }) - }) }) }, - delete: function(can, output) { - if (can.page.Select(can, can._fields, html.DIV_OUTPUT).length == 1) { can.onmotion.delay(can, function() { - var args = can.Conf(ctx.ARGS) - if (args && args.length > 0) { - can.sup.onaction.close({}, can.sup) - } else { - can.sup.onimport._back(can.sup) - } - }) } - if (output == can.sup._output) { can.onmotion.clear(can, output) } else { while (output && output.parentNode.children.length == 1) { output = output.parentNode } - var next = output.parentNode; can.page.Remove(can, output), can.onmotion.delay(can, function() { can.page.Select(can, next, html.DIV_OUTPUT, function(target) { target.click() }) }) - } can.onimport.layout(can) - }, - select: function(can, output) { can.page.SelectChild(can, can._fields, can.page.Keys(html.DIV_OUTPUT, html.DIV_LAYOUT), function(target) { can.onmotion.hidden(can, target, target == output || target == output._root) - can.onmotion.delay(can, function() { - output._tabs._current? output._tabs._current.click(): (target.click(), can.page.SelectOne(can, target, html.DIV_OUTPUT, function(target) { target.click() })) - can.page.Select(can, target, can.page.Keys(html.DIV_OUTPUT, html.DIV_LAYOUT), function(target) { target._term && target._term._fit.fit() }) + create: function(event, can) { can.user.input(event, can, [mdb.TYPE, mdb.NAME, mdb.TEXT], function(data) { + can.runAction(can.request({}, data), mdb.CREATE, [], function(msg) { var hash = msg.Result() + can.run(event, [hash], function(msg) { var _msg = can.request(); _msg.Push(msg.TableDetail()) + can.onimport._project(can, _msg, [hash]) + }) }) }) }, - selectSibling: function(can, layout, prev) { var key = prev? "previousSibling": "nextSibling" - var output = can._output; while ((!output[key] || !can.page.ClassList.has(can, output.parentNode, layout)) && output != can._fields) { output = output.parentNode } - if (can.page.ClassList.has(can, output.parentNode, layout) && output[key]) { - can.page.SelectOne(can, output[key], html.DIV_OUTPUT, function(target) { target.click() })||output[key].click() - } + remove: function(event, can) { var item = event._msg.Option("_item") + can.runAction(event, mdb.REMOVE, [], function(msg) { + var value = item._item; value._tabs && value._tabs._close(), can.page.Remove(can, item) + }) }, - sess: function(event, can) { can.user.input({target: can._legend}, can, [mdb.NAME], function(list) { - can.runAction({}, mdb.CREATE, [mdb.TYPE, html.LAYOUT, mdb.NAME, list[0], mdb.TEXT, can.base.Format(can.onexport.sess(can))], function(msg) { - can.user.toastSuccess(can, can.user.trans(can, nfs.SAVE)+lex.SP+msg.Result()) - }, true) - }) }, - hidden: function(can) { can.page.Select(can, can._fields, "div.output,div.layout", function(target) { - target == can.sup._output? can.page.insertBefore(can, target, can._status): can.page.Remove(can, target) - }) }, }) Volcanos(chat.ONEXPORT, {list: [mdb.TIME, mdb.HASH, mdb.TYPE, mdb.NAME, "rows", "cols", "cursorY", "cursorX"], - term: function(can, term) { item = term._item - can.core.List(can.onexport.list, function(key) { - if (key == mdb.TIME && !item[key]) { return } - can.Status(key, can.base.getValid(item[key], term[key], term.buffer.active[key], "")+"") - }) - can.core.List([mdb.TIME, mdb.HASH, mdb.TYPE, mdb.NAME], function(key) { - if (key == mdb.TIME && !item[key]) { return } - can.Status(key, item[key]||"") - }) + term: function(can, term) { item = term._item, can.onexport.title(can, term, item.nick||item.name||item.type) + can.core.List(can.onexport.list, function(key) { if (key == mdb.TIME && !item[key]) { return } can.Status(key, can.base.getValid(item[key], term[key], term.buffer.active[key], "")+"") }) + can.core.List([mdb.TIME, mdb.HASH, mdb.TYPE, mdb.NAME], function(key) { if (key == mdb.TIME && !item[key]) { return } can.Status(key, item[key]||"") }) }, - sess: function(can) { return can.page.Select(can, can._action, html.DIV_TABS, function(target) { function show(target) { - var name = can.page.SelectOne(can, target._tabs, html.SPAN_NAME).innerText - if (can.page.ClassList.has(can, target, html.LAYOUT)) { - return {type: target.className, name: name, list: can.page.SelectChild(can, target, can.page.Keys(html.DIV_OUTPUT, html.DIV_LAYOUT), function(target) { return show(target) })} - } else { var item = target._term._item; return {type: item.type, name: name, text: item.text, hash: item.hash} } - } return show(target._output) }) }, - title: function(can, term, title) { term && term._output && can.page.Modify(can, can.page.SelectOne(can, term._output._tabs, html.SPAN_NAME), title), can.Status(mdb.NAME, title), can.sup.onexport.title(can.sup, title) }, + title: function(can, term, title) { can.Status(mdb.NAME, title), can.sup.onexport.title(can.sup, title) }, }) -})() diff --git a/plugin/local/team/plan.js b/plugin/local/team/plan.js index ef2f21e2..232ad252 100644 --- a/plugin/local/team/plan.js +++ b/plugin/local/team/plan.js @@ -26,7 +26,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onmotion.clear( } }, draggable: time != undefined, title: can.onexport.title(can, task), _init: function(target) { var item = can.onimport.item(can, {nick: task.name+nfs.DF+task.text}, function() { can.onmotion.delay(can, function() { can.onmotion.select(can, can.ui.content, html.TD, target.parentNode), can.onimport._profile(can, task), can.onimport._display(can, task), can.onimport.layout(can) - }) }, null, can.ui.project); task._target = target, target.onclick = function(event) { item.click() }, can.list[can.core.Keys(task.space, task.zone, task.id)] = target + }) }); task._target = target, target.onclick = function(event) { item.click() }, can.list[can.core.Keys(task.space, task.zone, task.id)] = target }} }), } }, diff --git a/plugin/local/wiki/draw.js b/plugin/local/wiki/draw.js index f6e2d29c..169c0caa 100644 --- a/plugin/local/wiki/draw.js +++ b/plugin/local/wiki/draw.js @@ -31,7 +31,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg) { var item = can.onimport.item(can, {name: groups}, function(event) { can.ui.group = target can.misc.SearchHash(can, groups, can.OptionPid()), can.Status(svg.GROUP, groups), can.onaction.show(event, can) can.core.List([svg.FONT_SIZE, svg.STROKE_WIDTH, svg.STROKE, svg.FILL], function(key) { can.Action(key, target.Value(key)||key) }) - }, function(event) { return {meta: can.onaction, list: can.onaction.menu_list} }, can.ui.project); target._item = item + }, function(event) { return {meta: can.onaction, list: can.onaction.menu_list} }); target._item = item groups == can.db.hash[0] && can.onmotion.delay(can, function() { item.click() }) }, _profile: function(can, target) { if (!can.ui.profile) { return } diff --git a/plugin/local/wiki/feel.js b/plugin/local/wiki/feel.js index 9eed7ddf..3d6fb760 100644 --- a/plugin/local/wiki/feel.js +++ b/plugin/local/wiki/feel.js @@ -34,7 +34,7 @@ Volcanos(chat.ONIMPORT, { if (index < can.db.begin || index >= can.db.begin+limit) { can.onimport.page(can, can.db.list, can.db.begin = index-index%limit) } - }, function() {}, can.ui.project); item._target = target, _target = can.base.isIn(item.path, can.db.hash[0]||can.Option(nfs.PATH)+can.Option(nfs.FILE))? target: _target||target + }); item._target = target, _target = can.base.isIn(item.path, can.db.hash[0]||can.Option(nfs.PATH)+can.Option(nfs.FILE))? target: _target||target if (can.isCmdMode() && item.path == can.misc.localStorage(can, [can.ConfIndex, "last"])) { can.Action(html.HEIGHT, html.HIDE), can.onmotion.hidden(can, can.ui.display) _target = target, can.onmotion.delay(can, function() { can.onaction.full({}, can) }) diff --git a/plugin/state.js b/plugin/state.js index 5e4c277c..f38a1230 100644 --- a/plugin/state.js +++ b/plugin/state.js @@ -255,9 +255,11 @@ Volcanos(chat.ONACTION, {list: ["刷新数据", } else { can.onaction._close(event, can), can.onexport.close(can) } - }, _close: function(event, can) { + }, + _close: function(event, can) { can.onengine.signal(can, "onremove", can.request(event, {query: can.page.getquery(can, can._target)})) - can.page.Remove(can, can._target) }, + can.page.Remove(can, can._target) + }, clear: function(event, can) { can.onmotion.clear(can, can._output) }, actions: function(event, can) { can.onmotion.toggle(can, can._action) }, help: function(event, can) { diff --git a/plugin/story/studio.js b/plugin/story/studio.js index ef059f47..982a8749 100644 --- a/plugin/story/studio.js +++ b/plugin/story/studio.js @@ -5,8 +5,8 @@ Volcanos(chat.ONIMPORT, { }, _tabs: function(can, msg) { can.onappend.style(can, web.STUDIO), can.onmotion.clear(can, can._action) var margin = html.PLUGIN_MARGIN*2 - msg.Table(function(value, index) { - value.nick = can.user.trans(can, value.index.split(nfs.PT).pop(), value.help) + msg.Table(function(value, index) { value.nick = can.user.trans(can, value.index.split(nfs.PT).pop(), value.help) + value._select == index == 0 var target = can.onimport.item(can, value, function() { if (value._plugin) { return can.onmotion.select(can, can._output, html.FIELDSET, value._plugin._target) } can.onappend.plugin(can, value, function(sub) { value._plugin = sub @@ -14,7 +14,7 @@ Volcanos(chat.ONIMPORT, { sub.onexport.output = function() { sub.onimport.size(sub, can.ConfHeight()-margin, can.ConfWidth()-margin, false) } target.oncontextmenu = function(event) { sub._legend.onclick(event) }, can.onmotion.hidden(can, sub._legend) }, can._output) - }, null, can._action); index == 0 && target.click(), can.onappend.style(can, "cmds", target) + }, null, can._action); can.onappend.style(can, "cmds", target) }), can.onappend._action(can, null, null, null, true) }, _full: function(can, msg) { @@ -26,7 +26,7 @@ Volcanos(chat.ONIMPORT, { can.onappend.plugin(can, value, function(sub) { sub.onexport.output = function() { sub.onimport.size(sub, can.ConfHeight(), can.ConfWidth()-can.ui.project.offsetWidth) } }, can.ui.content) - }, function() {}); index == 0 && target.click() + }); index == 0 && target.click() }) }, }) diff --git a/plugin/table.js b/plugin/table.js index df2c609c..4a3d819a 100644 --- a/plugin/table.js +++ b/plugin/table.js @@ -115,7 +115,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target, cb) { return {text: [item.nick||item.name||item.zone||item.sess, "", html.NAME], className: html.NAME} }, _menu: function(event, can, item, cbs, target) { target = target||event.currentTarget - if (can.base.isFunc(cbs)) { var menu = cbs(event, target, item); if (menu) { return can.user.carteRight(event, can, menu.meta, menu.list, menu) } } + if (can.base.isFunc(cbs)) { var menu = cbs(event, item, target); if (menu) { return can.user.carteRight(event, can, menu.meta, menu.list, menu) } } can.user.carteItem(event, can, item) }, _item: function(can, item, cb, cbs) { @@ -124,7 +124,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target, cb) { ].concat(item._label||[], [ item.action && {icon: "bi bi-three-dots", onclick: function(event) { can.onimport._menu(event, can, item, cbs) }}, ]), _init: function(target) { - can.ui[item.path] = target + target._item = item, item._item = target, can.ui[item.path] = target item._select && can.onmotion.delay(can, function() { target.click() }) }, onclick: function(event) { cb(event) @@ -136,7 +136,8 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target, cb) { return can.page.Append(can, _target||can.ui.project||can._output, [can.onimport._item(can, item, function(event) { var target = event.currentTarget can.onmotion.select(can, target.parentNode, html.DIV_ITEM, target) can.onengine.signal(can, "onproject", can.request(event, {type: "item", query: can.page.getquery(can, can._fields)+","+item.path})) - var show = target._list && can.onmotion.toggle(can, target._list); cb(event, item, show, target) + var show = target._list && can.onmotion.toggle(can, target._list); + if (show === false) { return } cb(event, item, show, target) }, cbs)])._target }, _itemselect: function(can, target) { @@ -182,9 +183,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.onmotion.delay(can, function() { - can.onmotion.scrollIntoView(can, tabs._target) - }) + can.onmotion.delay(can, function() { 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) @@ -194,7 +193,6 @@ 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) }) }, 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) @@ -210,7 +208,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target, cb) { }))._target }, tabsCache: function(can, msg, key, value, target, cb) { if (value._tabs) { return value._tabs.click() } value._tabs = can.onimport.tabs(can, [value], function() { can.onexport.hash(can, key), can.Status(value), can.db.value = value - can.page.ClassList.has(can, target, html.SELECT) || can.onmotion.delay(can, function() { target.click() }) + can.page.isSelect(target) || can.onmotion.delay(can, function() { target.click() }) if (can.onmotion.cache(can, function() { return key }, can.ui.content, can.ui.profile, can.ui.display)) { return can.onimport.layout(can) } if (cb && cb()) { return } if (msg.Append(ctx.INDEX)) { msg.Table(function(value, index) { @@ -272,7 +270,9 @@ Volcanos(chat.ONEXPORT, { action_value: function(can, key, def) { var value = can.Action(key); return can.base.isIn(value, ice.AUTO, key, undefined)? def: value }, tabs: function(can) {}, tool: function(can) { can.misc.sessionStorage(can, [can.ConfIndex(), "tool"], JSON.stringify(can.page.Select(can, can._status, html.LEGEND, function(target) { return target._meta }))) }, - hash: function(can, hash) { hash = typeof hash == code.STRING? hash.split(":"): hash, can.misc.SearchHash(can, hash), can.misc.localStorage(can, [can.ConfSpace()||can.misc.Search(can, ice.POD), can.ConfIndex(), "hash"], hash) }, + hash: function(can, hash) { hash = typeof hash == code.STRING? hash.split(":"): hash || can.core.Item(can.Option(), function(key, value) { return value||"" }) + can.misc.SearchHash(can, hash), can.misc.localStorage(can, [can.ConfSpace()||can.misc.Search(can, ice.POD), can.ConfIndex(), "hash"], hash) + }, session: function(can, key, value) { return can.misc[can.user.isWebview? "localStorage": "sessionStorage"](can, [can.Conf(ctx.INDEX), key, location.pathname].join(":"), value == ""? "": JSON.stringify(value)) }, table: function(can) { var msg = can._msg; if (msg.Length() == 0) { return } var res = [msg.append && msg.append.join(mdb.FS)] msg.Table(function(line, index, array) { res.push(can.core.Item(line, function(key, value) { return value }).join(ice.FS)) })