diff --git a/frame.js b/frame.js index bb23fd78..631af5df 100644 --- a/frame.js +++ b/frame.js @@ -140,7 +140,11 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { sub._trans = can.base.Copy(sub._trans||{}, can.core.Value(sub, [chat.ONACTION, chat._TRANS])) can.core.Item(meta.feature, function(key, cb) { cb.help && sub.user.trans(sub, kit.Dict(key, cb.help)) }) meta.inputs && sub.onappend._option(sub, meta, sub._option, meta.msg) - if (meta.msg) { var msg = sub.request(); msg.Copy(can.base.Obj(meta.msg)), sub.onappend._output(sub, msg, meta.display||msg.Option(ice.MSG_DISPLAY)||meta.feature.display) } + if (meta.msg) { + can.onmotion.delay(can, function() { + var msg = sub.request(); msg.Copy(can.base.Obj(meta.msg)), sub.onappend._output(sub, msg, meta.display||msg.Option(ice.MSG_DISPLAY)||meta.feature.display) + }) + } if (can._root && can._root.name == "popup") { can.onmotion.hidden(can, sub._action) } can.core.Value(sub._legend, chat.ONMOUSEENTER, function(event) { @@ -328,6 +332,94 @@ Volcanos(chat.ONAPPEND, {_init: function(can, meta, list, cb, target, field) { } }), can.onfigure[input]._init && can.onfigure[input]._init(can, meta, target, _cb) }) }, + layout: function(can, target, type, list) { + switch (type||ice.AUTO) { + case ice.AUTO: const FLOW = "flow", FLEX = "flex" + var ui = {size: {}}; function append(target, type, list) { can.page.ClassList.add(can, target, [html.LAYOUT, type]), + can.core.List(list, function(item) { + if (can.base.isArray(item)) { + append(can.page.Append(can, target, [{}])._target, type==FLOW? FLEX: FLOW, item) + } else { + ui[item] = can.page.Append(can, target, [item])._target + } + }); return list + } + var defer = []; function layout(type, list, width, height) { can.core.List(list, function(item) { + if (item == html.CONTENT) { + defer.push(function() { can.page.style(can, ui[item], html.HEIGHT, height, html.WIDTH, width) }) + } else if (can.base.isString(item)) { + function calc(item, size, total) { + if (!ui.size[item]) { + return size + } else if (ui.size[item] < 1){ + return total*ui.size[item] + } else { + return ui.size[item] + } + } + if (!can.page.isDisplay(ui[item])){ + + } else if (type == FLOW) { + can.page.style(can, ui[item], html.WIDTH, width) + height -= calc(item, ui[item].offsetHeight, height) + } else { + can.page.style(can, ui[item], html.HEIGHT, height, html.WIDTH, calc(item, ui[item].offsetWidth, width)) + width -= calc(item, ui[item].offsetWidth, width) + } + } + }), can.core.List(list, function(item) { if (!can.base.isString(item)) { layout(type == FLOW? FLEX: FLOW, item, width, height) } }) } + list = append(target, FLEX, list||[html.PROJECT, [[html.CONTENT, html.PROFILE], html.DISPLAY]]) + ui.layout = function(width, height) { defer = [], layout(FLEX, list, width, height), defer.forEach(function(cb) { cb() }) } + return ui + case "tabs-box": + can.page.ClassList.add(can, target, "layout tabs box") + can.core.List(list, function(item) { + var ui = can.page.Append(can, target, [{view: "tabs", inner: item.name, onclick: function() { + can.onmotion.toggle(can, ui.list) + }}, {view: "list", list: item.list}]) + }) + break + case "tabs-top": + can.page.ClassList.add(can, target, "layout tabs top") + var ui = can.page.Append(can, target, ["tabs", "list"]) + break + case "tabs-left": + can.page.ClassList.add(can, target, "layout tabs left") + var ui = can.page.Append(can, target, ["tabs", "list"]) + break + case "tabs-right": + can.page.ClassList.add(can, target, "layout tabs right") + var ui = can.page.Append(can, target, ["list", "tabs"]) + break + case "tabs-bottom": + can.page.ClassList.add(can, target, "layout tabs bottom") + var ui = can.page.Append(can, target, ["list", "tabs"]) + break + } + ui.append = function(item, carte) { + var tabs = can.page.Append(can, ui.tabs, [{type: html.DIV, inner: item.name, onclick: function(event) { + can.onmotion.select(can, ui.tabs, html.DIV, tabs), can.onmotion.select(can, ui.list, html.DIV, view) + }, onmouseenter: function(event) { + // can.user.carte(event, can, carte.meta, carte.list, carte) + }}])._target + var view = can.page.Append(can, ui.list, [{type: html.DIV, list: item.list}])._target + if (ui.tabs.childElementCount == 1) { tabs.click() } + return { + close: function() { + if (can.page.ClassList.has(can, tabs, html.SELECT)) { + (tabs.nextSibling||tabs.previousSibling).click() + } + can.page.Remove(can, tabs), can.page.Remove(can, view) + }, + } + } + can.core.List(list, function(item) { + var view = ui.append(item, shy({ + "close": function() { view.close() }, + })) + }) + return ui + }, }) Volcanos(chat.ONLAYOUT, {_init: function(can, target) { target = target||can._root._target; var height = can.page.height(), width = can.page.width() can.page.SelectChild(can, target, can.page.Keys(html.FIELDSET_HEAD, html.FIELDSET_FOOT), function(field) { height -= field.offsetHeight }) @@ -335,7 +427,7 @@ Volcanos(chat.ONLAYOUT, {_init: function(can, target) { target = target||can._ro can.page.styleHeight(can, field, height), can.user.isMobile || (width -= field.offsetWidth) can.page.SelectChild(can, field, html.DIV_OUTPUT, function(output) { can.page.styleHeight(can, output, height-html.ACTION_HEIGHT) }) }) - can.user.isMobile || can.page.SelectChild(can, target, html.FIELDSET_MAIN, function(field) { + can.page.SelectChild(can, target, html.FIELDSET_MAIN, function(field) { can.page.style(can, field, html.HEIGHT, height, html.WIDTH, width) can.page.SelectChild(can, field, html.DIV_ACTION, function(action) { height -= action.offsetHeight }) can.page.SelectChild(can, field, html.DIV_OUTPUT, function(output) { can.page.styleHeight(can, output, height) }) @@ -467,7 +559,12 @@ Volcanos(chat.ONMOTION, {_init: function(can, target) { can.page.style(can, target, html.WIDTH, _target.offsetWidth, html.LEFT, (window.innerWidth-_target.offsetWidth)/2) }) }) }, - delay: function(can, cb, interval) { can.core.Timer(interval||30, cb) }, + delayLong: function(can, cb, interval, key) { can.onmotion.delay(can, cb, interval||300, key) }, + delay: function(can, cb, interval, key) { if (!key) { return can.core.Timer(interval||30, cb) } + can._delay_list = can._delay_list||shy({}, []) + var last = can._delay_list.meta[key]||0, self = can._delay_list.meta[key] = can._delay_list.list.push(cb) + can.core.Timer(interval||30, function() { cb(self, last, can._delay_list.meta[key]) }) + }, clear: function(can, target) { return can.page.Modify(can, target||can._output, ""), target }, cache: function(can, next) { var list = can.base.getValid(can.base.Obj(can.core.List(arguments).slice(2)), [can._output]) can.core.List(list, function(target) { target && target._cache_key && can.page.Cache(target._cache_key, target, target.scrollTop+1) }) @@ -600,7 +697,7 @@ Volcanos(chat.ONKEYMAP, {_init: function(can, target) { target = target||documen }, selectCtrlN: function(event, can, target, key, cb) { if (!event.ctrlKey || event.key < "0" || event.key > "9") { return } - return can.page.Select(can, target, key, function(target, index) { if (index+1 == event.key) { return cb(target) } })[0] + return can.page.Select(can, target, key, function(target, index) { if (index+1 == event.key) { return cb? cb(target): target.click() } })[0] }, selectInputs: function(event, can, cb, target) { if (can.page.ismodkey(event)) { return } if (event.key == lang.ESCAPE) { return target.blur() } if (event.ctrlKey || event.key == lang.TAB) { if (can.base.isUndefined(target._index)) { target._index = -1, target._value = target.value } diff --git a/lib/page.js b/lib/page.js index bd651fff..21e29a0f 100644 --- a/lib/page.js +++ b/lib/page.js @@ -1,6 +1,7 @@ Volcanos("page", {ClassList: { has: function(can, obj, key) { var list = obj.className? obj.className.split(ice.SP): []; return list.indexOf(key) > -1 }, - add: function(can, obj, key) { var list = obj.className? obj.className.split(ice.SP): [], value = can.base.AddUniq(list, key).join(ice.SP).trim() + add: function(can, obj, key) { typeof key == lang.OBJECT && (key = key.join(ice.SP)) + var list = obj.className? obj.className.split(ice.SP): [], value = can.base.AddUniq(list, key).join(ice.SP).trim() return value != obj.className && (obj.className = value), value }, del: function(can, obj, key) { var list = obj.className? obj.className.split(ice.SP): [] @@ -23,7 +24,7 @@ Volcanos("page", {ClassList: { can.page.Select(can, target, html.IFRAME, function(item) { can.page.SelectAll(can, item.contentWindow.document.body, key, cb, interval, cbs) }) return can.core.List(target && target.querySelectorAll(key), cb, interval, cbs) }, - SelectOne: function(can, target, key, cb) { return can.page.Select(can, target, key, function(target, index) { index == 0 && can.base.isFunc(cb) && cb(target) })[0] }, + SelectOne: function(can, target, key, cb) { return can.page.Select(can, target, key, function(target, index) { return index == 0 && can.base.isFunc(cb) && cb(target), target })[0] }, Select: function(can, target, key, cb, interval, cbs) { target = target || document.body; if (key == ice.PT) { cb(target); return [] } return can.core.List(target.querySelectorAll(can.page.Keys(key)), cb, interval, cbs) }, @@ -231,5 +232,5 @@ Volcanos("page", {ClassList: { height: function() { return window.innerHeight }, width: function() { return window.innerWidth }, ismodkey: function(event) { return [lang.META, lang.ALT, lang.CONTROL, lang.SHIFT].indexOf(event.key) > -1 }, - isDisplay: function(target) { return target.style.display != html.NONE && target.innerHTML != "" }, + isDisplay: function(target) { return target.style.display != html.NONE }, }) diff --git a/lib/user.js b/lib/user.js index 0ff6c2b3..adfbc7d5 100644 --- a/lib/user.js +++ b/lib/user.js @@ -101,7 +101,8 @@ Volcanos("user", {info: {}, agent: { cb = cb||function(event, button, meta) { var cb = meta[button]||meta[chat._ENGINE]; can.base.isFunc(cb) && cb(event, can, button) } parent || can.page.Select(can, document.body, "div.carte.float", function(target) { can.onmotion.delay(can, function () { can.page.Remove(can, target) }) }) function remove_sub(carte) { carte._sub && can.page.Remove(can, carte._sub._target), delete(carte._sub) } - function click(event, item) { can.base.isFunc(cb) && cb(event, item, meta), can.onkeymap.prevent(event), can.user.isMobile && can.page.Remove(can, ui._target) } + function click(event, item) { + meta[item]? meta[item](event, can, item): can.base.isFunc(cb) && cb(event, item, meta), can.onkeymap.prevent(event), can.user.isMobile && can.page.Remove(can, ui._target) } var ui = can.page.Append(can, document.body, [{view: [[chat.CARTE, chat.FLOAT]], list: can.core.List(list, function(item, index) { return can.base.isString(item)? item ==""? /* space */ {view: html.SPACE}: /* string */ {view: [html.ITEM, html.DIV, can.user.trans(can, item)], onclick: function(event) { click(event, item) }, onmouseenter: function(event) { remove_sub(carte) } }: can.base.isArray(item)? /* array */ {view: html.ITEM, list: [{text: can.user.trans(can, item[0])+" -> "}], onmouseenter: function(event) { diff --git a/page/index.css b/page/index.css index 5888fff8..870a02d4 100644 --- a/page/index.css +++ b/page/index.css @@ -1,4 +1,5 @@ -body, fieldset, table, tr, th, td { padding:0; border:0; margin:0; } +* { box-sizing:border-box; } +body, iframe, fieldset, table, tr, th, td { padding:0; border:0; margin:0; } body { background-color:black; color:cyan; font-size:16px; } legend { background-color:cadetblue; color:white; padding:0 20px; margin-right:2px; float:left; } select { background-color:black; color:cyan; padding:0 10px; margin:0 2px; border:0; } @@ -24,6 +25,7 @@ input[type=button][name=trash] { background-color:red; } input[type=button][name=delete] { background-color:red; } input[type=button][name=remove] { background-color:red; } +div.layout.flex>div { float:left; } table.layout { border-spacing:0; } table.layout td { vertical-align:top; } table.layout td.content div.toggle { background-color:#4682b46b; color:white; font-size:24px; position:absolute; } @@ -32,7 +34,6 @@ table.layout td.content div.toggle.project { padding-top:50px; height:100px; wid table.layout td.content div.toggle.profile { padding-top:50px; height:100px; width:15px; top:20%; right:0px; border-top-left-radius:10px; border-bottom-left-radius:10px; } table.layout td.content div.toggle.display { margin-top:-15px; height:15px; width:100px; position:sticky; left:40%; border-top-left-radius:10px; border-top-right-radius:10px; overflow:hidden; } table.layout td.content div.toggle.display>div { text-align:center; width:100px; transform: rotate(-90deg) translate(5px, 0px); } -// table.content { width:-webkit-fill-available;} table.content thead { position:sticky; top:2px; } table.content th { background-color:steelblue; padding:2px 6px; } table.content td { padding:2px 6px; } @@ -57,6 +58,10 @@ fieldset.contexts { background:radial-gradient(black, #00000073); color:white; position:fixed; left:20px; top:100px; z-index:10; } +fieldset.simple>legend { display:none; } +fieldset.simple>form.option { display:none; } +fieldset.simple>div.status { display:none; } +fieldset.simple div.toggle { display:none; } fieldset.plugin { background-color:#061c3c9e; padding:10px; margin:10px; } fieldset.float { background-color:#0e3369; color:white; padding:0; margin:0; } fieldset.full { background-color:#0e3369; color:white; padding:0; margin:0; left:0; top:0; overflow:auto; } @@ -65,6 +70,8 @@ fieldset.float>form.option input[type=button][name=close]{ display:block; } fieldset.full>form.option input[type=button][name=close]{ display:block; } fieldset.plugin>div.status { border-top:1px solid darkcyan; } fieldset.story>div.status { border-top:1px solid darkcyan; } +fieldset.panel>div.status { display:none; } +fieldset.cmd>div.output { overflow:hidden; } fieldset.output { padding:0; margin:0; } fieldset.output>form.option { display:none; } @@ -123,10 +130,10 @@ body>div.upload input[type=file] { width:320px; } textarea { tab-size:2; height:60px; } legend { font-size:1.2rem; height:31px; } select, input { font-size:1.0rem; height:31px; } -table.content th, table.content td, div.zone>div.name, div.item, code.story, div.story[data-type=spark] { font-size:1.1rem; font-family:monospace; } +table.content th, table.content td, div.zone>div.name, div.item, code.story, div.story[data-type=spark] { font-family:monospace; } div.code { font-family:monospace; } -div.action>div.tabs { padding:5px 10px; height:21px; } -div.status>div.item { padding:4px; height:22px; } +div.action>div.tabs { padding:5px 10px; height:31px; } +div.status>div.item { padding:4px; height:30px; } div.status>div.item>label { font-size:0.6rem; font-family:monospace; } svg { font-family:monospace; } @@ -351,3 +358,19 @@ body.black a { color:yellow; } body.white fieldset.panel.Search a { color:yellow; } body.mobile fieldset.plan>div.action { display:none; } body.mobile.simple div.output.card div.item { width:-webkit-fill-available; } + +div.layout.tabs>div.tabs { display:flex; overflow:auto; } +div.layout.tabs>div.tabs>div { padding:10px; height:32px; flex:1; } +div.layout.tabs>div.tabs>div:hover { background:steelblue; } +div.layout.tabs>div.list { width:100%; height:100%; flex:1; } +div.layout.tabs>div.list>div { height:100%; display:none; } +div.layout.tabs>div.list>div.select { display:block; } +div.layout.tabs.left { display:flex; } +div.layout.tabs.left>div.tabs { flex-direction:column; } +div.layout.tabs.left>div.tabs>div { writing-mode:tb; } +div.layout.tabs.right { display:flex; } +div.layout.tabs.right>div.tabs { flex-direction:column; } +div.layout.tabs.right>div.tabs>div { writing-mode:tb; } +div.layout.tabs.box>div.list { height:unset; } +div.layout.tabs.box>div.tabs { background-color:steelblue; text-align:center; padding:3px; display:block; } + diff --git a/panel/action.css b/panel/action.css index 8789bebd..b5c65d1a 100644 --- a/panel/action.css +++ b/panel/action.css @@ -1,6 +1,6 @@ fieldset.Action { background-color:rgba(114, 153, 162, 0.54); min-width:160px; } fieldset.Action>div.action { background-color:#4682b46b; width:inherit; display:none; } -fieldset.Action>div.action div { font-size:1.1rem; padding:5px 20px; height:21px; float:left; cursor:pointer; } +fieldset.Action>div.action div { font-size:1.1rem; padding:5px 20px; height:31px; float:left; cursor:pointer; } fieldset.Action>div.action div.select { background-color:#6495ed63; } fieldset.Action>div.action div:hover { background-color:#6495ed63; } @@ -94,7 +94,7 @@ div.foot div.menu { cursor:pointer; padding:10px; float:left; } div.foot>div.menu:hover { background-color:#323232; } div.tabs:hover { - background-color:#272727; + /* background-color:#272727; */ } div.tabs div.name { height:46px; width:-webkit-fill-available; diff --git a/panel/footer.css b/panel/footer.css index 14615fd8..e6c834e0 100644 --- a/panel/footer.css +++ b/panel/footer.css @@ -1,6 +1,6 @@ fieldset.Footer { font-size:1.1rem; padding:0 5px; clear:both; } fieldset.Footer>div.output { overflow:hidden; } -fieldset.Footer>div.output div { padding:5px; height:21px; cursor:pointer; } +fieldset.Footer>div.output div { padding:5px; height:31px; cursor:pointer; } fieldset.Footer>div.output div:hover { background-color:#2e515f; } fieldset.Footer>div.output div.title { float:left; } fieldset.Footer>div.output div.state { font-family:monospace; float:right; } diff --git a/panel/header.css b/panel/header.css index 175bfbae..3f38d07a 100644 --- a/panel/header.css +++ b/panel/header.css @@ -1,6 +1,6 @@ fieldset.Header { font-size:1.1rem; padding:0 5px; height:31px; overflow:auto; z-index:10; } fieldset.Header>div.output { overflow:hidden; } -fieldset.Header>div.output div { padding:5px; height:21px; float:left; cursor:pointer; } +fieldset.Header>div.output div { padding:5px; height:31px; float:left; cursor:pointer; } fieldset.Header>div.output div:hover { background-color:#2e515f; } fieldset.Header>div.output div.title { float:left; } fieldset.Header>div.output div.state { float:right; } @@ -8,5 +8,4 @@ fieldset.Header>div.output div.state.avatar { padding:0; height:31px; } fieldset.Header>div.output div.state.avatar>img { height:31px; } fieldset.Header>div.output div.search { margin-left:20px; float:left; } fieldset.Header>div.output div.search>input { margin-top:-5px; border-radius:0; } - -fieldset.Header>div.output river { margin-right:100px; } \ No newline at end of file +fieldset.Header>div.output river { margin-right:100px; } diff --git a/panel/search.css b/panel/search.css index 7211365d..f190c2f0 100644 --- a/panel/search.css +++ b/panel/search.css @@ -2,3 +2,4 @@ fieldset.Search { background-color:#041a25bd; padding:10px; position:fixed; left fieldset.Search input.word { width:-webkit-fill-available; } fieldset.Search>div.output table { width:-webkit-fill-available; } fieldset.Search>div.status { border-top:1px solid darkcyan; } +fieldset.Search>div.status { display:block; overflow:auto; } diff --git a/plugin/input/key.js b/plugin/input/key.js index a41a67f5..21a9cf60 100644 --- a/plugin/input/key.js +++ b/plugin/input/key.js @@ -19,7 +19,7 @@ Volcanos(chat.ONFIGURE, {key: { }) }, onblur: function(event, can, sub) { can.onmotion.delay(can, function() { // sub._delay_hidden || can.onmotion.hidden(can, sub._target), sub._delay_hidden = false - sub._delay_hidden || sub.close(), sub._delay_hidden = false + if (sub) { sub._delay_hidden || sub.close(), sub._delay_hidden = false } }, 300) }, onkeydown: function(event, can, meta, cb, target, sub, last) { if (event.key == lang.ENTER && meta._enter && (!can.page.tagis(event.target, html.TEXTAREA) || event.ctrlKey) && meta._enter(event)) { return sub.close() } diff --git a/plugin/local/code/inner.css b/plugin/local/code/inner.css index f2c8af81..ed8c319f 100644 --- a/plugin/local/code/inner.css +++ b/plugin/local/code/inner.css @@ -1,107 +1,55 @@ -fieldset.word fieldset.inner>form.option input[name=path] { width:240px; } - -fieldset.inner.cmd>div.output { overflow:hidden; } fieldset.inner>form.option input[name=path] { width:80px; } fieldset.inner>form.option input[name=file] { width:160px; } fieldset.inner>div.action>div.tabs { padding:5px; margin:0 1px; } -fieldset.inner>div.action>div.tabs:hover { background-color:steelblue; } -fieldset.inner>div.action>div.tabs.select { background-color:steelblue; } - -// fieldset.inner>div.output div.project { width:240px; } -fieldset.inner>div.output td.content { position:relative; } +fieldset.inner>div.output>div.project { width:230px; } +fieldset.inner>div.output>div.layout.flow { width:min-content; } +fieldset.inner>div.output>div.layout.flow>div.tabs { display:none; } +fieldset.inner>div.output>div.layout.flow>div.path { display:none; } fieldset.inner>div.output div.content { color:white; font-size:16px; font-family:monospace; position:relative; } -fieldset.inner>div.output div.content td.line { position:sticky; left:0; text-align:right; padding:0 6px; border-right:solid 2px red; } fieldset.inner>div.output div.content>tr:hover { background-color:#4682b46b; } fieldset.inner>div.output div.content>tr.select { background-color:#4682b46b; } fieldset.inner>div.output div.content>tr.select td.line { background-color:#6495ed63; border:solid 1px red; border-right:solid 2px red; } +fieldset.inner>div.output div.content td.line { position:sticky; left:0; text-align:right; padding:0 6px; border-right:solid 2px red; } fieldset.inner>div.output div.content td.text { white-space:pre; padding-left:10px; cursor:text; } fieldset.inner>div.output div.content td.text span.comment { background-color:blue; color:cyan; } -fieldset.inner>div.output div.content td.text span.keyword { color:blue; font-weight:bold; } -fieldset.inner>div.output div.content td.text span.string { color:magenta; } +fieldset.inner>div.output div.content td.text span.keyword { color:yellow; font-weight:bold; } +fieldset.inner>div.output div.content td.text span.package { color:lightgreen; } +fieldset.inner>div.output div.content td.text span.datatype { color:cyan; } +fieldset.inner>div.output div.content td.text span.function { color:lightgreen; } fieldset.inner>div.output div.content td.text span.constant { color:magenta; } -fieldset.inner>div.output div.content td.text span.datatype { color:green; } -fieldset.inner>div.output div.content td.text span.function { color:purple; } -fieldset.inner.float>div.output div.content td.text span.keyword { color:yellow; } -fieldset.inner.float>div.output div.content td.text span.datatype { color:cyan; } -fieldset.inner.float>div.output div.content td.text span.function { color:lightgreen; } -body.black fieldset.inner>div.output div.content td.text span.keyword { color:yellow; } -body.black fieldset.inner>div.output div.content td.text span.datatype { color:cyan; } -body.black fieldset.inner>div.output div.content td.text span.function { color:lightgreen; } -fieldset.inner>div.output td.content iframe { border:0; } -fieldset.inner>div.output td.profile iframe { border:0; } -fieldset.inner.float>div.status { display:none; } - -fieldset.inner>div.output td.content>div.tabs { display:none; } -fieldset.inner>div.output td.content>div.path { display:none; } -fieldset.inner>div.output td.content>div.path { font-family:monospace; } -fieldset.inner>div.output td.content>div.path span.item { padding:3px 12px; } -fieldset.inner>div.output td.content>div.path span.item:hover { background-color:cornflowerblue; } -fieldset.inner div.output fieldset.toolkit { position:absolute; bottom:0px; right:0px; } -fieldset.inner>div.output fieldset.toolkit>div.output>fieldset { display:none; } -fieldset.inner>div.output fieldset.toolkit>div.output>fieldset.select { background-color:#0e3369b3; color:white; display:block; z-index:10; } -fieldset.inner>div.output fieldset.toolkit>div.output fieldset { display:none; } -fieldset.inner>div.output fieldset.toolkit>div.output fieldset.select { background-color:#0e3369b3; color:white; display:block; z-index:10; } -fieldset.inner div.output fieldset.toolkit>div.output { position:unset; } - -fieldset>div.output>fieldset.plug { position:absolute; bottom:0px; right:0px; } -fieldset>div.output>fieldset.plug { display:none; } -fieldset>div.output>fieldset.plug.select { background-color:#0e3369b3; color:white; display:block; z-index:10; } -fieldset>div.status legend { float:right; height:30px; } -fieldset>div.status legend.select { background-color:green; } -fieldset>div.status legend:hover { background-color:green; } -fieldset.inner>div.status { height:30px; overflow:auto; } -fieldset.panel>div.status { display:none; overflow:auto; } -fieldset.Search.panel>div.status { display:block; overflow:auto; } -fieldset.inner.simple>legend { display:none; } -fieldset.inner.simple>form.option { display:none; } -fieldset.inner.simple>div.status { display:none; } -fieldset.inner.simple div.toggle { display:none; } - -fieldset.inner.float>div.action { display:none; } - -fieldset.Action>div.status { display:none; } - -body.white fieldset.inner>div.output div.content { color:black; } -body.white fieldset.inner.float>div.output div.content { color:white; } -body.black fieldset.inner.float>div.output div.content { color:white; } -body.white fieldset.inner.full>div.output div.content { color:white; } -body.black fieldset.inner.full>div.output div.content { color:white; } - -/* body.white fieldset.inner.float>div.output div.profile { color:black; } */ - -// body.simple fieldset.inner>div.output td.content>div.tabs { background-color:slategrey; padding:0px; height:31px; overflow:auto; display:block; } -body.simple fieldset.inner>div.output td.content>div.tabs { background-color:#70809096; padding:0px; height:31px; overflow:auto; display:block; } -body.simple fieldset.inner>div.output td.content>div.tabs div { background-color:teal; font-family:monospace; padding:7px 20px; height:17px; float:left; } -body.simple fieldset.inner>div.output td.content>div.tabs div.select { background-color:#1d3349; } -body.simple fieldset.inner>div.output td.content>div.tabs div:hover { background-color:#1d3349; } -body.simple fieldset.inner>div.output td.content>div.path { background-color:#1d3349; padding:4px 10px; margin-bottom:4px; display:block; clear:both; } -body.simple fieldset.inner>div.output div.content td.line { padding-top:4px; border-right:none; } -body.simple fieldset.inner>div.output div.content td.text { padding-top:2px; border:solid 1px transparent; } - -body.white.simple fieldset.inner>div.output div.project { background-color:whitesmoke; } -body.white.simple fieldset.inner>div.output div.project.toggle { background-color:#4682b46b; } -body.white.simple fieldset.inner>div.output div.project div.item { color:black; } -body.white.simple fieldset.inner>div.output td.content>div.tabs { background-color:whitesmoke; } -body.white.simple fieldset.inner>div.output td.content>div.tabs div.tabs { background-color:lightgray; color:black; } -body.white.simple fieldset.inner>div.output td.content>div.tabs div.tabs.select { background-color: white; box-shadow:0px 0px 5px 1px grey; } -body.white.simple fieldset.inner>div.output td.content>div.path { background-color:white; color:black; } -body.white.simple fieldset.inner>div.output div.content { background-color:white; color:black; } -body.white.simple fieldset.inner>div.output div.content tr.select { background-color:white; } -body.white.simple fieldset.inner>div.output div.content tr.select td.line { background-color:steelblue; color:white; border:none; } -body.white.simple fieldset.inner>div.output div.content tr.select td.text { border:solid 1px lightgray; } -body.white.simple fieldset.inner>div.output div.content td.text span.string { color:royalblue; } -body.white.simple fieldset.inner>div.output div.content td.text span.function { color:darkred; } -body.white.simple fieldset.inner>div.output div.content td.text span.keyword { color:blue; } -body.white.simple fieldset.inner>div.status legend { background-color:lightgray; color:black; padding:0px 10px; border-left:solid 2px red; height:30px; float:right; border-radius:0; box-shadow:none; } - +fieldset.inner>div.output div.content td.text span.string { color:magenta; } +fieldset.inner>div.output div.content td.text span.object { color:cyan; } +fieldset.inner>div.output div.find.float { position:absolute; } +fieldset.inner.cmd>div.output>div.layout.flow>div.tabs { background-color:#70809096; height:28px; overflow:auto; display:block; } +fieldset.inner.cmd>div.output>div.layout.flow>div.tabs div { background-color:teal; font-family:monospace; padding:5px 10px; float:left; } +fieldset.inner.cmd>div.output>div.layout.flow>div.tabs div:hover { background-color:#1d3349; } +fieldset.inner.cmd>div.output>div.layout.flow>div.tabs div.select { background-color:#1d3349; } +fieldset.inner.cmd>div.output>div.layout.flow>div.tabs div.avatar { padding:0; height:28px; float:right; } +fieldset.inner.cmd>div.output>div.layout.flow>div.tabs div.avatar>img { height:28px; } +fieldset.inner.cmd>div.output>div.layout.flow>div.tabs div.time { float:right; } +fieldset.inner.cmd>div.output>div.layout.flow>div.path { background-color:#1d3349; font-family:monospace; padding:5px 10px; display:block; } +fieldset.inner.cmd>div.output>div.layout.flow>div.path span.item { padding:3px 12px; } +fieldset.inner.cmd>div.output>div.layout.flow>div.path span.item:hover { background-color:cornflowerblue; cursor:pointer; } +body.white fieldset.inner:not(.float):not(.full)>div.output div.content { color:black; } +body.white fieldset.inner:not(.float):not(.full)>div.output div.content td.text span.keyword { color:blue; } +body.white fieldset.inner:not(.float):not(.full)>div.output div.content td.text span.datatype { color:green; } +body.white fieldset.inner:not(.float):not(.full)>div.output div.content td.text span.function { color:green; } +body.white fieldset.inner.cmd>div.output>div.layout.flow>div.tabs div:hover { background-color:white; } +body.white fieldset.inner.cmd>div.output>div.layout.flow>div.tabs div.select { background-color:white; } +body.white fieldset.inner.cmd>div.output>div.layout.flow>div.path { background-color:white; } +body.white fieldset.inner.cmd>div.output div.project { background-color:whitesmoke; } +body.white fieldset.inner.cmd>div.output div.project.toggle { background-color:#4682b46b; } +body.white fieldset.inner.cmd>div.output div.content { background-color:white; } +body.white fieldset.inner.cmd>div.output div.content tr.select { background-color:white; } +body.white fieldset.inner.cmd>div.output div.content tr.select td.line { background-color:steelblue; color:white; border:none; } +body.white fieldset.inner.cmd>div.output div.content tr.select td.text { border:solid 1px lightgray; } +body.white fieldset.inner.cmd>div.output div.content td.line { padding-top:4px; border-right:none; } +body.white fieldset.inner.cmd>div.output div.content td.text { padding-top:2px; border:solid 1px transparent; } +body.white fieldset.inner.cmd>div.output div.content td.text span.string { color:royalblue; } body.mobile fieldset.inner>form.option input[name=file] { width:90px; } -body.mobile fieldset.plugin.inner div.action { display:none; } -body.mobile.landscape fieldset.plugin.inner div.action { display:contents; } - -body.mobile.simple fieldset.inner>div.output div.toggle { display:block; } -body.mobile.simple fieldset.inner>div.output div.toggle { background-color:lightblue; width:30px; } -body.mobile.simple fieldset.inner>div.output div.toggle.display { background-color:lightblue; margin-top:-33px; height:30px; width:100px; } - +body.mobile fieldset.inner.cmd>div.output div.toggle { display:block; } +body.mobile fieldset.inner.cmd>div.output div.toggle { background-color:lightblue; width:30px; } +body.mobile fieldset.inner.cmd>div.output div.toggle.display { background-color:lightblue; margin-top:-33px; height:30px; width:100px; } .unselectable { -webkit-touch-callout:none; -webkit-user-select:none; @@ -111,4 +59,23 @@ body.mobile.simple fieldset.inner>div.output div.toggle.display { background-col -o-user-select:none; user-select:none; } +div.project div.zone.create>div.action { display:none; } +div.project div.zone.create>div.list div.item { padding:2px; float:left; clear:none; } +div.project div.zone.create>div.list div.item input { font-family:monospace; } +fieldset.word fieldset.inner>form.option input[name=path] { width:240px; } +body.webview div.project div.zone.create>div.list div.item { padding:2px; } body.white.simple fieldset.plugin div.output.json div.item span.nonce { color:lightgray; } + +fieldset>div.output>fieldset.plug { position:absolute; bottom:0px; right:0px; } +fieldset>div.output>fieldset.plug { display:none; } +fieldset>div.output>fieldset.plug.select { background-color:#0e3369b3; color:white; display:block; z-index:10; } +fieldset>div.status legend { float:right; height:30px; } +fieldset>div.status legend.select { background-color:green; } +fieldset>div.status legend:hover { background-color:green; } +fieldset.inner>div.status { height:30px; overflow:auto; } +fieldset.inner div.output fieldset.toolkit { position:absolute; bottom:0px; right:0px; } +fieldset.inner>div.output fieldset.toolkit>div.output>fieldset { display:none; } +fieldset.inner>div.output fieldset.toolkit>div.output>fieldset.select { background-color:#0e3369b3; color:white; display:block; z-index:10; } +fieldset.inner>div.output fieldset.toolkit>div.output fieldset { display:none; } +fieldset.inner>div.output fieldset.toolkit>div.output fieldset.select { background-color:#0e3369b3; color:white; display:block; z-index:10; } +fieldset.inner div.output fieldset.toolkit>div.output { position:unset; } diff --git a/plugin/local/code/inner.js b/plugin/local/code/inner.js index 94e0a477..265952be 100644 --- a/plugin/local/code/inner.js +++ b/plugin/local/code/inner.js @@ -1,156 +1,95 @@ -Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb, target) { - can.onmotion.clear(can), can.page.ClassList.add(can, can._fields, code.INNER), can.onlayout.profile(can) - can.onimport._profile(can, can.ui.profile), can.onimport._display(can, can.ui.display) - if (msg.Result() == "" && can.Option(nfs.LINE) == "1") { return } - can.page.styleWidth(can, can.ui.project, 240) - - can.isCmdMode() && can.ConfHeight(can.ConfHeight()+2*html.ACTION_HEIGHT) - if (msg.Option(nfs.FILE)) { +Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb, target) { can.onmotion.clear(can), can.page.ClassList.add(can, can._fields, code.INNER) + if (msg.Option(nfs.FILE)) { can.Option(nfs.FILE, msg.Option(nfs.FILE)) msg.Option(nfs.PATH) && can.Option(nfs.PATH, msg.Option(nfs.PATH)) - can.Option(nfs.FILE, msg.Option(nfs.FILE)) msg.Option(nfs.LINE) && can.Option(nfs.LINE, msg.Option(nfs.LINE)) - } - - can.onengine.plugin(can, can.onplugin) - var paths = can.core.Split(can.Option(nfs.PATH), ice.FS); can.Option(nfs.PATH, paths[0]) + } if (msg.Result() == "" && can.Option(nfs.LINE) == "1") { return } var files = can.core.Split(can.Option(nfs.FILE), ice.FS); can.Option(nfs.FILE, files[0]) - can.core.List(paths.concat(msg.modules||[], can.sup.paths||[], can.core.Split(msg.Option("repos"))), function(p) { if (paths.indexOf(p) == -1 && p[0] != ice.PS) { paths.push(p) } }) - can.sup.paths = paths - - can.ui._content = can.ui.content, can.ui._profile_output = can.ui.profile_output - can.tabview = can.tabview||{}, can.history = can.history||[], can.toolkit = {}, can.extentions = {} - can.profile_size = {}, can.display_size = {} - - if (can.user.isWebview) { var last = can.misc.localStorage(can, "web.code.inner:currentFile"); if (last) { var ls = can.core.Split(last, ice.DF) } } - + var paths = can.core.Split(can.Option(nfs.PATH), ice.FS); can.Option(nfs.PATH, paths[0]) + can.core.List(paths.concat(msg.modules||[], can.core.Split(msg.Option(nfs.REPOS)), can.sup.paths||[]), function(p) { if (p && paths.indexOf(p) == -1 && p[0] != ice.PS) { paths.push(p) } }), can.sup.paths = paths + can.toolkit = {}, can.extentions = {}, can.onengine.plugin(can, can.onplugin) + can.tabview = can.tabview||{}, can.history = can.history||[], can.profile_size = {}, can.display_size = {} + can.ui = can.onappend.layout(can, can._output, "", [html.PROJECT, [html.TABS, nfs.PATH, [html.CONTENT, html.PROFILE], html.DISPLAY]]) + can.ui._content = can.ui.content, can.ui._profile = can.ui.profile, can.ui._display = can.ui.display switch (can.Mode()) { case chat.SIMPLE: can.onmotion.hidden(can, can.ui.project); break case chat.FLOAT: can.onmotion.hidden(can, can.ui.project); break - case chat.CMD: can.onimport._tabs(can), can.onmotion.hidden(can, can._status) // no break + case chat.CMD: can.onmotion.hidden(can, can._status), can.onimport._keydown(can) // no break case chat.FULL: // no break - default: can.onimport.project(can, paths) - can.onengine.listen(can, "tabview.view.init", function() { if (can.user.isMobile) { return } var p = can.onsyntax[can.parse] - can.Option(nfs.PATH).indexOf("src/") == 0 && p && p.render && can.onaction[ice.SHOW]({}, can); if (can.page.ClassList.has(can, can._fields, chat.PLUGIN)) { - p && p.engine && can.onaction[ice.EXEC]({}, can) - } - }) - can.onimport._keydown(can), can.onimport._toolkit(can, can.ui.toolkit), can.onimport._session(can, msg, function() { - files.length > 1 && can.onmotion.delay(can, function() { can.core.Next(files.slice(1), function(file, next) { - can.onimport.tabview(can, can.Option(nfs.PATH), file, can.Option(nfs.LINE), next) - }, function() { can.onimport.tabview(can, paths[0], files[0], "") }) }) - last && ls.length > 0 && can.onmotion.delay(can, function() { can.onimport.tabview(can, ls[0], ls[1], ls[2]) }, 500) - }) + default: can.onimport.project(can, paths), can.onimport._tabs(can) + can.onmotion.delay(can, function() { can.core.Next(files.slice(1), function(file, next) { + can.onimport.tabview(can, can.Option(nfs.PATH), file, "", next) + }, function() { files.length > 1 && can.onimport.tabview(can, paths[0], files[0], "") + if (can.user.isWebview) { var last = can.misc.localStorage(can, "web.code.inner:currentFile"); if (!last) { return } } + var ls = can.core.Split(last, ice.DF); ls.length > 0 && can.onmotion.delayLong(can, function() { can.onimport.tabview(can, ls[0], ls[1], ls[2]) }) + }) }) } - var hash = location.hash; can.tabview[can.onexport.keys(can)] = msg can.onimport.tabview(can, can.Option(nfs.PATH), can.Option(nfs.FILE), can.Option(nfs.LINE), function() { if (can.isCmdMode() && hash) { var args = can.core.Split(decodeURIComponent(hash).slice(1)) - can.onmotion.delay(can, function() { can.onimport.tabview(can, args[args.length-3]||can.Option(nfs.PATH), args[args.length-2]||can.Option(nfs.FILE), args[args.length-1]) }, 500) + can.onmotion.delayLong(can, function() { can.onimport.tabview(can, args[args.length-3]||can.Option(nfs.PATH), args[args.length-2]||can.Option(nfs.FILE), args[args.length-1]) }) } }), can.base.isFunc(cb) && cb(msg) }, - _profile: function(can, target) { - var ui = can.onimport._panel(can, target, kit.Dict( - mdb.LINK, function(event) { - if ([nfs.ZML, nfs.IML].indexOf(can.base.Ext(can.Option(nfs.FILE))) > -1) { - can.user.open(can.misc.MergePodCmd(can, {website: can.base.trimPrefix(can.base.Path(can.Option(nfs.PATH), can.Option(nfs.FILE)), "src/website/")})) - } else { - can.user.open(can.misc.MergePodCmd(can, {cmd: can.base.Path(can.Option(nfs.PATH), can.Option(nfs.FILE))})) - } - }, - html.WIDTH, function(event) { - can.user.input(event, can, [{name: html.WIDTH, value: can.profile_size[can.onexport.keys(can)]*100/can.ConfWidth()||50}], function(list) { - can.profile_size[can.onexport.keys(can)] = can.ConfWidth()*parseInt(list[0])/100, can.onaction[ice.SHOW](event, can) - }) - }, - )); can.ui.profile_output = ui.output - }, - _display: function(can, target) { - }, - _toolkit: function(can, target) { - can.ui.toolkit = can.onappend.field(can, "toolkit", {}, can._output) - }, - _keydown: function(can) { if (!can.isCmdMode()) { return } + _keydown: function(can) { can.onkeymap._build(can), can._root.onengine.listen(can, chat.ONKEYDOWN, function(event) { - if (event.ctrlKey && event.key >= "0" && event.key <= "9") { - return can.page.Select(can, can.ui._tabs, "div.tabs", function(target, index) { index+1 == event.key && target.click() }) - } + if (can.onkeymap.selectCtrlN(event, can, can.ui.tabs, html.DIV_TABS)) { return } can._key_list = can.onkeymap._parse(event, can, mdb.PLUGIN, can._key_list, can.ui.content) }) }, - _session: function(can, msg, cb) { - can.onimport.sess(can, "", function() { can.onimport.sess(can, { - exts: can.core.Split(msg.SearchOrOption("exts")).reverse(), - plug: can.core.Split(msg.SearchOrOption("plug")).reverse(), - tabs: can.core.Split(msg.SearchOrOption("tabs")), - }, cb) }) - }, - _tabs: function(can) { - can.ui._tabs = can.page.insertBefore(can, ["tabs"], can.ui._content), can.ui._path = can.page.insertBefore(can, ["path"], can.ui._content) - can.page.Append(can, can.ui._tabs, [{view: [["time", "select"]], style: {"float": html.RIGHT}, _init: function(target) { - can.core.Timer({interval: 100}, function() { can.page.Appends(can, target, [{text: can.base.Time()}]) }) + _tabs: function(can) { if (!can.isCmdMode()) { return can.ui.tabs = can._action } + can.page.Append(can, can.ui.tabs, [{view: [[mdb.TIME, html.SELECT]], _init: function(target) { + can.core.Timer({interval: 100}, function() { can.page.Modify(can, target, can.base.Time()) }) can.onappend.figure(can, {action: "date", _hold: true}, target, function(sub, value) { can.onimport.tabview(can, can.Option(nfs.PATH), "web.team.plan", ctx.INDEX) }) - target.onmouseenter = target.click }}]) + can.page.Append(can, can.ui.tabs, [{view: [aaa.AVATAR], list: [{img: can.user.info.avatar}]}]) }, _tabInputs: function(can, ps, key, value, cb) { can.core.List(can.core.Split(value, ps), function(value, index, array) { - can.page.Append(can, can.ui._path, [{text: [value, html.SPAN, html.ITEM], onclick: function(event) { + can.page.Append(can, can.ui.path, [{text: [value, html.SPAN, html.ITEM], onclick: function(event) { can.onimport.tabInputs(event, can, ps, key, array.slice(0, index).join(ps)+ps, cb) }}, index < array.length-1? {text: ps}: null]) }) }, tabInputs: function(event, can, ps, key, pre, cb, parent) { - var core = ["usr/icebergs/core/", "usr/volcanos/plugin/local/"] can.runAction(event, mdb.INPUTS, [key, pre], function(msg) { var _trans = {} - var carte = can.user[parent? "carteRight": "carte"](event, can, {}, msg.Table(function(value) { var p = can.base.trimPrefix(value[key], pre) - if (can.base.beginWith(pre, core[0]) && can.base.beginWith(value[key], core[1])) { var p = can.base.trimPrefix(can.base.replaceAll(value[key], core[1], core[0]), pre) } - if (can.base.beginWith(pre, core[1]) && can.base.beginWith(value[key], core[0])) { var p = can.base.trimPrefix(can.base.replaceAll(value[key], core[0], core[1]), pre) } - return _trans[p] = value[key], p + var carte = can.user[parent? "carteRight": "carte"](event, can, {}, msg.Table(function(value) { + var p = can.core.Split(value[key], ice.PS).pop()+(can.base.endWith(value[key], ice.PS)? ice.PS: ""); return _trans[p] = value[key], p }), function(event, button) { - can.base.endWith(button, ps)? can.onimport.tabInputs(event, can, ps, key, pre+button, cb, carte): cb(can.core.Split(_trans[button], ps), pre) + can.base.endWith(button, ps)? can.onimport.tabInputs(event, can, ps, key, pre+button, cb, carte): cb(can.core.Split(_trans[button], ps)) }, parent)._target, _p = can.core.Split(event.target.innerHTML.trim(), ice.PT)[0] - can.page.Select(can, carte, html.DIV_ITEM, function(target) { event.target.innerHTML.trim() != target.innerHTML.trim() && can.base.beginWith(target.innerHTML, _p) && carte.insertBefore(target, carte.firstChild) }) + can.page.Select(can, carte, html.DIV_ITEM, function(target) { target.innerHTML.trim() != event.target.innerHTML.trim() && can.base.beginWith(target.innerHTML, _p) && carte.insertBefore(target, carte.firstChild) }) function remove(p) { if (p && p._sub) { remove(p._sub), can.page.Remove(can, p._sub), delete(p._sub) } } if (parent) { remove(parent), parent._sub = carte } }) }, tabview: function(can, path, file, line, cb) { var key = can.onexport.keys(can, path, file) function isCommand() { return path == ctx.COMMAND || line == ctx.INDEX || line == code.XTERM } function isDream() { return line == web.DREAM } - function show(skip) { if (can.isCmdMode()) { can.onimport._title(can, path+file) } can._msg && can._msg.Option(nfs.LINE, can.Option(nfs.LINE)), can._msg = can.tabview[key] - - can.Option(can.onimport.history(can, {path: path, file: file, line: line||can.misc.localStorage(can, "web.code.vimer:selectLine:"+path+file)||can._msg.Option(nfs.LINE)|| 1})) + can.Option(can.onimport.history(can, {path: path, file: file, line: line||can.misc.localStorage(can, "web.code.vimer:selectLine:"+path+file)||can._msg.Option(nfs.LINE)||1})) can.onsyntax._init(can, can._msg, function(content) { var msg = can._msg - can.onexport.hash(can), msg._tab && can.onmotion.select(can, msg._tab.parentNode, html.DIV_TABS, msg._tab) - if (can.ui._path) { can.ui._path.innerHTML = "" - if (isDream()) { - can.ui._path.innerHTML = can.page.Format(html.A, can.misc.MergePodCmd(can, {pod: can.Option(nfs.FILE)})) - } else if (isCommand()) { - can.ui._path.innerHTML = can.Option(nfs.FILE) + can.onexport.hash(can), can.onmotion.select(can, can.ui.tabs, html.DIV_TABS, msg._tab) + if (can.ui.path) { can.ui.path.innerHTML = "" + if (isCommand()) { + can.ui.path.innerHTML = can.Option(nfs.FILE) + } else if (isDream()) { + can.ui.path.innerHTML = can.page.Format(html.A, can.misc.MergePodCmd(can, {pod: can.Option(nfs.FILE)})) } else { - can.onimport._tabInputs(can, ice.PS, nfs.PATH, can.base.Path(can.Option(nfs.PATH), can.Option(nfs.FILE)), function(ls, pre) { - if (can.base.beginWith(pre, "usr/")) { - can.onimport.tabview(can, ls.slice(0, 2).join(ice.PS)+ice.PS, ls.slice(2).join(ice.PS)) - } else { + can.onimport._tabInputs(can, ice.PS, nfs.PATH, can.base.Path(can.Option(nfs.PATH), can.Option(nfs.FILE)), function(ls) { + if (ls[0] == ice.SRC) { can.onimport.tabview(can, ls.slice(0, 1).join(ice.PS)+ice.PS, ls.slice(1).join(ice.PS)) + } else { + can.onimport.tabview(can, ls.slice(0, 2).join(ice.PS)+ice.PS, ls.slice(2).join(ice.PS)) } }) } } - can.ui.current && can.onmotion.toggle(can, can.ui.current, !isCommand() && !isDream()) - - can.page.Select(can, can.ui._content.parentNode, can.page.Keys(html.DIV_CONTENT, html.IFRAME), function(item) { - if (item.parentNode != can.ui._content.parentNode) { return } + can.page.SelectChild(can, can.ui._content.parentNode, can.page.Keys(html.DIV_CONTENT, [[[html.IFRAME, html.CONTENT]]]), function(item) { if (can.onmotion.toggle(can, item, item == msg._content)) { can.ui.content = msg._content } }), can.ui.content._plugin = msg._plugin, msg._plugin && can.onmotion.delay(can, function() { msg._plugin.Focus() }) - - can.page.Select(can, can.ui._profile_output.parentNode, can.page.Keys(html.DIV_OUTPUT, html.IFRAME), function(item) { - if (item.parentNode != can.ui._profile_output.parentNode) { return } - if (can.onmotion.toggle(can, item, item == msg._profile_output)) { can.ui.profile_output = msg._profile_output } - }) - + can.page.SelectChild(can, can.ui._content.parentNode, can.page.Keys(html.DIV_PROFILE, [[[html.IFRAME, html.PROFILE]]]), function(item) { + if (can.onmotion.toggle(can, item, item == msg._profile)) { can.ui.profile = msg._profile } + }), can.ui.current && can.onmotion.toggle(can, can.ui.current, !isCommand() && !isDream()) var ls = can.file.split(ice.PS); if (ls.length > 4) { ls = [ls.slice(0, 2).join(ice.PS)+"/.../"+ls.slice(-2).join(ice.PS)] } can.Status(kit.Dict("文件名", ls.join(ice.PS), "解析器", can.parse)), can.onimport.layout(can) skip || can.onaction.selectLine(can, can.Option(nfs.LINE)), can.base.isFunc(cb) && cb(), cb = null @@ -160,13 +99,12 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb, target) { can.onimport.tabs(can, [{name: file.split(isCommand()? ice.PT: ice.PS).pop(), text: file}], function(event) { can._tab = msg._tab = event.target, show(true) }, function(item) { can.onengine.signal(can, "tabview.view.delete", msg) - delete(can.tabview[key]), delete(can._cache_data[key]), delete(can.ui._content._cache[key]) - delete(can.ui._profile_output._cache[key]), delete(can.ui.display._cache[key]) - msg._content != can.ui._content && can.page.Remove(can, msg._content) - }, can.ui._tabs) + msg._content != can.ui._content && can.page.Remove(can, msg._content), msg._profile != can.ui._profile && can.page.Remove(can, msg._profile) + delete(can.ui._content._cache[key]), delete(can.ui._profile._cache[key]), delete(can.ui.display._cache[key]) + delete(can._cache_data[key]), delete(can.tabview[key]) + }, can.ui.tabs) } - - if (can.tabview[key]) { return !can._msg._tab? load(can.tabview[key]): show() } + if (can.tabview[key]) { return !can._msg._tab && !can.isSimpleMode()? load(can.tabview[key]): show() } isCommand()||isDream()? load(can.request({}, {index: file, line: line})): can.run({}, [path, file], load, true) }, history: function(can, record) { @@ -179,46 +117,37 @@ Volcanos(chat.ONIMPORT, {_init: function(can, msg, cb, target) { }), can.ui.project), can.user.isMobile && !can.user.isLandscape() && can.onmotion.hidden(can, can.ui.project) }, profile: function(can, msg) { var sup = can.tabview[can.onexport.keys(can)] - if (msg.Result().indexOf(" -1) { if (sup._profile_output != can.ui._profile_output) { can.page.Remove(can, sup._profile_output) } - can.ui.profile_output = sup._profile_output = can.page.Append(can, can.ui._profile_output.parentNode, [{view: html.OUTPUT, inner: msg.Result()}]).output - var width = can.profile_size[can.onexport.keys(can)]||(can.ConfWidth()-can.ui.project.offsetWidth)/2; can.profile_size[can.onexport.keys(can)] = width - } else { - can.ui.profile_output = sup._profile_output = can.ui._profile_output - var width = can.profile_size[can.onexport.keys(can)]||(can.ConfWidth()-can.ui.project.offsetWidth)/2 - can.onimport.process(can, msg, can.ui._profile_output, can.ui.profile.offsetHeight, width) - can.onappend._status(can, msg.Option(ice.MSG_STATUS), can.page.Append(can, can.ui._profile_output, [html.STATUS])._target) - can.page.Select(can, can.ui._profile_output, html.TABLE, function(target) { can.onmotion.delay(can, function() { - if (target.offsetWidth < can.ui._profile_output.offsetWidth) { can.profile_size[can.onexport.keys(can)] = target.offsetWidth, can.onimport.layout(can) } + if (msg.Result().indexOf("