1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-25 08:48:06 +08:00
This commit is contained in:
IT 老营长 @云轩领航-创始人 2024-05-17 19:39:41 +08:00
parent bfb6e331a9
commit 0701ed916c
10 changed files with 184 additions and 146 deletions

View File

@ -1180,32 +1180,30 @@ Volcanos(chat.ONMOTION, {_init: function(can, target) {
}, function() { can.page.style(can, target, html.HEIGHT, "") }) }, function() { can.page.style(can, target, html.HEIGHT, "") })
}, },
}) })
Volcanos(chat.ONKEYMAP, {_init: function(can, target) { target = target||document.body Volcanos(chat.ONKEYMAP, {
can.onkeymap._build(can), target.onkeydown = function(event) { can.misc.Event(event, can, function(msg) { _init: function(can, target) { target = target||document.body, can.onkeymap._build(can)
target.onkeydown = function(event) {
if (can.user.isWindows && event.ctrlKey) { can.onkeymap.prevent(event) } if (can.user.isWindows && event.ctrlKey) { can.onkeymap.prevent(event) }
if (can.page.tagis(event.target, html.SELECT, html.INPUT, html.TEXTAREA)) { return } if (can.page.tagis(event.target, html.SELECT, html.INPUT, html.TEXTAREA)) { return }
can.onengine.signal(can, chat.ONKEYDOWN, can.request(event, {"model": can.user.isWebview && event.metaKey? "webview": mdb.NORMAL})) can.onengine.signal(can, chat.ONKEYDOWN, can.request(event))
}) }, target.onkeyup = function(event) { can.misc.Event(event, can, function(msg) { }, target.onkeyup = function(event) { target.onkeydown(event) }
if (can.user.isWindows && event.ctrlKey) { can.onkeymap.prevent(event) }
if (can.page.tagis(event.target, html.SELECT, html.INPUT, html.TEXTAREA)) { return }
can.onengine.signal(can, chat.ONKEYUP, can.request(event, {"model": mdb.NORMAL}))
}) }
}, },
_build: function(can) { can.core.Item(can.onkeymap._mode, function(item, value) { var engine = {list: {}} _build: function(can) { can.core.Item(can.onkeymap._mode, function(mode, value) { var engine = {list: {}}
can.core.Item(value, function(key, cb) { var map = engine; for (var i = 0; i < key.length; i++) { can.core.Item(value, function(key, cb) { var map = engine; for (var i = 0; i < key.length; i++) {
if (!map.list[key[i]]) { map.list[key[i]] = {list: {}} } map = map.list[key[i]]; if (i == key.length-1) { map.cb = cb } if (!map.list[key[i]]) { map.list[key[i]] = {list: {}} } map = map.list[key[i]]; if (i == key.length-1) { map.cb = cb }
} }), can.onkeymap._engine[item] = engine } }), can.onkeymap._engine[mode] = engine
}) }, }) },
_parse: function(event, can, mode, list, target) { list = list||[] _parse: function(event, can, mode, target, list) { mode = mode||mdb.PLUGIN, target = target||can._output; if (!list) { list = target._key_list||[], target._key_list = list }
if (event.metaKey && !can.user.isWebview) { return } if ([code.META, code.ALT, code.CONTROL, code.SHIFT].indexOf(event.key) > -1) { return list } if (event.metaKey && !can.user.isWebview) { return list } if ([code.SHIFT, code.CONTROL, code.META, code.ALT].indexOf(event.key) > -1) { return list }
list.push(event.key); for (var pre = 0; pre < list.length; pre++) { if ("0" <= list[pre] && list[pre] <= "9") { continue } break } list.push(event.key); for (var pre = 0; pre < list.length; pre++) { if ("0" <= list[pre] && list[pre] <= "9") { continue } break }
var count = parseInt(list.slice(0, pre).join(""))||1, map = can.onkeymap._mode[mode] var count = parseInt(list.slice(0, pre).join(""))||1, map = can.onkeymap._mode[mode]
function clear() { return target._key_list = [] }
function repeat(cb, count) { list = []; for (var i = 1; i <= count; i++) { if (can.core.CallFunc(cb, {event: event, can: can, target: target, count: count})) { break } } } function repeat(cb, count) { list = []; for (var i = 1; i <= count; i++) { if (can.core.CallFunc(cb, {event: event, can: can, target: target, count: count})) { break } } }
var cb = map && map[event.key]; if (can.base.isFunc(cb) && event.key.length > 1) { repeat(cb, count); return list } var cb = map && map[event.key.toLowerCase()]; if (can.base.isFunc(cb) && event.key.length > 1) { repeat(cb, count); return clear() }
var cb = map && map[event.key.toLowerCase()]; if (can.base.isFunc(cb) && event.key.length > 1) { repeat(cb, count); return list } var cb = map && map[event.key]; if (can.base.isFunc(cb) && event.key.length > 1) { repeat(cb, count); return clear() }
var map = can.onkeymap._engine[mode]; if (!map) { return [] } var map = can.onkeymap._engine[mode]; if (!map) { return clear() }
for (var i = pre; i < list.length; i++ ) { var map = map.list[list[i]]; if (!map) { return [] } for (var i = pre; i < list.length; i++ ) { var map = map.list[list[i]]; if (!map) { return clear() }
if (i == list.length-1 && can.base.isFunc(map.cb)) { repeat(map.cb, count); return [] } if (i == list.length-1 && can.base.isFunc(map.cb)) { repeat(map.cb, count); return clear() }
} return list } return list
}, },
_mode: { _mode: {
@ -1235,10 +1233,8 @@ Volcanos(chat.ONKEYMAP, {_init: function(can, target) { target = target||documen
}, },
}, },
}, _engine: {}, }, _engine: {},
input: function(event, can) { can.onkeymap._parse(event, can, mdb.INSERT+(event.ctrlKey? "_ctrl": ""), event.target) },
prevent: function(event) { event && (event.stopPropagation(), event.preventDefault()); return true }, prevent: function(event) { event && (event.stopPropagation(), event.preventDefault()); return true },
input: function(event, can) { if (event.metaKey) { return } var target = event.target
target._keys = can.onkeymap._parse(event, can, mdb.INSERT+(event.ctrlKey? "_ctrl": ""), target._keys, target)
},
cursorMove: function(target, count, begin) { cursorMove: function(target, count, begin) {
if (begin != undefined) { if (begin < 0) { begin += target.value.length+1 } target.setSelectionRange(begin, begin) } if (begin != undefined) { if (begin < 0) { begin += target.value.length+1 } target.setSelectionRange(begin, begin) }
return count == undefined || target.setSelectionRange(target.selectionStart+count, target.selectionStart+count), target.selectionStart return count == undefined || target.setSelectionRange(target.selectionStart+count, target.selectionStart+count), target.selectionStart
@ -1291,7 +1287,6 @@ Volcanos(chat.ONKEYMAP, {_init: function(can, target) { target = target||documen
can.onmotion.hidden(can, tr, tr.innerText.indexOf(target.value) > -1) can.onmotion.hidden(can, tr, tr.innerText.indexOf(target.value) > -1)
return tr return tr
}).length > 0) { return } }).length > 0) { return }
// , target._index = -1, target._value = target.value
can.page.Select(can, can._output, [html.TBODY, html.TR], function(tr, index) { var has = false can.page.Select(can, can._output, [html.TBODY, html.TR], function(tr, index) { var has = false
can.page.Select(can, tr, html.TD, function(td) { has = has || td.innerText.indexOf(target.value)>-1 }), can.page.ClassList.set(can, tr, html.HIDDEN, !has) can.page.Select(can, tr, html.TD, function(td) { has = has || td.innerText.indexOf(target.value)>-1 }), can.page.ClassList.set(can, tr, html.HIDDEN, !has)
}), target._index = -1, target._value = target.value }), target._index = -1, target._value = target.value

View File

@ -856,6 +856,7 @@ fieldset.inner>div.output>div.project div.item.modify { background-color:#008000
fieldset.vimer>div.output>div.project div.item.modify { background-color:#00800036; } fieldset.vimer>div.output>div.project div.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 div.item.stop { color:var(--disable-fg-color); }
fieldset.vimer>div.output>div.project>div.zone.space fieldset>div.output>div.item { height:42px; } fieldset.vimer>div.output>div.project>div.zone.space fieldset>div.output>div.item { height:42px; }
fieldset.vimer>div.output>div.project>div.zone.space fieldset>div.output>div.item.select { border-left:var(--box-notice3); }
fieldset.xterm>div.action>div.tabs:only-child { display:none; } fieldset.xterm>div.action>div.tabs:only-child { display:none; }
fieldset.xterm>div.layout { clear:both; } fieldset.xterm>div.layout { clear:both; }
fieldset.xterm>form.option>div.item.args1 { display:none; } fieldset.xterm>form.option>div.item.args1 { display:none; }

View File

@ -271,7 +271,7 @@ Volcanos("misc", {
}, },
PathJoin: function(dir, file, ext) { file = file||"" PathJoin: function(dir, file, ext) { file = file||""
if (file.indexOf(nfs.PS) == 0 || file.indexOf(web.HTTP) == 0) { return file } if (file.indexOf(nfs.PS) == 0 || file.indexOf(web.HTTP) == 0) { return file }
if (dir.indexOf(nfs.SRC) == 0 || dir.indexOf(nfs.USR) == 0) { dir = "/require/"+dir } if (dir.indexOf(nfs.SRC) == 0 || dir.indexOf(nfs.USR) == 0) { dir = nfs.P+dir }
return dir+file+(ext? nfs.PT+ext: "") return dir+file+(ext? nfs.PT+ext: "")
}, },
isDebug: function(can) { return can.misc.Search(can, log.DEBUG) == ice.TRUE }, isDebug: function(can) { return can.misc.Search(can, log.DEBUG) == ice.TRUE },

View File

@ -84,13 +84,12 @@ Volcanos(chat.ONACTION, {_init: function(can, target) { can.db.list = can.misc.S
_onaction_cmd: function(can) { can.onengine.signal(can, chat.ONACTION_CMD), can.onlayout._init(can) }, _onaction_cmd: function(can) { can.onengine.signal(can, chat.ONACTION_CMD), can.onlayout._init(can) },
onaction_cmd: function(can, msg) { can.user.mod.isCmd = true, can.page.ClassList.add(can, can._target, can.Mode(chat.CMD)), can.Conf(html.MARGIN_Y, 128), can.Conf(html.MARGIN_X, 0) }, onaction_cmd: function(can, msg) { can.user.mod.isCmd = true, can.page.ClassList.add(can, can._target, can.Mode(chat.CMD)), can.Conf(html.MARGIN_Y, 128), can.Conf(html.MARGIN_X, 0) },
onsearch: function(can, msg, arg) { var fields = msg.Option(ice.MSG_FIELDS).split(mdb.FS); if (arg[0] == mdb.PLUGIN) { can.onexport.plugin(can, msg, arg, fields) } if (arg[0] == ctx.COMMAND) { can.onexport.command(can, msg, arg, fields) } }, onsearch: function(can, msg, arg) { var fields = msg.Option(ice.MSG_FIELDS).split(mdb.FS); if (arg[0] == mdb.PLUGIN) { can.onexport.plugin(can, msg, arg, fields) } if (arg[0] == ctx.COMMAND) { can.onexport.command(can, msg, arg, fields) } },
onkeydown: function(can, msg, model) {
if (can.isCmdMode() && !msg._event.metaKey) { var sub = can._plugins[0].sub; sub && can.core.CallFunc([sub, "onaction.onkeydown"], {event: msg._event, can: sub}); return }
if (can._current && !msg._event.metaKey) { var sub = can._current.sub; sub && can.core.CallFunc([sub, "onaction.onkeydown"], {event: msg._event, can: sub}); return }
if (can.onkeymap.selectCtrlN(msg._event, can, can._action, html.DIV_ITEM)) { return }
can._keylist = can.onkeymap._parse(msg._event, can, model, can._keylist||[], can._output)
},
onresize: function(can) { can.onaction.layout(can) }, onresize: function(can) { can.onaction.layout(can) },
onkeydown: function(event, can, mode) {
if (can.isCmdMode() && !event.metaKey) { var sub = can._plugins[0].sub; sub && can.core.CallFunc([sub, "onaction.onkeydown"], {event: event, can: sub}); return }
// if (can._current && !event.metaKey) { var sub = can._current.sub; sub && can.core.CallFunc([sub, "onaction.onkeydown"], {event: event, can: sub}); return }
can.onkeymap.selectCtrlN(event, can, can._action, html.DIV_TABS) || can.onkeymap._parse(event, can, mode)
},
ontouchstart: function(event, can) { can.touch = can.touch || {}, can.touch.isStart = true, can.touch.startX = event.touches[0].clientX }, ontouchstart: function(event, can) { can.touch = can.touch || {}, can.touch.isStart = true, can.touch.startX = event.touches[0].clientX },
ontouchmove: function(event, can) { can.touch.isMove = true, can.touch.distanceX = event.touches[0].clientX - can.touch.startX }, ontouchmove: function(event, can) { can.touch.isMove = true, can.touch.distanceX = event.touches[0].clientX - can.touch.startX },
@ -180,21 +179,8 @@ Volcanos(chat.ONENGINE, {_engine: function(event, sup, msg, can, cmds, cb) {
}}) }})
Volcanos(chat.ONKEYMAP, { Volcanos(chat.ONKEYMAP, {
_mode: { _mode: {
webview: { plugin: {
"[": function(event, can, target) { history.back() }, Enter: function(event, can) { can.onengine.signal(can, chat.ONOPENSEARCH, can.request(event, {type: "*"})) },
"]": function(event, can, target) { history.forward() },
r: function(event, can, target) { can.user.reload(true) },
w: function(event, can, target) { can.user.close() },
q: function(event, can, target) { window.terminate() },
o: function(event, can, target) { window.openurl(location.href) },
p: function(event, can, target) { window.openapp("QuickTime Player") },
t: function(event, can, target) { window.opencmd("cd contexts; pwd") },
f: function(event, can, target) { can.onengine.signal(can, chat.ONOPENSEARCH, can.request({}, {type: mdb.FOREACH})) },
},
normal: {
":": function(event, can) { can.onengine.signal(can, chat.ONCOMMAND_FOCUS), can.onkeymap.prevent(event) },
" ": function(event, can) { can.onengine.signal(can, chat.ONSEARCH_FOCUS), can.onkeymap.prevent(event) },
Enter: function(event, can) { can.onengine.signal(can, chat.ONOPENSEARCH, can.request(event)) },
Escape: function(event, can) { can.onmotion.clearFloat(can) || can._root.Search && can.onmotion.hidden(can, can._root.Search._target) }, Escape: function(event, can) { can.onmotion.clearFloat(can) || can._root.Search && can.onmotion.hidden(can, can._root.Search._target) },
}, },
}, _engine: {}, }, _engine: {},

View File

@ -10,7 +10,7 @@ fieldset.inner>div.output div.content td.text span.datatype { color:var(--code-d
fieldset.inner>div.output div.content td.text span.package { color:var(--code-package); } fieldset.inner>div.output div.content td.text span.package { color:var(--code-package); }
fieldset.inner>div.output>div.project { font-family:var(--code-font-family); } fieldset.inner>div.output>div.project { font-family:var(--code-font-family); }
fieldset.inner>div.output>div.project div.list { border-left:none; } fieldset.inner>div.output>div.project div.list { border-left:none; }
fieldset.inner>div.output>div.project div.item.select { background-color:unset; } fieldset.inner>div.output>div.project div.item.select:not(:hover) { background-color:unset; }
fieldset.inner:not(.vimer)>div.output>div.project div.expand.open { color:var(--notice-bg-color); } fieldset.inner:not(.vimer)>div.output>div.project div.expand.open { color:var(--notice-bg-color); }
fieldset.inner>div.output>div.project div.zone div.action:not(.hide) { width:100%; } fieldset.inner>div.output>div.project div.zone div.action:not(.hide) { width:100%; }
fieldset.inner>div.output>div.project div.zone div.action>div.item { padding-right:0; width:100%; overflow:hidden; } fieldset.inner>div.output>div.project div.zone div.action>div.item { padding-right:0; width:100%; overflow:hidden; }
@ -20,7 +20,9 @@ fieldset.inner>div.output>div.layout>div.tabs { font-size:var(--code-font-size);
fieldset.inner>div.output>div.layout>div.tabs>div:hover { background-color:unset; color:unset; box-shadow:unset; } fieldset.inner>div.output>div.layout>div.tabs>div:hover { background-color:unset; color:unset; box-shadow:unset; }
fieldset.inner>div.output>div.layout>div.tabs>div.tabs>div.tabs { padding-right:0; } fieldset.inner>div.output>div.layout>div.tabs>div.tabs>div.tabs { padding-right:0; }
fieldset.inner>div.output>div.layout>div.tabs>div.tabs>div.tabs.select { background-color:var(--output-bg-color); color:unset; border-top:var(--box-notice3); box-shadow:var(--legend-box-shadow);} fieldset.inner>div.output>div.layout>div.tabs>div.tabs>div.tabs.select { background-color:var(--output-bg-color); color:unset; border-top:var(--box-notice3); box-shadow:var(--legend-box-shadow);}
fieldset.vimer>div.output>div.layout>div.tabs>div.tabs>div.tabs.select { border-top:var(--box-border3); } fieldset.vimer>div.output.source>div.layout>div.tabs>div.tabs>div.tabs.select { border-top:var(--box-border3); }
fieldset.vimer>div.output.source.normal>div.layout>div.tabs>div.tabs>div.tabs.select { border-top:var(--box-notice3); }
fieldset.vimer>div.output.source.insert>div.layout>div.tabs>div.tabs>div.tabs.select { border-top:var(--box-danger3); }
fieldset.inner>div.output>div.layout>div.tabs>div.tabs>div.tabs { border-top:var(--box-border3); border-top-color:transparent; } fieldset.inner>div.output>div.layout>div.tabs>div.tabs>div.tabs { border-top:var(--box-border3); border-top-color:transparent; }
fieldset.inner>div.output>div.layout>div.tabs>div.tabs>div.tabs:hover { background-color:var(--output-bg-color); color:unset; box-shadow:var(--legend-box-shadow); } fieldset.inner>div.output>div.layout>div.tabs>div.tabs>div.tabs:hover { background-color:var(--output-bg-color); color:unset; box-shadow:var(--legend-box-shadow); }
fieldset.inner>div.output>div.layout>div.path { font-size:var(--code-font-size); display:none; } fieldset.inner>div.output>div.layout>div.path { font-size:var(--code-font-size); display:none; }
@ -48,7 +50,7 @@ fieldset.inner>div.output>div.layout>div.layout>div.profile pre>code { padding-l
fieldset.inner>div.output>div.layout>div.layout>div.profile>div.code { white-space:unset; padding:var(--table-padding); } fieldset.inner>div.output>div.layout>div.layout>div.profile>div.code { white-space:unset; padding:var(--table-padding); }
fieldset.inner>div.output>div.layout>div.layout>div.profile div.status>div { padding:var(--input-padding); float:left; } fieldset.inner>div.output>div.layout>div.layout>div.profile div.status>div { padding:var(--input-padding); float:left; }
fieldset.inner>div.output>div.layout>div.layout div.content div.tips { color:var(--disable-fg-color); font-style:italic; line-height:var(--code-line-height); position:absolute; top:0; right:10px; } fieldset.inner>div.output>div.layout>div.layout div.content div.tips { color:var(--disable-fg-color); font-style:italic; line-height:var(--code-line-height); position:absolute; top:0; right:10px; }
fieldset.inner>div.output>div.layout>div.layout>fieldset.story { margin:var(--plugin-margin) 0; } fieldset.inner>div.output>div.layout>div.layout>fieldset.story { box-shadow:unset; }
fieldset.inner.cmd>div.output>div.layout>div.tabs:not(.hide) { background-color:var(--plugin-bg-color); height:var(--code-tabs-height); display:flex; } fieldset.inner.cmd>div.output>div.layout>div.tabs:not(.hide) { background-color:var(--plugin-bg-color); height:var(--code-tabs-height); display:flex; }
fieldset.inner.cmd>div.output>div.layout>div.tabs>div { height:var(--code-tabs-height); } fieldset.inner.cmd>div.output>div.layout>div.tabs>div { height:var(--code-tabs-height); }
fieldset.inner.cmd>div.output>div.layout>div.tabs>div.icon>div.icon { font-size:26px; line-height:32px; padding:2px 5px; position:sticky; top:0; } fieldset.inner.cmd>div.output>div.layout>div.tabs>div.icon>div.icon { font-size:26px; line-height:32px; padding:2px 5px; position:sticky; top:0; }
@ -57,9 +59,9 @@ fieldset.inner.cmd>div.output>div.layout>div.tabs>div.tabs:hover { background-co
fieldset.inner.cmd>div.output>div.layout>div.tabs>div.tabs>div.tabs { padding:var(--input-padding) var(--button-padding); margin-right:var(--button-margin); height:var(--code-tabs-height); display:flex; align-items:center; } fieldset.inner.cmd>div.output>div.layout>div.tabs>div.tabs>div.tabs { padding:var(--input-padding) var(--button-padding); margin-right:var(--button-margin); height:var(--code-tabs-height); display:flex; align-items:center; }
fieldset.inner.cmd>div.output>div.layout>div.tabs>div.head { flex-direction:row-reverse; display:flex; } fieldset.inner.cmd>div.output>div.layout>div.tabs>div.head { flex-direction:row-reverse; display:flex; }
fieldset.inner.cmd>div.output>div.layout>div.tabs>div.head>div { white-space:pre; padding:0 var(--input-padding); height:var(--code-tabs-height); display:flex; align-items:center; } fieldset.inner.cmd>div.output>div.layout>div.tabs>div.head>div { white-space:pre; padding:0 var(--input-padding); height:var(--code-tabs-height); display:flex; align-items:center; }
fieldset.inner.cmd>div.output>div.layout>div.tabs>div.head>div.qrcode { padding-top:5px; }
fieldset.inner.cmd>div.output>div.layout>div.tabs>div.head>div.online { margin-left:0 !important; margin-right:0 !important; flex-direction: row-reverse; } fieldset.inner.cmd>div.output>div.layout>div.tabs>div.head>div.online { margin-left:0 !important; margin-right:0 !important; flex-direction: row-reverse; }
fieldset.inner.cmd>div.output>div.layout>div.tabs>div.head>div.online img { height:24px; } fieldset.inner.cmd>div.output>div.layout>div.tabs>div.head>div.online img { height:24px; }
fieldset.inner.cmd>div.output>div.layout>div.tabs>div.head>div.qrocde { padding-top:5px; }
fieldset.inner.cmd>div.output>div.layout>div.tabs>div.head>div.avatar { padding:0; } fieldset.inner.cmd>div.output>div.layout>div.tabs>div.head>div.avatar { padding:0; }
fieldset.inner.cmd>div.output>div.layout>div.tabs>div.head>div.avatar>img { height:32px; clip-path:circle(40%); } fieldset.inner.cmd>div.output>div.layout>div.tabs>div.head>div.avatar>img { height:32px; clip-path:circle(40%); }
fieldset.inner.cmd>div.output>div.layout>div.plug { box-shadow:var(--th-box-shadow); height:var(--action-height); overflow:auto; } fieldset.inner.cmd>div.output>div.layout>div.plug { box-shadow:var(--th-box-shadow); height:var(--action-height); overflow:auto; }

View File

@ -10,6 +10,7 @@ Volcanos(chat.ONIMPORT, {
var paths = can.core.Split(can.Option(nfs.PATH)); can.Option(nfs.PATH, paths[0]) var paths = can.core.Split(can.Option(nfs.PATH)); can.Option(nfs.PATH, paths[0])
can.core.List([nfs.PATH, nfs.FILE, nfs.LINE], function(key) { msg.Option(key) && can.Option(key, msg.Option(key)) }) can.core.List([nfs.PATH, nfs.FILE, nfs.LINE], function(key) { msg.Option(key) && can.Option(key, msg.Option(key)) })
can.db = {tabview: {}, history: [], _history: [], toolkit: {}}, can.db.tabview[can.onexport.keys(can)] = msg can.db = {tabview: {}, history: [], _history: [], toolkit: {}}, can.db.tabview[can.onexport.keys(can)] = msg
can.db.hash = can.isCmdMode()? can.misc.SearchHash(can): []
can.ui = can.onappend.layout(can, [html.PROJECT, [html.TABS, nfs.PATH, [html.CONTENT, html.PROFILE], html.DISPLAY, html.PLUG]]) can.ui = can.onappend.layout(can, [html.PROJECT, [html.TABS, nfs.PATH, [html.CONTENT, html.PROFILE], html.DISPLAY, html.PLUG]])
can.ui._content = can.ui.content, can.ui._profile = can.ui.profile, can.ui._display = can.ui.display can.ui._content = can.ui.content, can.ui._profile = can.ui.profile, can.ui._display = can.ui.display
can.onmotion.clear(can, can.ui.project), can.onmotion.hidden(can, can.ui.project), can.onmotion.hidden(can, can.ui.tabs), can.onmotion.hidden(can, can.ui.plug) can.onmotion.clear(can, can.ui.project), can.onmotion.hidden(can, can.ui.project), can.onmotion.hidden(can, can.ui.tabs), can.onmotion.hidden(can, can.ui.plug)
@ -36,7 +37,8 @@ Volcanos(chat.ONIMPORT, {
"\u25E7": function(event) { var show = can.onmotion.toggle(can, can.ui.project); can.onimport.layout(can), can.isCmdMode() && can.onexport.session(can, PROJECT_HIDE, show? "": html.HIDE) }, "\u25E7": function(event) { var show = can.onmotion.toggle(can, can.ui.project); can.onimport.layout(can), can.isCmdMode() && can.onexport.session(can, PROJECT_HIDE, show? "": html.HIDE) },
"\u25E8": shy({transform: "rotate(90deg) translate"+(can.user.isWindows? "(-2px)": "(1px,-2px)")}, function(event) { "\u25E8": shy({transform: "rotate(90deg) translate"+(can.user.isWindows? "(-2px)": "(1px,-2px)")}, function(event) {
if (can.page.isDisplay(can.ui.display)) { return can.onmotion.hidden(can, can.ui.display), can.onimport.layout(can) } can.onaction.exec(event, can) }), if (can.page.isDisplay(can.ui.display)) { return can.onmotion.hidden(can, can.ui.display), can.onimport.layout(can) } can.onaction.exec(event, can) }),
"\u25E8 ": shy({width: 24}, function(event) { if (can.page.isDisplay(can.ui.profile)) { can._msg._profile_hidden = true "\u25E8 ": shy({width: 24}, function(event) { if (can.page.isDisplay(can.ui.profile)) {
can._msg._profile_hidden = true
return can.onmotion.hidden(can, can.ui.profile), can.onimport.layout(can) } can.onaction.show(event, can) }), return can.onmotion.hidden(can, can.ui.profile), can.onimport.layout(can) } can.onaction.show(event, can) }),
}, function(text, cb) { return cb && {text: [text, html.SPAN, html.VIEW], style: cb.meta, onclick: cb} })) }, function(text, cb) { return cb && {text: [text, html.SPAN, html.VIEW], style: cb.meta, onclick: cb} }))
}, },
@ -55,7 +57,10 @@ Volcanos(chat.ONIMPORT, {
} }
can.page.Append(can, target, [{view: [[html.ITEM, "func"], html.SPAN, (func.current||"func")+nfs.PS+can.ui.content._max+func.percent+lex.SP+can.base.Size(can._msg.result[0].length)], onclick: function(event) { can.page.Append(can, target, [{view: [[html.ITEM, "func"], html.SPAN, (func.current||"func")+nfs.PS+can.ui.content._max+func.percent+lex.SP+can.base.Size(can._msg.result[0].length)], onclick: function(event) {
carte = can.user.carte(event, can, {_style: nfs.PATH}, list, function(ev, button) { last[button] = true, carte.close() carte = can.user.carte(event, can, {_style: nfs.PATH}, list, function(ev, button) { last[button] = true, carte.close()
can.onimport.tabview(can, "", can.Option(nfs.FILE), can.core.Split(button, nfs.DF, nfs.DF).pop()) 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) { 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) can.onappend.style(can, can.base.beginWith(target.innerText, "- ")? aaa.PRIVATE: aaa.PUBLIC, target)
@ -93,18 +98,26 @@ Volcanos(chat.ONIMPORT, {
tabview: function(can, path, file, line, cb) { path = path||can.Option(nfs.PATH); var key = can.onexport.keys(can, path, file) tabview: function(can, path, file, line, cb) { path = path||can.Option(nfs.PATH); var key = can.onexport.keys(can, path, file)
function isIndex() { return line == ctx.INDEX } function isSpace() { return line == web.SPACE } function isIndex() { return line == ctx.INDEX } function isSpace() { return line == web.SPACE }
function show(skip) { can._msg && can._msg.Option && can._msg.Option(nfs.LINE, can.Option(nfs.LINE)), can._msg = can.db.tabview[key] function show(skip) { can._msg && can._msg.Option && can._msg.Option(nfs.LINE, can.Option(nfs.LINE)), can._msg = can.db.tabview[key]
can.Option(can.onimport.history(can, {path: path, file: file, line: line||can._msg.Option(nfs.LINE)||can.onexport.session(can, SELECT_LINE+nfs.DF+path+file)||1})) can.Option(can.onimport.history(can, {path: path, file: file, line: can._msg.Option(nfs.LINE)||can.onexport.session(can, SELECT_LINE+nfs.DF+path+file)||1}))
can.onsyntax._init(can, can._msg, function(content) { var msg = can._msg; can.onexport.hash(can), can.isCmdMode() && can.onexport.title(can, (isIndex()||isSpace()? "": path)+file) can.onsyntax._init(can, can._msg, function(content) { var msg = can._msg; can.onexport.hash(can), can.isCmdMode() && can.onexport.title(can, (isIndex()||isSpace()? "": path)+file)
can.onmotion.select(can, can.ui._tabs, html.DIV_TABS, msg._tab), can.isCmdMode() && msg._tab.scrollIntoView(), can.onmotion.toggle(can, can.ui.path, true) can.onmotion.select(can, can.ui._tabs, html.DIV_TABS, msg._tab), can.isCmdMode() && msg._tab.scrollIntoView(), can.onmotion.toggle(can, can.ui.path, true)
if (isSpace()) { can.ui.path.innerHTML = can.page.Format(html.A, can.base.trimPrefix(can.misc.MergePodCmd(can, {pod: can.Option(nfs.FILE)}), location.origin)) if (isSpace()) {
can.page.isDisplay(can.ui.zone.space._target) || can.ui.zone.space._legend.click()
can.base.contains(file, "/") || can.onmotion.hidden(can, can.ui.path)
can.ui.path.innerHTML = can.page.Format(html.A, can.base.trimPrefix(can.misc.MergePodCmd(can, {pod: file}), location.origin))
} else if (isIndex()) { can.onmotion.hidden(can, can.ui.path) } else if (isIndex()) { can.onmotion.hidden(can, can.ui.path)
} else { can.onimport.__tabPath(can) } can.page.isDisplay(can.ui.zone.module._target) || can.ui.zone.module._legend.click()
} else { can.onimport.__tabPath(can)
can.page.isDisplay(can.ui.zone.source._target) || can.ui.zone.source._legend.click()
}
can.page.SelectChild(can, can.ui._content.parentNode, can.page.Keys(html.DIV_CONTENT, html.DIV_LAYOUT, html.FIELDSET_STORY, [[[html.IFRAME, html.CONTENT]]]), function(target) { can.page.SelectChild(can, can.ui._content.parentNode, can.page.Keys(html.DIV_CONTENT, html.DIV_LAYOUT, html.FIELDSET_STORY, [[[html.IFRAME, html.CONTENT]]]), function(target) {
can.onmotion.toggle(can, target, target == content) can.onmotion.toggle(can, target, target == content)
}), can.ui.content._plugin = msg._plugin }), can.ui.content._plugin = msg._plugin
can.page.SelectChild(can, can.ui._profile.parentNode, can.page.Keys(html.DIV_PROFILE, [[[html.IFRAME, html.PROFILE]]]), function(target) { can.page.SelectChild(can, can.ui._profile.parentNode, can.page.Keys(html.DIV_PROFILE, [[[html.IFRAME, html.PROFILE]]]), function(target) {
if (target == msg._profile) { can.ui.profile = msg._profile, msg._profile_hidden || can.onmotion.toggle(can, target, true) } if (target == msg._profile) { can.ui.profile = msg._profile, msg._profile_hidden || can.onmotion.toggle(can, target, true) }
}), can.ui.profile._plugin = msg._profile }), can.ui.profile._plugin = msg._profile
if (isSpace()) { var item = can.ui.zone.space[file]; can.onmotion.select(can, item.parentNode, html.DIV_ITEM, item) }
can.page.ClassList.set(can, can._output, nfs.SOURCE, !isIndex() && !isSpace())
can.onimport.layout(can), can.ui.current && can.onmotion.toggle(can, can.ui.current, !isIndex() && !isSpace()) can.onimport.layout(can), can.ui.current && can.onmotion.toggle(can, can.ui.current, !isIndex() && !isSpace())
skip || can.onmotion.delay(can, function() { can.onaction.selectLine(can, can.Option(nfs.LINE), true) }), can.base.isFunc(cb) && cb(), cb = null skip || can.onmotion.delay(can, function() { can.onaction.selectLine(can, can.Option(nfs.LINE), true) }), can.base.isFunc(cb) && cb(), cb = null
var ls = can.onexport.path(can).split(nfs.PS); if (ls.length > 4) { ls = [ls.slice(0, 2).join(nfs.PS)+"/.../"+ls.slice(-2).join(nfs.PS)] } can.Status(kit.Dict(nfs.FILE, ls.join(nfs.PS))) var ls = can.onexport.path(can).split(nfs.PS); if (ls.length > 4) { ls = [ls.slice(0, 2).join(nfs.PS)+"/.../"+ls.slice(-2).join(nfs.PS)] } can.Status(kit.Dict(nfs.FILE, ls.join(nfs.PS)))
@ -117,7 +130,8 @@ Volcanos(chat.ONIMPORT, {
} else { } else {
name = file.split(mdb.FS)[0].split(isIndex()? nfs.PT: nfs.PS).pop() name = file.split(mdb.FS)[0].split(isIndex()? nfs.PT: nfs.PS).pop()
} }
var tabs = can.onimport.tabs(can, [{name: name, text: file, _menu: shy([nfs.SAVE, nfs.TRASH, web.REFRESH], function(event, button, meta) { line && msg.Option(nfs.LINE, line)
var tabs = can.onimport.tabs(can, [{name: name, text: (isIndex() || isSpace()? "": path)+file, _menu: shy([nfs.SAVE, nfs.TRASH, web.REFRESH], function(event, button, meta) {
can.request(event, msg), can.onaction[button](event, can, button) can.request(event, msg), can.onaction[button](event, can, button)
})}], function(event, tabs) { can._tab = msg._tab = tabs._target, show(skip), skip = true })}], function(event, tabs) { can._tab = msg._tab = tabs._target, show(skip), skip = true
can.onmotion.delay(can, function() { var item = can.ui.zone && can.ui.zone.source && can.ui.zone.source[path+file]; if (!item) { return } can.onmotion.delay(can, function() { var item = can.ui.zone && can.ui.zone.source && can.ui.zone.source[path+file]; if (!item) { return }
@ -137,7 +151,7 @@ Volcanos(chat.ONIMPORT, {
project: function(can) { can.onimport.zone(can, can.core.Item(can.onfigure, function(name, cb) { if (can.base.isFunc(cb)) { project: function(can) { can.onimport.zone(can, can.core.Item(can.onfigure, function(name, cb) { if (can.base.isFunc(cb)) {
return {name: name, _toggle: function(zone) { var target = can.page.isDisplay(zone._target)? zone._target: can.ui.zone.source._target return {name: name, _toggle: function(zone) { var target = can.page.isDisplay(zone._target)? zone._target: can.ui.zone.source._target
can.core.Item(can.ui.zone, function(key, zone) { key.indexOf(nfs.PS) > 0 || zone.toggle(zone._target == target) }), can.onimport.layout(can) can.core.Item(can.ui.zone, function(key, zone) { key.indexOf(nfs.PS) > 0 || zone.toggle(zone._target == target) }), can.onimport.layout(can)
}, _init: function(target, zone) { return cb(can, target, zone) }} }, _init: function(target, zone) { return cb(can, target, zone, can.db.hash) }}
} }), can.ui.project) }, } }), can.ui.project) },
profile: function(can, msg) { var _msg = can.db.tabview[can.onexport.keys(can)]; _msg.Option(html.WIDTH, msg.Option(html.WIDTH)), border = 1 profile: function(can, msg) { var _msg = can.db.tabview[can.onexport.keys(can)]; _msg.Option(html.WIDTH, msg.Option(html.WIDTH)), border = 1
var height = can.ui.content.offsetHeight, width = can.onexport.size(can, _msg.Option(html.WIDTH)||0.5, can.ConfWidth()-can.ui.project.offsetWidth)+border var height = can.ui.content.offsetHeight, width = can.onexport.size(can, _msg.Option(html.WIDTH)||0.5, can.ConfWidth()-can.ui.project.offsetWidth)+border
@ -153,7 +167,10 @@ Volcanos(chat.ONIMPORT, {
} }
} }
can.onimport.process(can, msg, can.ui.profile, height, width-border, function(sub) { can.ui.profile._plugin = sub, can.page.style(can, sub._output, html.MAX_WIDTH, "") can.onimport.process(can, msg, can.ui.profile, height, width-border, function(sub) { can.ui.profile._plugin = sub, can.page.style(can, sub._output, html.MAX_WIDTH, "")
sub.onaction.close = function() { can.onexport.session(can, PROFILE_ARGS+can.Option(nfs.PATH)+can.Option(nfs.FILE), ""), can.onmotion.hidden(can, can.ui.profile), can.onimport.layout(can) } sub.onaction.close = function() {
can._msg._profile_hidden = true
can.onexport.session(can, PROFILE_ARGS+can.Option(nfs.PATH)+can.Option(nfs.FILE), ""),
can.onmotion.hidden(can, can.ui.profile), can.onimport.layout(can) }
sub.Conf(ctx.ARGS) && can.onexport.session(can, PROFILE_ARGS+can.Option(nfs.PATH)+can.Option(nfs.FILE), JSON.stringify(sub.Conf(ctx.ARGS))) sub.Conf(ctx.ARGS) && can.onexport.session(can, PROFILE_ARGS+can.Option(nfs.PATH)+can.Option(nfs.FILE), JSON.stringify(sub.Conf(ctx.ARGS)))
can.page.style(can, can.ui.profile, html.WIDTH, width+border, html.MAX_WIDTH, width+border), can.onimport.layout(can) can.page.style(can, can.ui.profile, html.WIDTH, width+border, html.MAX_WIDTH, width+border), can.onimport.layout(can)
}) })
@ -233,7 +250,7 @@ Volcanos(chat.ONIMPORT, {
can.ui.layout(can.ConfHeight(), can.ConfWidth(), 0, function(height, width) { can.ui.layout(can.ConfHeight(), can.ConfWidth(), 0, function(height, width) {
var sub = can.ui.profile._plugin; sub && can.page.isDisplay(can.ui.profile) && sub.onimport && sub.onimport.size(sub, can.ui.profile.offsetHeight, can.ui.profile.offsetWidth-1, true) var sub = can.ui.profile._plugin; sub && can.page.isDisplay(can.ui.profile) && sub.onimport && sub.onimport.size(sub, can.ui.profile.offsetHeight, can.ui.profile.offsetWidth-1, true)
var sub = can.ui.content._plugin; if (!sub) { return } if (height == sub.ConfHeight()+sub.onexport.actionHeight(sub)+sub.onexport.statusHeight(sub) && width == sub.ConfWidth()) { return } var sub = can.ui.content._plugin; if (!sub) { return } if (height == sub.ConfHeight()+sub.onexport.actionHeight(sub)+sub.onexport.statusHeight(sub) && width == sub.ConfWidth()) { return }
sub.onimport.size(sub, height-20, width, false), can.page.style(can, sub._target, html.HEIGHT, height-20) sub.onimport.size(sub, height, width, false), can.page.style(can, sub._target, html.HEIGHT, height)
}) })
can.page.SelectChild(can, can.ui.project, html.DIV_ZONE, function(target, index, list) { can.page.SelectChild(can, can.ui.project, html.DIV_ZONE, function(target, index, list) {
can.page.SelectChild(can, target, html.DIV_ITEM, function(target) { var height = can.ui.project.offsetHeight - list.length*target.offsetHeight can.page.SelectChild(can, target, html.DIV_ITEM, function(target) { var height = can.ui.project.offsetHeight - list.length*target.offsetHeight
@ -244,7 +261,7 @@ Volcanos(chat.ONIMPORT, {
}, },
}, [""]) }, [""])
Volcanos(chat.ONFIGURE, { Volcanos(chat.ONFIGURE, {
source: function(can, target, zone) { var hash = can.misc.SearchHash(can) source: function(can, target, zone, hash) {
function show(target, zone, path) { can.run(can.request({}, {dir_root: path, dir_deep: true}), [nfs.PWD], function(msg) { function show(target, zone, path) { can.run(can.request({}, {dir_root: path, dir_deep: true}), [nfs.PWD], function(msg) {
can.onimport.tree(can, can.core.List(msg.Table(), function(item) { item._init = function(target) { can.ui.zone.source[path+item.path] = target } can.onimport.tree(can, can.core.List(msg.Table(), function(item) { item._init = function(target) { can.ui.zone.source[path+item.path] = target }
if (can.Option(nfs.FILE).indexOf(item.path) == 0) { item.expand = true } return item if (can.Option(nfs.FILE).indexOf(item.path) == 0) { item.expand = true } return item
@ -252,11 +269,18 @@ Volcanos(chat.ONFIGURE, {
can.isCmdMode() && hash.length > 1 && can.onimport.tabview(can, hash[0], hash[1], hash[2]) can.isCmdMode() && hash.length > 1 && can.onimport.tabview(can, hash[0], hash[1], hash[2])
}, true) } show(target, zone, can.Option(nfs.PATH)) }, true) } show(target, zone, can.Option(nfs.PATH))
}, },
module: function(can, target, zone) { zone._delay_init = function() { can.runAction({}, mdb.INPUTS, [ctx.INDEX], function(msg) { module: function(can, target, zone, hash) {
can.onimport.tree(can, msg.Table(), function(event, item) { can.onimport.tabview(can, "", item.index, ctx.INDEX) }, function() {}, target, null, ctx.INDEX, nfs.PT), zone._total(msg.Length()) zone._delay_init = function() { can.runAction({}, mdb.INPUTS, [ctx.INDEX], function(msg) {
}) }, zone.toggle(false) }, can.onimport.tree(can, msg.Table(function(value) {
plugin: function(can, target, zone) { zone._delay_init = function() { var total = 0 value.expand = hash[2] == ctx.INDEX && hash[1] == value.index
can.onimport.tree(can, can.core.ItemKeys(can.onengine.plugin.meta, function(key) { if (key[0] != "_") { return total++, {index: key} } }), return value
}), function(event, item) { can.onimport.tabview(can, "", item.index, ctx.INDEX) }, function() {}, target, null, ctx.INDEX, nfs.PT), zone._total(msg.Length())
}) }, zone.toggle(false)
},
plugin: function(can, target, zone, hash) { zone._delay_init = function() { var total = 0
can.onimport.tree(can, can.core.ItemKeys(can.onengine.plugin.meta, function(key) { if (key[0] != "_") {
return total++, {index: key, expand: hash[2] == ctx.INDEX && hash[1] == "can."+key}
} }),
function(event, item) { can.onimport.tabview(can, "", can.core.Keys(ice.CAN, item.index), ctx.INDEX) }, function() {}, target, null, ctx.INDEX, nfs.PT), zone._total(total) function(event, item) { can.onimport.tabview(can, "", can.core.Keys(ice.CAN, item.index), ctx.INDEX) }, function() {}, target, null, ctx.INDEX, nfs.PT), zone._total(total)
}, zone.toggle(false) }, }, zone.toggle(false) },
}) })
@ -267,7 +291,8 @@ Volcanos(chat.ONSYNTAX, {
if (msg.Option(ctx.INDEX)) { return can.onsyntax._index(can, msg, function(target) { cb(can.ui.content = msg._content = target) }, can.ui._content.parentNode) } if (msg.Option(ctx.INDEX)) { return can.onsyntax._index(can, msg, function(target) { cb(can.ui.content = msg._content = target) }, can.ui._content.parentNode) }
can.onsyntax._split(can, msg, cb, key) can.onsyntax._split(can, msg, cb, key)
}, },
_space: function(can, msg, cb, parent) { if (can.Option(nfs.LINE) == web.SPACE) { can.ui.zone.space && can.onmotion.delay(can, function() { can.ui.zone.space.refresh() }, 3000) _space: function(can, msg, cb, parent) { if (can.Option(nfs.LINE) == web.SPACE) {
// can.ui.zone.space && can.onmotion.delay(can, function() { can.ui.zone.space.refresh() }, 3000)
var target = can.page.Append(can, parent, [{view: [html.CONTENT, html.IFRAME], src: can.misc.MergePodCmd(can, {pod: can.Option(nfs.FILE)}), height: can.ui.content.offsetHeight, width: can.ui.content.offsetWidth}])._target var target = can.page.Append(can, parent, [{view: [html.CONTENT, html.IFRAME], src: can.misc.MergePodCmd(can, {pod: can.Option(nfs.FILE)}), height: can.ui.content.offsetHeight, width: can.ui.content.offsetWidth}])._target
return can.base.isFunc(cb) && cb(target), true return can.base.isFunc(cb) && cb(target), true
} }, } },
@ -284,7 +309,7 @@ Volcanos(chat.ONSYNTAX, {
sub.onexport.output = function() { can.onimport.layout(can) } sub.onexport.output = function() { can.onimport.layout(can) }
sub.onexport.record = function(_, value, key, item) { item.file && can.onimport.tabview(can, item.path, item.file, item.line); return true } sub.onexport.record = function(_, value, key, item) { item.file && can.onimport.tabview(can, item.path, item.file, item.line); return true }
sub.onexport.title = function(_, title) { can.page.Modify(can, can.page.SelectOne(can, msg._tab, html.SPAN_NAME), title) } sub.onexport.title = function(_, title) { can.page.Modify(can, can.page.SelectOne(can, msg._tab, html.SPAN_NAME), title) }
sub.onimport.size(sub, can.ui.content.offsetHeight-20, can.ui.content.offsetWidth, false) sub.onimport.size(sub, can.ui.content.offsetHeight, can.ui.content.offsetWidth, false)
msg._plugin = sub, can.base.isFunc(cb) && cb(sub._target), sub.Focus() msg._plugin = sub, can.base.isFunc(cb) && cb(sub._target), sub.Focus()
}, parent) }, parent)
}, },
@ -386,16 +411,33 @@ Volcanos(chat.ONACTION, {
line = target, can.Status(nfs.LINE, can.onexport.position(can, can.Option(nfs.LINE, n))) line = target, can.Status(nfs.LINE, can.onexport.position(can, can.Option(nfs.LINE, n)))
}); if (!can.base.isObject(line)) { return 0 } }); if (!can.base.isObject(line)) { return 0 }
can.page.Select(can, line, "td.text", function(target) { can.page.Select(can, line, "td.text", function(target) {
can.current = {line: line, next: function() { return line.nextSibling }, prev: function() { return line.previousSibling }, can.current = {line: line,
next: function() {
return can.page.tagis(line.nextSibling, "tr.line")? line.nextSibling: undefined
},
prev: function() {
return can.page.tagis(line.previousSibling, "tr.line")? line.previousSibling: undefined
},
text: function(text) { return text != undefined && can.onaction.modifyLine(can, line, text), target.innerText }, text: function(text) { return text != undefined && can.onaction.modifyLine(can, line, text), target.innerText },
scroll: function(count) { if (count) { content.scrollTop += count*can.current.line.offsetHeight } scroll: function(count) { if (count) { content.scrollTop += count*can.current.line.offsetHeight }
return parseFloat((can.current.line.offsetTop-content.scrollTop)/can.current.line.offsetHeight) return parseFloat((can.current.line.offsetTop-content.scrollTop)/can.current.line.offsetHeight)
}, window: function() { return parseFloat(content.offsetHeight/can.current.line.offsetHeight) }, }, window: function() { return parseFloat(content.offsetHeight/can.current.line.offsetHeight) },
}, can.onimport.history(can, {path: can.Option(nfs.PATH), file: can.Option(nfs.FILE), line: can.Option(nfs.LINE), text: can.current.text()}) }, can.onimport.history(can, {path: can.Option(nfs.PATH), file: can.Option(nfs.FILE), line: can.Option(nfs.LINE), text: can.current.text()})
var scroll = can.current.scroll(), window = can.current.window()
if (0 < scroll && scroll < 2) {
can.current.scroll(-1)
} else if (window-3 < scroll && scroll < window) {
can.current.scroll(1)
} else if (scroll < 2 || scroll > window-3) {
can.onaction.scrollIntoView(can)
}
can._msg.Option(nfs.LINE, can.Option(nfs.LINE))
can.onexport.hash(can)
can.onimport.__tabPath(can, false)
can.isCmdMode() && can.onexport.session(can, SELECT_LINE+nfs.DF+can.Option(nfs.PATH)+can.Option(nfs.FILE)) can.isCmdMode() && can.onexport.session(can, SELECT_LINE+nfs.DF+can.Option(nfs.PATH)+can.Option(nfs.FILE))
scroll && can.onaction.scrollIntoView(can), can.onengine.signal(can, LINE_SELECT, can._msg) can.onengine.signal(can, LINE_SELECT, can._msg), can.onaction._selectLine(can)
}); return can.onexport.hash(can), can.onexport.line(can, line) }); return can.onexport.hash(can), can.onexport.line(can, line)
}, }, _selectLine: function(can) {},
scrollIntoView: function(can, offset) { can.ui.content.scrollTo(0, (can.onexport.line(can, can.current.line)-can.current.window()/4)*can.current.line.offsetHeight) }, scrollIntoView: function(can, offset) { can.ui.content.scrollTo(0, (can.onexport.line(can, can.current.line)-can.current.window()/4)*can.current.line.offsetHeight) },
searchLine: function(event, can, value) { var offset = 0; can.page.Select(can, can.ui.content, "tr.line", function(tr) { searchLine: function(event, can, value) { var offset = 0; can.page.Select(can, can.ui.content, "tr.line", function(tr) {
tr == can.current.line && can.page.Select(can, tr, "td.text>span", function(span) { offset += span.innerText.length; tr == can.current.line && can.page.Select(can, tr, "td.text>span", function(span) { offset += span.innerText.length;
@ -478,10 +520,6 @@ Volcanos(chat.ONACTION, {
if (can.page.isDisplay(can.ui.display)) { return can.onmotion.hidden(can, can.ui.display), can.onimport.layout(can) } if (can.page.isDisplay(can.ui.display)) { return can.onmotion.hidden(can, can.ui.display), can.onimport.layout(can) }
if (can.page.isDisplay(can.ui.profile)) { return can.onmotion.hidden(can, can.ui.profile), can.onimport.layout(can) } if (can.page.isDisplay(can.ui.profile)) { return can.onmotion.hidden(can, can.ui.profile), can.onimport.layout(can) }
}, },
onkeydown: function(event, can) {
if (can.onkeymap.selectCtrlN(event, can, can.ui.tabs, html.DIV_TABS)) { return }
can.db._key_list = can.onkeymap._parse(event, can, mdb.PLUGIN, can.db._key_list, can.ui.content)
},
}) })
Volcanos(chat.ONEXPORT, { Volcanos(chat.ONEXPORT, {
path: function(can) { return can.Option(nfs.PATH)+can.Option(nfs.FILE) }, path: function(can) { return can.Option(nfs.PATH)+can.Option(nfs.FILE) },

View File

@ -18,8 +18,12 @@ fieldset.vimer>div.output.normal>div.project div.item.current { background-color
fieldset.vimer>div.output.insert>div.project div.item.current { background-color:var(--hover-bg-color); border-right:var(--box-danger3); } fieldset.vimer>div.output.insert>div.project div.item.current { background-color:var(--hover-bg-color); border-right:var(--box-danger3); }
fieldset.vimer>div.output.normal>div.project div.expand.open { color:var(--notice-bg-color); } fieldset.vimer>div.output.normal>div.project div.expand.open { color:var(--notice-bg-color); }
fieldset.vimer>div.output.insert>div.project div.expand.open { color:var(--danger-bg-color); } fieldset.vimer>div.output.insert>div.project div.expand.open { color:var(--danger-bg-color); }
fieldset.vimer>div.output.normal>div.project div.item.select { border-right:var(--box-notice3); }
fieldset.vimer>div.output.insert>div.project div.item.select { border-right:var(--box-danger3); }
fieldset.vimer>div.output>div.project div.item.select { border-right:var(--box-border3); }
fieldset.vimer>div.output>div.project div.expand.open { color:unset; } fieldset.vimer>div.output>div.project div.expand.open { color:unset; }
div.input.vimer.open.float input[type=text] { width:100% !important; } div.input.vimer.open.float input[type=text] { width:100% !important; }
fieldset.vimer>div.output.source>div.project div.item.select { border-right:var(--box-border3); }
fieldset.vimer>div.output.source.normal>div.project div.item.select { border-right:var(--box-notice3); }
fieldset.vimer>div.output.source.insert>div.project div.item.select { border-right:var(--box-danger3); }
fieldset.vimer>div.output.source>div.layout>div.tabs>div.tabs>div.tabs.select { border-top:var(--box-border3); }
fieldset.vimer>div.output.source.normal>div.layout>div.tabs>div.tabs>div.tabs.select { border-top:var(--box-notice3); }
fieldset.vimer>div.output.source.insert>div.layout>div.tabs>div.tabs>div.tabs.select { border-top:var(--box-danger3); }

View File

@ -1,31 +1,25 @@
Volcanos(chat.ONIMPORT, { Volcanos(chat.ONIMPORT, {
_init: function(can, msg, cb) { if (can.user.mod.isPod) { delete(can.onfigure.space), delete(can.onfigure.repos) } _init: function(can, msg, cb) { can.onappend.style(can, code.VIMER); if (can.user.mod.isPod) { delete(can.onfigure.space) }
can.onengine.listen(can, "tabview.line.select", function(msg) { can.onaction._selectLine(can) }) can.require(["/plugin/local/code/inner.js"], function(can) { can.onimport._last_init(can, msg, function() {
can.require(["/plugin/local/code/inner.js"], function(can) { can.onimport._last_init(can, msg, function() { can.onappend.style(can, code.VIMER)
can.db.undo = [], can.db.redo = [], can.onimport._input(can), cb && cb(msg) can.db.undo = [], can.db.redo = [], can.onimport._input(can), cb && cb(msg)
}) }) }) })
}, },
_input: function(can) { var ui = can.page.Append(can, can.ui.content.parentNode, [ _input: function(can) { var ui = can.page.Append(can, can.ui.content.parentNode, [
{view: [code.CURRENT, html.INPUT], spellcheck: false, onkeydown: function(event) { can.onimport._value(can); if (event.metaKey) { return } {view: [code.CURRENT, html.INPUT], spellcheck: false, onkeydown: function(event) {
can.db._keylist = can.onkeymap._parse(event, can, can.db.mode+(event.ctrlKey? "_ctrl": ""), can.db._keylist, can.ui.current) can.onimport._value(can), can.onkeymap._parse(event, can, can.db.mode+(event.ctrlKey? "_ctrl": ""), can.ui.current)
if (can.db.mode == mdb.NORMAL) { can.onkeymap.prevent(event) } if (can.db.mode == mdb.INSERT) { can.db._keylist = [] } if (can.db.mode == mdb.INSERT) { can.ui.current._keylist = [] }
}, onkeyup: function(event) { can.onimport._value(can); if (event.metaKey) { return } can.onkeymap._complete(event, can) if (can.db.mode == mdb.NORMAL) { can.onkeymap.prevent(event) }
}, onkeyup: function(event) { can.onimport._value(can); can.onkeymap._complete(event, can)
}, onfocus: function(event) { can.current.line.appendChild(can.ui.complete) }, onfocus: function(event) { can.current.line.appendChild(can.ui.complete)
}, onclick: function(event) { can.onkeymap._insert(event, can) }, onclick: function(event) { can.onkeymap._insert(event, can)
if (event.metaKey) { var target = event.target, begin = target.selectionStart, end = begin, reg = /[a-zA-Z0-9]/
for (begin; begin > 0; begin--) { if (!reg.test(target.value.slice(begin, begin+1))) { begin++; break } }
for (end; end < target.value.length; end++) { if (!reg.test(target.value.slice(end, end+1))) { break } }
can.onaction.searchLine(event, can, target.value.slice(begin, end))
}
can.onmotion.delay(can, function() { can.page.SelectChild(can, can.ui.complete, html.DIV, function(target) {
target.innerText = can.ui.current.value.slice(0, can.ui.current.selectionStart)
}) })
}}, {view: [[code.COMPLETE]]}, }}, {view: [[code.COMPLETE]]},
]); can.ui.current = ui.current, can.ui.complete = ui.complete, can.onkeymap._plugin(can) }, ]); can.ui.current = ui.current, can.ui.complete = ui.complete, can.onkeymap._plugin(can) },
_value: function(can) { can.onimport.__tabPath(can, true), can.db.mode == mdb.INSERT && can.onmotion.delay(can, function() { can.current.text(can.ui.current.value) }) }, _value: function(can) { can.onimport.__tabPath(can, true)
can.db.mode == mdb.INSERT && can.onmotion.delay(can, function() { can.current.text(can.ui.current.value) })
},
}, [""]) }, [""])
Volcanos(chat.ONFIGURE, { Volcanos(chat.ONFIGURE, {
source: function(can, target, zone) { var hash = can.misc.SearchHash(can), args = [can.Option(nfs.PATH), can.Option(nfs.FILE)] 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.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) { 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.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 }
@ -35,67 +29,85 @@ Volcanos(chat.ONFIGURE, {
zone._icon(kit.Dict( zone._icon(kit.Dict(
web.REFRESH, function(event) { show(target, zone, path) }, web.REFRESH, function(event) { show(target, zone, path) },
mdb.CREATE, function(event, button) { can.onaction.module(event, can, nfs.MODULE) }, mdb.CREATE, function(event, button) { can.onaction.module(event, can, nfs.MODULE) },
)), zone._total(msg.Length()), can.onmotion.clear(can, target) )), zone._total(msg.Length())
var cache, list = can.core.List(msg.Table(), function(item) { var cache, list = can.core.List(msg.Table(), function(item) {
if (path == "src/" && can.base.isIn(item.path, "main.ico", "main.svg", "version.go", "binpack.go", "binpack_usr.go")) { return } if (path == nfs.SRC && can.base.isIn(item.path, "main.ico", "main.svg", "version.go", "binpack.go", "binpack_usr.go")) { return }
if (path == "usr/release/" && can.base.isIn(item.path, "conf.go", "binpack.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 } if (path == args[0] && args[1].indexOf(item.path) == 0) { item.expand = true }
item._init = function(target) { can.ui.zone.source[path+item.path] = target item._init = function(target) { can.ui.zone.source[path+item.path] = target }
item._remove = function() { can.page.Remove(can, target.parentNode), delete(cache[item.path]) }
}
return item return item
}) }); can.onmotion.clear(can, target)
cache = can.onimport.tree(can, list, function(event, item) { cache = can.onimport.tree(can, list, function(event, item) {
can.base.endWith(item.path, nfs.PS) || can.onimport.tabview(can, path, item.path) can.base.endWith(item.path, nfs.PS) || can.onimport.tabview(can, path, item.path)
}, function(event, target, item) { }, function(event, target, item) {
var msg = can.request(event); msg.Option(nfs.PATH, path), msg.Option(nfs.FILE, item.path) var msg = can.request(event); msg.Option(nfs.PATH, path), msg.Option(nfs.FILE, item.path)
}, target, cache) }, target, cache)
can.isCmdMode() && hash.length > 1 && can.onimport.tabview(can, hash[0], hash[1], hash[2]), hash = [] can.onmotion.delay(can, function() {
}, true) } if (hash[2] == ctx.INDEX) {
if (paths.length == 1) { return show(target, zone, paths[0]) } can.page.Remove(can, zone._action) if (can.base.beginWith(hash[1], "can.")) {
can.ui.zone.plugin._legend.click()
} else {
can.ui.zone.module._legend.click()
}
} else if (hash[2] == web.SPACE) {
can.ui.zone.space._legend.click()
} else {
hash.length > 1 && can.onimport.tabview(can, hash[0], hash[1], hash[2])
} hash = []
})
}, true) } if (paths.length == 1) { return show(target, zone, paths[0]) } can.page.Remove(can, zone._action)
can.onimport.zone(can, can.core.List(paths, function(path) { can.onimport.zone(can, can.core.List(paths, function(path) {
return kit.Dict(mdb.NAME, path, path == args[0]? chat._INIT: chat._DELAY_INIT, function(target, zone) { show(target, zone, path), zone._toggle = function() {} }) return kit.Dict(mdb.NAME, path, path == args[0]? chat._INIT: chat._DELAY_INIT, function(target, zone) { show(target, zone, path) })
}), target) }), target)
}) })
}, },
space: function(can, target, zone) { can.onimport._zone(can, zone, web.DREAM, function(sub, msg) { space: function(can, target, zone, hash) { can.onimport._zone(can, zone, web.DREAM, function(sub, msg) {
sub.onimport._open = function(_, msg, arg) { var link = can.misc.ParseURL(can, arg) sub.onimport._open = function(_, msg, arg) { can.onimport.tabview(can, "", arg, web.SPACE) }
if (link.pod) { can.onimport.tabview(can, "", link.pod, web.SPACE), sub.Update(); return } sub.onexport.record = function(sub, value, key) {
can.onimport.tabview(can, "", arg, web.SPACE) can.onimport.tabview(can, "", value, web.SPACE)
} }
sub.onexport.record = function(sub, value, key) { can.onimport.tabview(can, "", value, web.SPACE) } can.page.Select(can, can._output, "div.item>span.name", function(target) {
can.ui.zone.space[target.innerText] = target.parentNode
if (target.innerText == hash[1] && hash[2] == web.SPACE) {
target.parentNode.click()
}
})
}), zone.toggle(false) }, }), zone.toggle(false) },
}) })
Volcanos(chat.ONACTION, {list: ["创建", "编译", "源码", "文档", "计划", "聊天", "矩阵", "后台", "桌面", "官网"], _trans: {show: "预览", exec: "展示"}, Volcanos(chat.ONACTION, {
_run: function(event, can, button, args, cb) { can.runAction(event, button, args, cb||function(msg) { _run: function(event, can, button, args, cb) { can.runAction(event, button, args, cb||function(msg) {
if (msg.IsErr()) { return can.user.toastFailure(can, msg.Result()) }
can.onmotion.delay(can, function() { can.onimport.tabview(can, msg.Option(nfs.PATH), msg.Option(nfs.FILE)) }, 300) can.onmotion.delay(can, function() { can.onimport.tabview(can, msg.Option(nfs.PATH), msg.Option(nfs.FILE)) }, 300)
can.ui.zone.source.refresh() can.ui.zone.source.refresh()
}) }, }) },
_runs: function(event, can, button, cb) { var meta = can.Conf(), msg = can.request(event); msg.Option(ctx.ACTION, button) _runs: function(event, can, button, cb) { var meta = can.Conf(), msg = can.request(event); msg.Option(ctx.ACTION, button)
can.user.input(event, can, meta.feature[button], function(data, args) { var msg = can.request(event); msg.Option(data), can.onaction._run(event, can, button, args, cb) }) }, can.user.input(event, can, meta.feature[button], function(data, args) { msg.Option(data), can.onaction._run(event, can, button, args, cb) })
save: function(event, can, button) { can.request(event, {file: can.Option(nfs.FILE), content: can.onexport.content(can)}) },
save: function(event, can, button) { var p = can.Option(nfs.PATH)+can.Option(nfs.FILE); can.user.toastProcess(can, p, button)
can.request(event, {file: can.Option(nfs.FILE), content: can.onexport.content(can)})
can.onaction._run(event, can, button, [can.onexport.parse(can), can.Option(nfs.FILE), can.Option(nfs.PATH)], function(msg) {
can.onaction.reload(can, msg), can.user.toastSuccess(can, p, button)
})
},
reload: function(can, msg) {
function imports(str) { var block = "", count = 0; can.core.List(str.split(lex.NL), function(item) { 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, "import (")) { block = can.core.Split(item)[0]; return }
if (can.base.beginWith(item, ")")) { block = ""; return } if (can.base.beginWith(item, ")")) { block = ""; return }
if (can.base.beginWith(item, "import ")) { count++; return } if (can.base.beginWith(item, "import ")) { count++; return }
if (block == "import") { count++ } if (block == "import") { count++ }
}); return count } }); return count }
var p = can.Option(nfs.PATH)+can.Option(nfs.FILE); can.user.toastProcess(can, p, button) 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.onaction._run(event, can, button, [can.onexport.parse(can), can.Option(nfs.FILE), can.Option(nfs.PATH)], function(msg) { can.core.List(msg.Result().split(lex.NL), function(item) { can.onaction.appendLine(can, item) })
if (can.onexport.parse(can) == nfs.GO) { var line = can.onaction.selectLine(can); can.onmotion.clear(can, can.ui.content) can.onaction.selectLine(can, line+imports(msg.Result())-imports(msg.Option(nfs.CONTENT)))
can.ui.content._max = 0, can.core.List(msg.Result().split(lex.NL), function(item) { can.onaction.appendLine(can, item) }) }
can.onaction.selectLine(can, line+imports(msg.Result())-imports(msg.Option(nfs.CONTENT))) },
} can.user.toastSuccess(can, p, button) 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) 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() { can.onaction._run(event, can, button, [p], function(msg) { can.onaction.remove(can, p) })
var target = can.ui.zone.source[p]; if (target._tabs) { target._tabs._close() } can.page.Remove(can, target)
})
}, },
script: function(event, can, button) { can.onaction._runs(event, can, button) }, script: function(event, can, button) { can.onaction._runs(event, can, button) },
module: function(event, can, button) { can.onaction._runs(can.request(event, {title: "创建模块"}), can, button) }, module: function(event, can, button) { can.onaction._runs(can.request(event, {title: can.user.trans(can, button, "创建模块")}), can, button) },
compile: function(event, can, button) { var msg = can.request(event); msg.Option(chat._TOAST, "") compile: function(event, can, button) { var msg = can.request(event); msg.Option(chat._TOAST, "")
can.runAction(event, button, [], function(msg) { can.ui.search && can.ui.search.hidden() can.runAction(event, button, [], function(msg) { can.ui.search && can.ui.search.hidden()
if (msg.Length() > 0 || msg.Result()) { return can.onimport.exts(can, "inner/search.js", function(sub) { can.ui.search = sub, sub.select() if (msg.Length() > 0 || msg.Result()) { return can.onimport.exts(can, "inner/search.js", function(sub) { can.ui.search = sub, sub.select()
@ -124,26 +136,30 @@ Volcanos(chat.ONACTION, {list: ["创建", "编译", "源码", "文档", "计划"
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) }, 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 }, 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) { _selectLine: function(can) { can.current && can.page.Select(can, can.current.line, "td.text", function(td) { var target = can.ui.current; if (!target) { return }
var target = can.ui.current;
if (!target) { return }
target.value = td.innerText
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)) 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))
can.db.mode == mdb.NORMAL && can.onkeymap._normal(can) target.value = td.innerText, can.db.mode == mdb.NORMAL && can.onkeymap._normal(can)
if (can.ui.content._root) { can.onmotion.select(can, can.ui.content.parentNode, "", can.ui.content) }
can.onmotion.delay(can, function() { can.page.SelectChild(can, can.ui.complete, html.DIV, function(target) { can.onmotion.delay(can, function() { can.page.SelectChild(can, can.ui.complete, html.DIV, function(target) {
target.innerText = can.ui.current.value.slice(0, can.ui.current.selectionStart) target.innerText = can.ui.current.value.slice(0, can.ui.current.selectionStart)
}) }) }) })
}) }, }) },
onkeydown: function(event, can) { })
if (can.onkeymap.selectCtrlN(event, can, can.ui.tabs, html.DIV_TABS)) { return } Volcanos(chat.ONEXPORT, {
can.db._key_list = can.onkeymap._parse(event, can, mdb.PLUGIN, can.db._key_list, can.ui.content) hash: function(can) { return can.misc.SearchHash(can, can.Option(nfs.PATH), can.Option(nfs.FILE), can.Option(nfs.LINE)) },
},
}) })
Volcanos(chat.ONKEYMAP, { Volcanos(chat.ONKEYMAP, {
scrollHold: function(can, count, begin) { var scroll = can.ui.content.scrollLeft; can.ui.current.focus(), count != undefined && can.onkeymap.cursorMove(can.ui.current, count, begin == undefined? count: begin), can.ui.content.scrollLeft = scroll }, scrollHold: function(can, count, begin) {
cursorDown: function(can, target) { var p = can.onkeymap.cursorMove(target); can.onaction.selectLine(can, can.current.next()), can.onkeymap.cursorMove(target, 0, p) }, var top = can.ui.content.scrollTop, left = can.ui.content.scrollLeft
cursorUp: function(can, target) { var p = can.onkeymap.cursorMove(target); can.onaction.selectLine(can, can.current.prev()), can.onkeymap.cursorMove(target, 0, p) }, can.ui.current.focus(), count != undefined && can.onkeymap.cursorMove(can.ui.current, count, begin == undefined? count: begin)
can.ui.content.scrollTop = top, can.ui.content.scrollLeft = left
},
cursorDown: function(can, target) {
if (!can.current.next()) { return }
var p = can.onkeymap.cursorMove(target); can.onaction.selectLine(can, can.current.next()), can.onkeymap.cursorMove(target, 0, p)
},
cursorUp: function(can, target) {
if (!can.current.prev()) { return }
var p = can.onkeymap.cursorMove(target); can.onaction.selectLine(can, can.current.prev()), can.onkeymap.cursorMove(target, 0, p) },
_model: function(can, value) { can.db.mode = value, can.onimport.__tabPath(can, true), _model: function(can, value) { can.db.mode = value, can.onimport.__tabPath(can, true),
can.core.List([mdb.PLUGIN, mdb.NORMAL, mdb.INSERT], function(item) { can.page.ClassList.del(can, can.ui.content, item) }), can.page.ClassList.add(can, can.ui.content, value) can.core.List([mdb.PLUGIN, mdb.NORMAL, mdb.INSERT], function(item) { can.page.ClassList.del(can, can.ui.content, item) }), can.page.ClassList.add(can, can.ui.content, value)
can.core.List([mdb.PLUGIN, mdb.NORMAL, mdb.INSERT], function(item) { can.page.ClassList.del(can, can._output, item) }), can.page.ClassList.add(can, can._output, value) can.core.List([mdb.PLUGIN, mdb.NORMAL, mdb.INSERT], function(item) { can.page.ClassList.del(can, can._output, item) }), can.page.ClassList.add(can, can._output, value)
@ -276,10 +292,10 @@ Volcanos(chat.ONKEYMAP, {
F5: shy("刷新网页", function(can, target) { can.user.reload(true) }), F5: shy("刷新网页", function(can, target) { can.user.reload(true) }),
}, },
normal_ctrl: { normal_ctrl: {
e: shy("向滚屏", function(can) { can.current.scroll(1) }), e: shy("向滚屏", function(can) { can.current.scroll(1); if (can.current.scroll()<2) { can.onaction.selectLine(can, can.current.next()) } }),
y: shy("向滚屏", function(can) { can.current.scroll(-1) }), y: shy("向滚屏", function(can) { can.current.scroll(-1); if (can.current.scroll()>can.current.window()-3) { can.onaction.selectLine(can, can.current.prev()) } }),
f: shy("向下翻页", function(can, count) { var line = can.onaction.selectLine(can)+can.current.window()-3-can.current.scroll(); return can.current.scroll(line), can.onaction.selectLine(can, line), true }), f: shy("向下翻页", function(can, count) { can.current.scroll(can.current.window()) }),
b: shy("向上翻页", function(can, count) { var line = can.onaction.selectLine(can)-can.current.window()+3; return can.current.scroll(line), can.onaction.selectLine(can, line), true }), b: shy("向上翻页", function(can, count) { can.current.scroll(-can.current.window()) }),
r: shy("刷新页面", function(can) { can.user.reload(true) }), r: shy("刷新页面", function(can) { can.user.reload(true) }),
}, },
insert_ctrl: { insert_ctrl: {
@ -290,7 +306,7 @@ Volcanos(chat.ONKEYMAP, {
d: shy("删除字符", function(can, target) { can.user.isWindows && can.onkeymap.deleteText(target, target.selectionStart, 1) }), d: shy("删除字符", function(can, target) { can.user.isWindows && can.onkeymap.deleteText(target, target.selectionStart, 1) }),
}, },
insert: { insert: {
Escape: shy("退出编辑", function(event, can) { can.onkeymap._normal(can) }), Escape: shy("退出编辑", function(event, can) { can.onkeymap._normal(can), can.ui.current._keylist = [] }),
ArrowUp: shy("光标上移", function(can, target) { can.onkeymap.cursorUp(can, target) }), ArrowUp: shy("光标上移", function(can, target) { can.onkeymap.cursorUp(can, target) }),
ArrowDown: shy("光标下移", function(can, target) { can.onkeymap.cursorDown(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) Backspace: shy("删除字符", function(event, can, target) { if (target.selectionStart > 0 || !can.current.prev()) { return } can.onkeymap.prevent(event)

View File

@ -152,10 +152,6 @@ Volcanos(chat.ONACTION, {
can.user.toastSuccess(can, can.user.trans(can, nfs.SAVE)+lex.SP+msg.Result()) can.user.toastSuccess(can, can.user.trans(can, nfs.SAVE)+lex.SP+msg.Result())
}, true) }, true)
}) }, }) },
onkeydown: function(event, can) {
if (can.onkeymap.selectCtrlN(event, can, can._action, html.DIV_TABS)) { return }
can._keylist = can.onkeymap._parse(event, can, mdb.NORMAL, can._keylist||[], can._output._term)
},
hidden: function(can) { can.page.Select(can, can._fields, "div.output,div.layout", function(target) { 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) target == can.sup._output? can.page.insertBefore(can, target, can._status): can.page.Remove(can, target)
}) }, }) },

View File

@ -270,8 +270,8 @@ Volcanos(chat.ONEXPORT, {
}) })
Volcanos(chat.ONACTION, { Volcanos(chat.ONACTION, {
onkeydown: function(event, can) { onkeydown: function(event, can) {
if (event.ctrlKey && "0" <= event.key && event.key <= "9") { return can.onkeymap.ctrln(event, can) } if (can.onkeymap.selectCtrlN(event, can, can.ui.tabs||can._action, html.DIV_TABS)) { return }
can._keylist = can.onkeymap._parse(event, can, mdb.PLUGIN, can._keylist||[], can._output) can.onkeymap._parse(event, can)
}, },
}) })
Volcanos(chat.ONKEYMAP, { Volcanos(chat.ONKEYMAP, {