diff --git a/frame.js b/frame.js index 535f2b55..4cc910d4 100644 --- a/frame.js +++ b/frame.js @@ -151,7 +151,9 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { }), meta.inputs && sub.onappend._option(sub, meta, sub._option, meta.msg) sub._legend && (sub._legend.onclick = function(event) { can.user.carte(event, sub, sub.onaction, sub.onaction.list.concat([[ctx.ACTION].concat(can.core.Item(meta.feature._trans))]), function(event, button) { can.misc.Event(event, sub, function(msg) { - msg.RunAction(event, can.core.Value(sub, chat._OUTPUTS_CURRENT), [ctx.ACTION, button]) || msg.RunAction(event, sub, [ctx.ACTION, button]) || sub.runAction(event, button) + msg.RunAction(event, can.core.Value(sub, chat._OUTPUTS_CURRENT), [ctx.ACTION, button]) || msg.RunAction(event, sub, [ctx.ACTION, button]) || sub.runAction(event, button, [], function(msg) { + can.onappend._output(sub, msg) + }) }) }) }) sub.isCmdMode() && can.onappend.style(sub, can.misc.Search(can, ctx.STYLE)), sub.isCmdMode() && sub.Conf(can.misc.Search(can)) @@ -464,7 +466,12 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { if (type == FLOW) { var h = calc(item, target.offsetHeight, height) if (can.base.isObject(meta) && meta.layout) { meta.layout(h, width) } can.page.style(can, target, html.WIDTH, width), height -= h - } else { var w = calc(item, target.offsetWidth||target.style.width||_width/list.length, _width), h = height + } else { + if (item == "project") { + var w = 230, h = height + } else { + var w = calc(item, target.offsetWidth||target.style.width||_width/list.length, _width), h = height + } if (can.base.isObject(meta)) { meta.layout(h, w = _width/list.length) } can.page.style(can, target, html.HEIGHT, h, html.WIDTH, w), width -= w } diff --git a/index.css b/index.css index 95922487..e0e215d4 100644 --- a/index.css +++ b/index.css @@ -12,7 +12,7 @@ body { --svg-stroke-width:2; --box-border:var(--plugin-border-color) solid 1px; - --box-shadow:var(--body-fg-color) 3px 3px 10px; + --box-shadow:var(--body-fg-color) 2px 2px 8px; } /* element */ * { tab-size:4; box-sizing:border-box; padding:0; border:0; margin:0; } @@ -37,6 +37,11 @@ table.content.action td:last-child { position:sticky; right:2px; box-shadow: var table.content col.time { width:180px; } // table.content col.option { cursor:pointer; } table.content col.action { width:180px; } +body:not(.windows) table.content { font-family:monospace; } +body:not(.windows) div.code { font-family:monospace; } +body:not(.windows) div.tabs { font-family:monospace; } +body:not(.windows) div.path { font-family:monospace; } +body:not(.windows) div.carte { font-family:monospace; } h1 { text-align:center; margin:20px 0; } h2 { margin:20px 0; } h3 { margin:20px 0; } hr, td.hr { border-bottom:var(--plugin-border-color) dashed 1px; margin:5px; } ol, ul { margin-left:40px; } @@ -163,7 +168,8 @@ fieldset.cmd>div.action>div.button.icons>input { display:none; } fieldset:not(.float)>form.option>div.text>span.value { display:none; } fieldset.float>form.option>div.text>input { display:none; } fieldset.float>form.option>div.text>span { display:none; } -fieldset.float>form.option>div.text>span.value { padding:7px; height:32px; max-width:200px; display:block; overflow:auto; } +fieldset.float>form.option>div.text>span.value { white-space:pre; padding:7px; height:32px; max-width:200px; display:block; overflow:auto; } +// fieldset.float>form.option>div.text>span.value { padding:7px; height:32px; display:block; overflow:auto; } fieldset.float div.text:hover>span.icon.delete { visibility:hidden; } body.mobile:not(.landscape) fieldset.float>form.option>div.text>span.value { display:none; } body.windows form.option>div.icon { font-size:21px; } @@ -240,8 +246,9 @@ body { background-color:var(--body-bg-color); color:var(--body-fg-color); } legend { background-color:var(--legend-bg-color); border-radius:var(--input-radius); } select { border-radius:var(--input-radius); } input { background-color:var(--input-bg-color); color:var(--input-fg-color); border-radius:var(--input-radius); } -input[type=button]:hover { color:var(--hover-fg-color) } -input:not([type=button]) { border-radius:0; } +input[type=button]:hover { color:var(--hover-fg-color); background-color:var(--hover-bg-color); } +legend:hover { color:var(--hover-fg-color); background-color:var(--hover-bg-color); } +input:not([type=button]) { border-radius:0; border: var(--plugin-border-color) solid 1px; } input:not([type=button]):hover { border:var(--input-border); } input:not([type=button]):focus { border:var(--input-border); outline:none; } textarea { background-color:var(--input-bg-color); color:var(--input-fg-color); } @@ -336,7 +343,7 @@ fieldset.xterm div.layout div.output { border-left:var(--box-border); border-top fieldset.xterm div.layout div.output.select { border:var(--box-border)} fieldset.plan div.output div.content>table.content { height:100%; width:100%; } fieldset.draw>form.option>div.item.pid>input { width:60px; } -fieldset.draw div.output svg { margin-bottom:-4px; height:100%; width:100%; } +// fieldset.draw div.output svg { margin-bottom:-4px; height:100%; width:100%; } fieldset.draw.trend div.output svg { background-color:#1b5b738c; } fieldset.draw.spide div.output svg text { cursor:pointer; } fieldset.draw.spide div.output svg path { stroke-width:1; } diff --git a/panel/river.js b/panel/river.js index e0e1387b..1e39fcbe 100644 --- a/panel/river.js +++ b/panel/river.js @@ -64,7 +64,7 @@ Volcanos(chat.ONACTION, {list: [mdb.CREATE, web.SHARE, web.REFRESH], _init: func }, _menu: ["addapp", "rename", "remove"], addapp: function(event, can, button, river) { can.ondetail.create(event, can, button, river) }, - rename: function(event, can, button, river) { can.user.input(event, can, [mdb.NAME], function(args) { + rename: function(event, can, button, river) { can.user.input(event, can, [mdb.NAME, mdb.ICON], function(args) { can.runAction(event, mdb.MODIFY, [mdb.HASH, river].concat(args), function(msg) { can.page.Modify(can, can.ui.river_list[river], args[1]), can.user.toastSuccess(can) }) }) }, remove: function(event, can, button, river) { can.runAction(event, mdb.REMOVE, [mdb.HASH, river], function(msg) { @@ -99,7 +99,7 @@ Volcanos(chat.ONDETAIL, { can.onengine.signal(can, chat.ONSTORM_SELECT, can.request(event, {river: can.Conf(chat.RIVER, river), storm: can.Conf(chat.STORM, storm), refresh: ice.TRUE})) }) }) }, - rename: function(event, can, button, river, storm) { can.user.input(event, can, [mdb.NAME], function(args) { + rename: function(event, can, button, river, storm) { can.user.input(event, can, [mdb.NAME, mdb.ICON], function(args) { can.run(event, [river, storm, chat.STORM, ctx.ACTION, mdb.MODIFY].concat(args), function() { can.page.Modify(can, can.ui.storm_list[can.core.Keys(river, storm)], args[1]), can.user.toastSuccess(can) }) }) }, remove: function(event, can, button, river, storm) { can.run(event, [river, storm, chat.STORM, ctx.ACTION, mdb.REMOVE], function(msg) { can.misc.Search(can, {river: river, storm: ""}) }) }, diff --git a/panel/search.js b/panel/search.js index 0e84bed9..6db6c122 100644 --- a/panel/search.js +++ b/panel/search.js @@ -54,6 +54,7 @@ Volcanos(chat.ONACTION, {_init: function(can) { can.onmotion.hidden(can) }, list if (data.type == ctx.INDEX) { meta = {index: data.text.split(mdb.FS)[0], args: data.text.split(mdb.FS).slice(1) } } if (data.type == nfs.FILE) { meta = {index: web.CODE_VIMER, args: can.misc.SplitPath(can, data.text)} } if (data.type == nfs.SHY) { meta = {index: web.WIKI_WORD, args: data.text} } + if (data.type == ice.CMD) { meta = {index: data.name, args: can.core.Split(data.text)} } if (data.ctx == ice.NFS && data.cmd == nfs.PACK) { var ls = can.misc.SplitPath(can, data.text) can.runAction(event, cli.RUN, [web.CODE_VIMER, ctx.ACTION, mdb.RENDER, data.type, ls[1], ls[0]], function(msg) { msg.Table(function(meta) { can.onappend.plugin(can, meta, function(sub) { can._plugins = (can._plugins||[]).concat(sub), sub.onimport.size(sub, can.ConfHeight(), can.ConfWidth()-1, true) }, can.ui.profile) diff --git a/plugin/local/code/inner.css b/plugin/local/code/inner.css index 46f93711..2f9d9c69 100644 --- a/plugin/local/code/inner.css +++ b/plugin/local/code/inner.css @@ -19,7 +19,8 @@ fieldset.inner>div.output>div.project div.zone>div.item span.icon { font-size:20 fieldset.inner>div.output>div.project div.zone:hover>div.item span.icon { display:block; } fieldset.inner>div.output>div.project>div.zone>div.item span.icon { font-size:22px; line-height:32px; } fieldset.inner>div.output>div.project>div.zone div.action>div.item { padding-right:0; width:100%; } -fieldset.inner>div.output>div.project>div.zone div.action>div.item>input { width:calc(100% - 5px); } +fieldset.inner>div.output>div.project>div.zone div.action>div.item>input { width:calc(100% - 5px); border:var(--plugin-border-color) solid 1px; } +fieldset.inner>div.output>div.project>div.zone div.action>div.item>input:hover { border:var(--notice-fg-color) solid 1px; } fieldset.inner>div.output>div.project>div.zone div.action>div.item>span.delete { top:3px; right:5px; } fieldset.inner>div.output>div.project>div.zone fieldset.plug { position:static; } fieldset.inner>div.output>div.layout>div.tabs { font-size:14px; display:none; } diff --git a/plugin/local/code/inner/syntax.js b/plugin/local/code/inner/syntax.js index 392fa050..94e01383 100644 --- a/plugin/local/code/inner/syntax.js +++ b/plugin/local/code/inner/syntax.js @@ -194,7 +194,8 @@ Volcanos(chat.ONSYNTAX, { } opts.stack = [ls[0]] } else if (indent == 4 && opts.stack[0] == "func") { if (text.indexOf("MergeCommands(") > -1) { opts.block = "cmds" } else if (text.indexOf("}") == 0) { opts.block = "" } } else if (indent == 8) { - if (isKey()) { push(prefix(ls[0], opts.package)+ls[0]), opts.cmds = opts.package+nfs.PT+ls[0] } + if (isKey()) { push(prefix(ls[0], opts.package)+ls[0]), opts.cmds = ls[0] } + // if (isKey()) { push(prefix(ls[0], opts.package)+ls[0]), opts.cmds = opts.package+nfs.PT+ls[0] } } else if (indent == 12) { if (isKey()) { push("+ "+opts.cmds+lex.SP+ls[0]) } } diff --git a/plugin/local/code/vimer.js b/plugin/local/code/vimer.js index 5d1d439c..5fe841d6 100644 --- a/plugin/local/code/vimer.js +++ b/plugin/local/code/vimer.js @@ -103,7 +103,11 @@ Volcanos(chat.ONACTION, {list: ["编译", "源码", "终端", "文档", "计划" }) }, "编译": function(event, can) { can.onaction.compile(event, can, code.COMPILE) }, "源码": function(event, can) { can.onimport.tabview(can, "", web.CODE_GIT_STATUS, ctx.INDEX) }, - "终端": function(event, can) { can.onimport.tabview(can, "", [web.CODE_XTERM, "ish"].join(mdb.FS), ctx.INDEX) }, + "终端": function(event, can) { + can.user.input(can.request(event, {action: "xterm"}), can, [mdb.TYPE], function(args) { + can.onimport.tabview(can, "", [web.CODE_XTERM, args[1]||"ish"].join(mdb.FS), ctx.INDEX) + }) + }, "文档": function(event, can) { can.onimport.tabview(can, "", web.WIKI_WORD, ctx.INDEX) }, "计划": function(event, can) { can.onimport.tabview(can, "", web.TEAM_PLAN, ctx.INDEX) }, "桌面": function(event, can) { can.onimport.tabview(can, "", "web.chat.macos.desktop", ctx.INDEX) }, diff --git a/plugin/local/team/plan.js b/plugin/local/team/plan.js index e8429930..a5901797 100644 --- a/plugin/local/team/plan.js +++ b/plugin/local/team/plan.js @@ -40,11 +40,17 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onmotion.clear( }]) }), can.onmotion.story.auto(can, can.ui.profile) }, _display: function(can, task) { can.onmotion.toggle(can, can.ui.display, true) - if (can.onmotion.cache(can, function() { return can.sup.task = task, can.Status(task), [task.space, task.zone, task.id].join(nfs.PT) }, can.ui.display)) { return } + if (can.onmotion.cache(can, function(data, old) { + if (old) { data[old] = {_plugin_display: can._plugin_display} } + var key = [task.space, task.zone, task.id].join(nfs.PT) + var last = data[key]; if (last) { can._plugin_display = last._plugin_display } + return can.sup.task = task, can.Status(task), key + }, can.ui.display)) { return } task[ctx.EXTRA_INDEX] && can.onappend.plugin(can, {space: task.space, index: task[ctx.EXTRA_INDEX], args: task[ctx.EXTRA_ARGS], height: can.ConfHeight()/2-2*html.ACTION_HEIGHT}, function(sub, meta) { sub.run = function(event, cmds, cb) { can.request(event, kit.Dict(team.TASK_POD, task.space, team.TASK_ZONE, task.zone, team.TASK_ID, task.id)) can.page.style(can, sub._output, html.MAX_HEIGHT, ""), can.runAction(event, ice.RUN, [task[mdb.ZONE], task[mdb.ID]].concat(cmds), cb) } + can._plugin_display = sub sub.onexport.output = function() { can.onmotion.delay(can, function() { sub.onimport.size(sub, can._display_heights[[task.zone, task.id].join(mdb.FS)] = can.base.Max(sub._target.offsetHeight, can.ConfHeight()/2), can.ConfWidth()-can.ui.project.offsetWidth) can.onimport.layout(can) @@ -102,6 +108,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onmotion.clear( layout: function(can) { can.ui.layout(can.ConfHeight(), can.ConfWidth()) can.user.isMobile && can.page.style(can, can.ui.content, html.HEIGHT, "") + var sub = can._plugin_display; sub && sub.onimport.size(sub, can.ConfHeight()/2, can.ConfWidth()-can.ui.project.offsetWidth, true) return can.page.styleHeight(can, can._output, can.ConfHeight()), can.page.styleHeight(can, can.ui.project, can.ConfHeight()) var height = can._display_heights[can.sup.task? [can.sup.task.zone, can.sup.task.id].join(mdb.FS): ""]||html.ACTION_HEIGHT diff --git a/plugin/local/wiki/draw.js b/plugin/local/wiki/draw.js index a9b68dbe..1c6d11f2 100644 --- a/plugin/local/wiki/draw.js +++ b/plugin/local/wiki/draw.js @@ -1,13 +1,13 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, target) { can.onmotion.clear(can); var pid = can.misc.SearchHash(can)[0] can.svg = null, can.group = null, can.temp = null, can.current = null, can.points = [], can._display_heights = {} - if (can.Conf(ctx.INDEX) == web.WIKI_DRAW) { can.ui = can.onappend.layout(can) } else { can.ui = {content: can._output} } + if (can.Conf(ctx.INDEX) == web.WIKI_DRAW) { + can.ui = can.onappend.layout(can); if (can.user.isMobile) { can.onmotion.hidden(can, can.ui.project), can.onmotion.hidden(can, can.ui.profile) } + } else { can.ui = {content: can._output} } can.page.Modify(can, can.ui.content, msg.Results()||can.onexport.content(can)), can.onexport.title(can, can.Option(nfs.PATH)) can.page.Select(can, can.ui.content, html.SVG, function(target) { can.svg = can.group = can.onimport._block(can, target), can.onimport._group(can, target) can.page.Select(can, target, mdb.FOREACH, function(target) { can.onimport._block(can, target), can.page.tagis(target, svg.G) && target.Value(html.CLASS) && can.onimport._group(can, target) }) can.ui.profile && can.core.ItemCB(can.onaction, function(key, cb) { target[key] = function(event) { can.misc.Event(event, can, function(msg) { cb(event, can) }) } }) }), can.ondetail._select(can, (can.isCmdMode()? pid: "")||can.Option(svg.PID)||can.svg.Value(svg.PID)), can.onkeymap._build(can) - can.ui.profile && can.user.isMobile && can.onmotion.hidden(can, can.ui.profile) - can.user.isMobile && can.onmotion.hidden(can, can.ui.project) }, _block: function(can, target) { target.Value = function(key, value) { if (can.base.isUndefined(key)) { return } if (can.base.isObject(key)) { return can.core.Item(key, target.Value), key } diff --git a/plugin/local/wiki/feel.css b/plugin/local/wiki/feel.css index 53a95e06..31eec04a 100644 --- a/plugin/local/wiki/feel.css +++ b/plugin/local/wiki/feel.css @@ -1,9 +1,10 @@ fieldset.feel>div.output { display:flex; justify-content:center; } -fieldset.feel>div.output div.project { flex:0 0 230px; } -fieldset.feel>div.output div.project div.item.filter { position:sticky; top:0; } -fieldset.feel>div.output div.project div.item.filter input { width:100%; } -fieldset.feel>div.output div.project div.item { white-space:pre; } -fieldset.feel>div.output div.content.float { padding:0; position:fixed; left:0; top:0; } -fieldset.feel>div.output div.content:not(.hide) { display:flex; justify-content:center; } -fieldset.feel>div.output div.display:not(.hide) { display:flex; justify-content:center; flex-wrap:wrap; max-height:100%; } +fieldset.feel>div.output>div.project { flex:0 0 230px; } +fieldset.feel>div.output>div.project div.item { white-space:pre; } +fieldset.feel>div.output>div.project div.item.filter { position:sticky; top:0; } +fieldset.feel>div.output>div.project div.item.filter input { width:100%; } +fieldset.feel>div.output>div.layout { flex-grow:1; } +fieldset.feel>div.output>div.layout>div.content.float { padding:0; position:fixed; left:0; top:0; } +fieldset.feel>div.output>div.layout>div.content:not(.hide) { display:flex; justify-content:center; } +fieldset.feel>div.output>div.layout>div.display:not(.hide) { display:flex; justify-content:center; flex-wrap:wrap; max-height:100%; } fieldset.feel>div.output img { margin-bottom:0; } diff --git a/plugin/local/wiki/feel.js b/plugin/local/wiki/feel.js index 52018961..9abed6eb 100644 --- a/plugin/local/wiki/feel.js +++ b/plugin/local/wiki/feel.js @@ -5,7 +5,8 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { can.onmotion.clear(can) can.base.endWith(item.path, nfs.PS)? can.onimport.item(can, item, function(event) { can.Option(nfs.PATH, item.path) && can.Update(event) }): can.list.push(item) }) var rate = can.misc.localStorage(can, "web.wiki.feel:rate"); rate && can.Action("speed", rate) - can.core.List(can.list, function(item, index) { item.nick = (can.misc.localStorage(can, can.onexport.key(can, "p", can.onimport._file(can, item.path)))||"")+" "+item.name; var target = can.onimport.item(can, item, function(_event) { + can.core.List(can.list, function(item, index) { var last = can.misc.localStorage(can, can.onexport.key(can, "p", can.onimport._file(can, item.path))) + item.nick = (last? last+" ": "")+item.name; var target = can.onimport.item(can, item, function(_event) { var target = _event.target can.cb = function(event) { var next = _event.target.nextSibling can.misc.localStorage(can, can.onexport.key(can, "last"), item.path) diff --git a/plugin/state.js b/plugin/state.js index 3e92e602..f500d04d 100644 --- a/plugin/state.js +++ b/plugin/state.js @@ -58,7 +58,8 @@ Volcanos(chat.ONIMPORT, { _open: function(can, msg, arg) { return can.Update(), can.user.open(arg) }, _close: function(can, msg) { return can.user.close() || history.back() }, size: function(can, height, width, auto, mode) { height -= can.onexport.actionHeight(can)+can.onexport.statusHeight(can) - auto? can.page.style(can, can._output, html.HEIGHT, "", html.WIDTH, "", html.MAX_HEIGHT, height? can.ConfHeight(height): "", html.MAX_WIDTH, can.ConfWidth(width)): + auto? (can.page.style(can, can._output, html.HEIGHT, "", html.WIDTH, "", html.MAX_HEIGHT, height? can.ConfHeight(height): "", html.MAX_WIDTH, can.ConfWidth(width)), + can.page.style(can, can._target, html.WIDTH, "")): (can.page.style(can, can._output, html.HEIGHT, can.ConfHeight(height), html.WIDTH, can.ConfWidth(width), html.MAX_HEIGHT, "", html.MAX_WIDTH, ""), can.page.style(can, can._target, html.WIDTH, can.ConfWidth(width))) var sub = can.core.Value(can, chat._OUTPUTS_CURRENT); if (!sub) { return can.Mode(mode), auto } sub.ConfHeight(can.ConfHeight()), sub.ConfWidth(can.ConfWidth()) @@ -71,9 +72,22 @@ Volcanos(chat.ONIMPORT, { }) Volcanos(chat.ONACTION, {list: [ "刷新界面", "刷新数据", "切换浮动", "切换全屏", "远程控制", "共享工具", "打开链接", "生成链接", "生成脚本", "生成图片", + ["视图", "操作", "专注", "项目", "预览", "输出", "状态"], ["其它", "扩展参数", "保存参数", "清空参数", "复制数据", "下载数据", "清空数据", "删除工具"], ["调试", "查看文档", "查看脚本", "查看源码", "查看配置", "查看日志", "打包页面"], ], + "参数": function(event, can) { can.onmotion.toggle(can, can._option) }, + "操作": function(event, can) { can.onmotion.toggle(can, can._action) }, + "专注": function(event, can) { can.onaction._view(event, can, function(sub) { if (!sub.ui) { return } + sub.ui.project && can.onmotion.hidden(can, sub.ui.project) + sub.ui.profile && can.onmotion.hidden(can, sub.ui.profile) + sub.ui.display && can.onmotion.hidden(can, sub.ui.display) + }) }, + "项目": function(event, can) { can.onaction._view(event, can, function(sub) { sub.ui && sub.ui.project && can.onmotion.toggle(can, sub.ui.project) }) }, + "预览": function(event, can) { can.onaction._view(event, can, function(sub) { sub.ui && sub.ui.project && can.onmotion.toggle(can, sub.ui.profile) }) }, + "输出": function(event, can) { can.onaction._view(event, can, function(sub) { sub.ui && sub.ui.project && can.onmotion.toggle(can, sub.ui.display) }) }, + "状态": function(event, can) { can.onaction._view(event, can, function(sub) { can.onmotion.toggle(can, can._status) }) }, + _view: function(event, can, cb) { var sub = can.core.Value(can, chat._OUTPUTS_CURRENT); cb(sub), sub.onimport.layout(sub) }, _engine: function(event, can, button) { can.Update(event, [ctx.ACTION, button].concat(can.Input())) }, _switch: function(can, sub, mode, save, load) { if (can.page.ClassList.neg(can, can._target, mode)) { diff --git a/plugin/story/spide.js b/plugin/story/spide.js index 0a15f46a..c5d5bd2b 100644 --- a/plugin/story/spide.js +++ b/plugin/story/spide.js @@ -18,7 +18,7 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb) { can.page.requireDraw(ca _color: function(can, tree) { return tree.meta.color || (tree.list == 0? cli.PURPLE: cli.YELLOW) }, layout: function(can) { can.page.ClassList.has(can, can._fields, html.FLOAT) || can.page.style(can, can._output, html.MAX_HEIGHT, "") can.svg && can.svg.Val(svg.FONT_SIZE, can.size = parseInt(can.Action(html.SIZE)||24)), can.margin = parseInt(can.Action(html.MARGIN)||10) - can._tree && can.core.CallFunc(can.onaction[can.Action(ice.VIEW)||"横向"], [event, can, can.Action(ice.VIEW)]) + can._tree && can._tree[can.dir_root] && can.core.CallFunc(can.onaction[can.Action(ice.VIEW)||"横向"], [event, can, can.Action(ice.VIEW)]) }, }) Volcanos(chat.ONACTION, {list: [[ice.VIEW, "横向", "纵向"], [html.SIZE, 24, 32, 48], [html.MARGIN, 10, 30, 50]],