1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-26 09:14:06 +08:00

opt Vimer

This commit is contained in:
harveyshao 2022-10-03 23:41:04 +08:00
parent e515fa852e
commit 163d4e1504
5 changed files with 45 additions and 78 deletions

View File

@ -78,10 +78,10 @@ Volcanos(chat.ONENGINE, {help: "搜索引擎", _init: function(can, meta, list,
return false return false
}, },
_plugin: function(event, can, msg, panel, cmds, cb) { _plugin: function(event, can, msg, panel, cmds, cb) {
if (cmds[0] == ctx.ACTION && cmds[1] == ice.RUN && can.onengine.plugin.meta[cmds[2]]) { if (cmds[0] == ctx.ACTION && cmds[1] == ice.RUN && can.onengine.plugin(can, cmds[2])) {
return can.core.CallFunc(can.onengine.plugin.meta[cmds[2]], {can: panel, msg: msg, cmds: cmds.slice(3), cb: cb}), true return can.core.CallFunc(can.onengine.plugin(can, cmds[2]), {can: panel, msg: msg, cmds: cmds.slice(3), cb: cb}), true
} }
var p = can.onengine.plugin.meta[cmds[0]], n = 1; if (p) { var p = can.onengine.plugin(can, cmds[0]), n = 1; if (p) {
if (p.meta && p.meta[cmds[1]] && cmds[0] == ctx.ACTION) { n = 3 } else if (p.meta && p.meta[cmds[0]]) { n = 2 } if (p.meta && p.meta[cmds[1]] && cmds[0] == ctx.ACTION) { n = 3 } else if (p.meta && p.meta[cmds[0]]) { n = 2 }
return can.core.CallFunc(p, {can: p.can||panel, msg: msg, arg: cmds.slice(n), cmds: cmds.slice(n), cb: cb}), true return can.core.CallFunc(p, {can: p.can||panel, msg: msg, arg: cmds.slice(n), cmds: cmds.slice(n), cb: cb}), true
} }
@ -89,9 +89,12 @@ Volcanos(chat.ONENGINE, {help: "搜索引擎", _init: function(can, meta, list,
}, },
plugin: shy("添加插件", function(can, name, command) { plugin: shy("添加插件", function(can, name, command) {
if (can.base.isObject(name)) { if (name == undefined) { return }
return can.core.Item(name, function(key, value) { if (command == undefined) {
name.hasOwnProperty(key) && can.base.isFunc(value) && can.onengine.plugin(can, key, value) }) if (typeof name != "string") { return }
if (name.indexOf("can.") == -1) { return }
name = can.base.trimPrefix(name, "can.")
return arguments.callee.meta[name]
} }
name = can.base.trimPrefix(name, "can.") name = can.base.trimPrefix(name, "can.")
var type = html.TEXT; command.list = can.core.List(command.list, function(item) { var type = html.TEXT; command.list = can.core.List(command.list, function(item) {
@ -99,7 +102,7 @@ Volcanos(chat.ONENGINE, {help: "搜索引擎", _init: function(can, meta, list,
case lang.STRING: return can.core.SplitInput(item) case lang.STRING: return can.core.SplitInput(item)
case lang.OBJECT: return type = item.type||type, item case lang.OBJECT: return type = item.type||type, item
} }
}), command.can = can, arguments.callee.meta[can.core.Keys(ice.CAN, name)] = command }), command.can = can, arguments.callee.meta[name] = command
}), }),
listen: shy("监听事件", function(can, name, cb) { listen: shy("监听事件", function(can, name, cb) {
arguments.callee.meta[name] = (arguments.callee.meta[name]||[]).concat(cb) arguments.callee.meta[name] = (arguments.callee.meta[name]||[]).concat(cb)
@ -456,7 +459,7 @@ Volcanos(chat.ONAPPEND, {help: "渲染引擎", _init: function(can, meta, list,
}, target||can._output, field) }, target||can._output, field)
}, },
plugin: function(can, meta, cb, target, field) { meta = meta||{}, meta.index = meta.index||can.core.Keys(meta.ctx, meta.cmd) plugin: function(can, meta, cb, target, field) { meta = meta||{}, meta.index = meta.index||can.core.Keys(meta.ctx, meta.cmd)
var p = can.onengine.plugin.meta[meta.index], res = {}; function cbs(sub, meta, skip) { res.__proto__ = sub, cb(sub, meta, skip) } var p = can.onengine.plugin(can, meta.index), res = {}; function cbs(sub, meta, skip) { res.__proto__ = sub, cb(sub, meta, skip) }
(meta.meta || meta.inputs && meta.inputs.length > 0)? /* 局部命令 */ can.onappend._plugin(can, {meta: meta.meta, list: meta.list}, meta, cbs, target, field): (meta.meta || meta.inputs && meta.inputs.length > 0)? /* 局部命令 */ can.onappend._plugin(can, {meta: meta.meta, list: meta.list}, meta, cbs, target, field):
p? /* 前端命令 */ can.onappend._plugin(can, {name: meta.index, help: p.help, meta: p.meta, list: p.list}, meta, function(sub, meta, skip) { p? /* 前端命令 */ can.onappend._plugin(can, {name: meta.index, help: p.help, meta: p.meta, list: p.list}, meta, function(sub, meta, skip) {
sub.run = function(event, cmds, cb) { var _cb = p, n = 0 sub.run = function(event, cmds, cb) { var _cb = p, n = 0

View File

@ -255,8 +255,8 @@ Volcanos("misc", {help: "通信协议", Message: function(event, can) { var msg
if (list[cmds[0]]) { return list[cmds[0]](cmds.slice(1)), true } if (list[cmds[0]]) { return list[cmds[0]](cmds.slice(1)), true }
}, },
concat: function(can, to, from) { to = to||[], from = from||[] concat: function(can, to, from) { to = to||[], from = from||[]
if (from[0] == ctx.ACTION && from[1] == ice.RUN && can.onengine.plugin.meta[from[2]]) { return from } if (from[0] == ctx.ACTION && from[1] == ice.RUN && can.onengine.plugin(can, from[2])) { return from }
if (can.onengine.plugin.meta[from[0]]) { return from } if (can.onengine.plugin(can, from[0])) { return from }
if (from[0] == "_search") { return from } if (from[0] == "_search") { return from }
return to.concat(from) return to.concat(from)
}, },

View File

@ -38,6 +38,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg) {
_cmd: function(can, item, next) { can.onengine.signal(can, chat.ONACTION_CMD) _cmd: function(can, item, next) { can.onengine.signal(can, chat.ONACTION_CMD)
can.onappend.plugin(can, can.base.Copy(item, {mode: "cmd", opts: can.misc.Search(can)}), function(sub, meta, skip) { can.onappend.plugin(can, can.base.Copy(item, {mode: "cmd", opts: can.misc.Search(can)}), function(sub, meta, skip) {
sub.run = function(event, cmds, cb) { can.runActionCommand(event, sub._index, cmds, cb) } sub.run = function(event, cmds, cb) { can.runActionCommand(event, sub._index, cmds, cb) }
can._plugins = can.misc.concat(can, can._plugins, [sub])
can.user.title(meta.name), skip || next() can.user.title(meta.name), skip || next()
}) })
}, },

View File

@ -32,8 +32,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据",
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)] } 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) can.Status(kit.Dict("文件名", ls.join(ice.PS), "解析器", can.parse)), can.onimport.layout(can)
skip || can.onaction.selectLine(can, can.Option(nfs.LINE)) skip || can.onaction.selectLine(can, can.Option(nfs.LINE)), can.base.isFunc(cb) && cb(), cb = null
can.base.isFunc(cb) && cb(), cb = null
}) })
} }
function load(msg) { can.tabview[key] = msg function load(msg) { can.tabview[key] = msg
@ -65,7 +64,7 @@ Volcanos(chat.ONFIGURE, {help: "索引导航",
can.onimport.zone(can, can.core.List(path, function(path) { return {name: path, _init: function(target) { show(target, path) }} }), target) can.onimport.zone(can, can.core.List(path, function(path) { return {name: path, _init: function(target) { show(target, path) }} }), target)
}, },
plugin: function(can, target, zone) { var total = 0 plugin: function(can, target, zone) { var total = 0
can.onimport.tree(can, can.core.Item(can.onengine.plugin.meta, function(key) { return total++, {index: can.base.trimPrefix(key, "can.")} }), ctx.INDEX, ice.PT, function(event, item) { can.onimport.tree(can, can.core.Item(can.onengine.plugin.meta, function(key) { return total++, {index: key} }), ctx.INDEX, ice.PT, function(event, item) {
can.onimport.tabview(can, can.Option(nfs.PATH), can.core.Keys("can", item.index), ctx.INDEX) can.onimport.tabview(can, can.Option(nfs.PATH), can.core.Keys("can", item.index), ctx.INDEX)
}, target), zone._total(total) }, target), zone._total(total)
}, },
@ -105,7 +104,6 @@ Volcanos(chat.ONSYNTAX, {help: "语法高亮", _init: function(can, msg, cb) {
return can.onimport.plug(can, {index: msg.Option(ctx.INDEX), args: can.Option(nfs.PATH) == ctx.COMMAND && can.Option(nfs.LINE) != ctx.INDEX? [can.Option(nfs.LINE)]: []}, can.ui._content, function(sub) { return can.onimport.plug(can, {index: msg.Option(ctx.INDEX), args: can.Option(nfs.PATH) == ctx.COMMAND && can.Option(nfs.LINE) != ctx.INDEX? [can.Option(nfs.LINE)]: []}, can.ui._content, function(sub) {
sub.onimport.size(sub, sub.ConfHeight(can.ui.content.offsetHeight-2*html.ACTION_HEIGHT), sub.ConfWidth(can.ui.content.offsetWidth), true) sub.onimport.size(sub, sub.ConfHeight(can.ui.content.offsetHeight-2*html.ACTION_HEIGHT), sub.ConfWidth(can.ui.content.offsetWidth), true)
msg._plugin = sub, can.base.isFunc(cb) && cb(msg._content = can.ui._content), can.onmotion.delay(can, function() { sub.Focus() }) msg._plugin = sub, can.base.isFunc(cb) && cb(msg._content = can.ui._content), can.onmotion.delay(can, function() { sub.Focus() })
sub.onaction.close = function() { can.onaction.back(can), msg._tab._close() } sub.onaction.close = function() { can.onaction.back(can), msg._tab._close() }
sub.onimport._open = function(sub, msg, _arg) { var url = can.base.ParseURL(_arg), ls = url.origin.split("/chat/pod/") sub.onimport._open = function(sub, msg, _arg) { var url = can.base.ParseURL(_arg), ls = url.origin.split("/chat/pod/")
if (_arg.indexOf(location.origin) == 0 && ls.length > 1) { if (_arg.indexOf(location.origin) == 0 && ls.length > 1) {
@ -247,6 +245,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据",
if (target.offsetWidth < can.ui._profile_output.offsetWidth) { can.profile_size[can.onexport.keys(can)] = target.offsetWidth, can.onimport.layout(can) } if (target.offsetWidth < can.ui._profile_output.offsetWidth) { can.profile_size[can.onexport.keys(can)] = target.offsetWidth, can.onimport.layout(can) }
}) }) }) })
} }
can.onmotion.toggle(can, can.ui.profile_output, true)
can.onmotion.toggle(can, can.ui.profile, true), can.onimport.layout(can) can.onmotion.toggle(can, can.ui.profile, true), can.onimport.layout(can)
}, },
display: function(can, msg) { display: function(can, msg) {
@ -302,8 +301,8 @@ Volcanos(chat.ONACTION, {help: "控件交互", _trans: {link: "链接", width: "
}) })
Volcanos(chat.ONIMPORT, {help: "导入数据", Volcanos(chat.ONIMPORT, {help: "导入数据",
_keydown: function(can) { can.onkeymap._build(can) _keydown: function(can) { if (!can.isCmdMode()) { return }
can.isCmdMode() && can._root.onengine.listen(can, chat.ONKEYDOWN, function(event) { can.onkeymap._build(can), can._root.onengine.listen(can, chat.ONKEYDOWN, function(event) {
can._key_list = can.onkeymap._parse(event, can, mdb.PLUGIN, can._key_list, can.ui.content) can._key_list = can.onkeymap._parse(event, can, mdb.PLUGIN, can._key_list, can.ui.content)
}) })
}, },
@ -316,8 +315,6 @@ Volcanos(chat.ONKEYMAP, {help: "导入数据",
r: shy("执行命令", function(event, can) { can.onaction[cli.EXEC](event, can) }), r: shy("执行命令", function(event, can) { can.onaction[cli.EXEC](event, can) }),
f: shy("打开文件", function(event, can) { can.onaction["打开"](event, can) }), f: shy("打开文件", function(event, can) { can.onaction["打开"](event, can) }),
g: shy("搜索", function(event, can) { can.onaction["搜索"](event, can) }),
x: shy("关闭标签", function(event, can) { can._tab._close() }), x: shy("关闭标签", function(event, can) { can._tab._close() }),
h: shy("打开左边标签", function(event, can) { var next = can._tab.previousSibling; next && next.click() }), h: shy("打开左边标签", function(event, can) { var next = can._tab.previousSibling; next && next.click() }),
l: shy("打开右边标签", function(event, can) { var next = can._tab.nextSibling; next && next.click() }), l: shy("打开右边标签", function(event, can) { var next = can._tab.nextSibling; next && next.click() }),
@ -343,10 +340,8 @@ Volcanos(chat.ONKEYMAP, {help: "导入数据",
}) })
Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, target) { Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, target) {
can.page.ClassList.add(can, can._fields, code.INNER) can.onmotion.clear(can), can.page.ClassList.add(can, can._fields, code.INNER), can.onlayout.profile(can)
can.onmotion.clear(can), can.onlayout.profile(can) can.onimport._profile(can, can.ui.profile), can.onimport._display(can, can.ui.display)
can.onimport._profile(can, can.ui.profile)
can.onimport._display(can, can.ui.display)
if (msg.Result() == "" && can.Option(nfs.LINE) == "1") { return } if (msg.Result() == "" && can.Option(nfs.LINE) == "1") { return }
if (msg.Option(nfs.FILE)) { if (msg.Option(nfs.FILE)) {
@ -401,6 +396,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
}, },
layout: function(can) { layout: function(can) {
if (can.isSimpleMode()) { return can.page.style(can, can.ui.content, html.WIDTH, can.ConfWidth()) } if (can.isSimpleMode()) { return can.page.style(can, can.ui.content, html.WIDTH, can.ConfWidth()) }
if (can.isCmdMode()) { can.ConfHeight(window.innerHeight), can.ConfWidth(window.innerWidth) }
var width = can.ConfWidth()+(can.user.isMobile && can.isCmdMode() && can.user.isLandscape()? 16: 0)-(can.user.isWindows && !can.isCmdMode()? 20: 0) var width = can.ConfWidth()+(can.user.isMobile && can.isCmdMode() && can.user.isLandscape()? 16: 0)-(can.user.isWindows && !can.isCmdMode()? 20: 0)
var project_width = can.ui.project.style.display == html.NONE? 0: (can.ui.project.offsetWidth||240) var project_width = can.ui.project.style.display == html.NONE? 0: (can.ui.project.offsetWidth||240)
@ -412,47 +408,30 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
var height = can.user.isMobile && can.isFloatMode()? window.innerHeight-2*html.ACTION_HEIGHT: can.base.Min(can.ConfHeight(), 320)-1 var height = can.user.isMobile && can.isFloatMode()? window.innerHeight-2*html.ACTION_HEIGHT: can.base.Min(can.ConfHeight(), 320)-1
var display_height = can.ui.display.style.display == html.NONE? 0: (can.display_size[can.onexport.keys(can)]||height/2) var display_height = can.ui.display.style.display == html.NONE? 0: (can.display_size[can.onexport.keys(can)]||height/2)
if (can.isCmdMode()) { // height += html.ACTION_HEIGHT var content_height = height-display_height; if (can.isCmdMode()) { content_height -= can.ui._tabs.offsetHeight + can.ui._path.offsetHeight + 4 }
var content_height = height-display_height - can.ui._tabs.offsetHeight - can.ui._path.offsetHeight - 4
can.page.style(can, can._output, html.MAX_HEIGHT, "")
} else {
var content_height = height-display_height
}
var profile_height = height-html.ACTION_HEIGHT-display_height var profile_height = height-html.ACTION_HEIGHT-display_height
can.page.styleHeight(can, can.ui.profile_output, profile_height) can.page.styleHeight(can, can.ui.profile_output, profile_height)
can.page.styleHeight(can, can.ui.display_output, display_height) can.page.styleHeight(can, can.ui.display_output, display_height)
can.page.styleHeight(can, can.ui.content, content_height-(can.ui.content != can.ui._content? 4: 0)) can.page.styleHeight(can, can.ui.content, content_height-(can.ui.content != can.ui._content? 4: 0))
can.page.styleHeight(can, can.ui.project, height) can.page.styleHeight(can, can.ui.project, height)
can.page.Select(can, can.ui.profile, html.IFRAME, function(iframe) { var sub = can.ui.content._plugin; sub && sub.onimport.size(content_height-2*html.ACTION_HEIGHT, content_width, true)
can.page.Modify(can, iframe, {height: profile_height-html.ACTION_HEIGHT-4, width: profile_width}) can.page.Select(can, can.ui.profile, html.IFRAME, function(iframe) { can.page.Modify(can, iframe, {height: profile_height-html.ACTION_HEIGHT-4, width: profile_width}) })
})
var sub = can.ui.content._plugin; if (sub) {
sub.ConfHeight(content_height-2*html.ACTION_HEIGHT), sub.ConfWidth(content_width)
sub && sub.onaction.refresh({}, sub)
}
}, },
toolkit: function(can, meta, cb) { meta.msg = true toolkit: function(can, meta, cb) { meta.msg = true
can.onimport.plug(can, meta, can.ui.toolkit.output, function(sub) { can.onimport.plug(can, meta, can.ui.toolkit.output, function(sub) {
sub.ConfHeight(can.ConfHeight()/2), sub.ConfWidth(can.ConfWidth()-can.ui.project.offsetWidth) sub.onimport.size(sub, can.ConfHeight()/2, can.ConfWidth() - can.ui.profile.offsetWidth, true)
sub.page.style(sub, sub._output, html.MAX_HEIGHT, sub.ConfHeight())
sub.page.style(sub, sub._output, html.MAX_WIDTH, sub.ConfWidth())
can._status.appendChild(sub._legend), sub._legend.onclick = function(event) { can._status.appendChild(sub._legend), sub._legend.onclick = function(event) {
if (can.page.Select(can, can._status, ice.PT+html.SELECT)[0] == event.target) { if (can.page.Select(can, can._status, ice.PT+html.SELECT)[0] == event.target) {
can.page.ClassList.del(can, event.target, html.SELECT) can.page.ClassList.del(can, event.target, html.SELECT)
can.page.ClassList.del(can, sub._target, html.SELECT) can.page.ClassList.del(can, sub._target, html.SELECT)
return return
} }
can.onmotion.select(can, can.ui.toolkit.output, html.FIELDSET, sub._target), sub.Focus() can.onmotion.select(can, can.ui.toolkit.output, html.FIELDSET, sub._target), sub.Focus()
can.onmotion.select(can, can._status, html.LEGEND, event.target) can.onmotion.select(can, can._status, html.LEGEND, event.target)
if (meta.msg == true) { meta.msg = false, sub.Update() } if (meta.msg == true) { meta.msg = false, sub.Update() }
}, sub.select = function() { return sub._legend.click(), sub } }, sub._legend.onmouseenter = null, can.base.isFunc(cb) && cb(sub)
sub.onaction.close = function() { sub.select() } sub.onaction.close = sub.select = function() { return sub._legend.click(), sub }
sub._legend.onmouseenter = null
can.base.isFunc(cb) && cb(sub)
}) })
}, },
exts: function(can, url, cb) { exts: function(can, url, cb) {

View File

@ -1,10 +1,9 @@
Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, target) { Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, target) {
can.require(["inner.js"], function(can) { can.onimport.inner_init(can, msg, function() { can.undo = [], can.redo = [] can.require(["inner.js"], function(can) { can.onimport.inner_init(can, msg, function() { can.undo = [], can.redo = []
// can.core.Item(can.onkeymap._mode.plugin, function(key, value) { can.onkeymap._mode.normal[key] = can.onkeymap._mode.normal[key]||value }) can.page.ClassList.add(can, can._fields, code.VIMER)
can.onimport._input(can), can.onkeymap._build(can), can.onkeymap._plugin({}, can) can.onimport._input(can), can.onkeymap._build(can), can.onkeymap._plugin({}, can)
can.onengine.listen(can, "tabview.line.select", function(msg) { can.onaction._selectLine(can) }) can.onengine.listen(can, "tabview.line.select", function(msg) { can.onaction._selectLine(can) })
can.page.ClassList.add(can, can._fields, code.VIMER), can.base.isFunc(cb) && cb(msg) can.onengine.plugin(can, can.onplugin), can.base.isFunc(cb) && cb(msg)
can.onengine.plugin(can, can.onplugin)
}, target) }, function(can, name, sub) { name == chat.ONIMPORT && (can.onimport.inner_init = sub._init) }, target) }, function(can, name, sub) { name == chat.ONIMPORT && (can.onimport.inner_init = sub._init)
if (name == chat.ONACTION) { can._trans = can.base.Copy(can._trans||{}, sub._trans) } if (name == chat.ONACTION) { can._trans = can.base.Copy(can._trans||{}, sub._trans) }
if (name == chat.ONKEYMAP) { can.core.Item(sub._mode, function(mode, value) { if (name == chat.ONKEYMAP) { can.core.Item(sub._mode, function(mode, value) {
@ -18,32 +17,24 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
{view: ["current", html.INPUT], spellcheck: false, onkeydown: function(event) { if (event.metaKey) { return } {view: ["current", html.INPUT], spellcheck: false, onkeydown: function(event) { if (event.metaKey) { return }
if (event.ctrlKey && can.onaction._complete(event, can)) { return } if (event.ctrlKey && can.onaction._complete(event, can)) { return }
can._keylist = can.onkeymap._parse(event, can, can.mode+(event.ctrlKey? "_ctrl": ""), can._keylist, can.ui.current) can._keylist = can.onkeymap._parse(event, can, can.mode+(event.ctrlKey? "_ctrl": ""), can._keylist, can.ui.current)
can.mode == "insert" && can.onmotion.delay(can, function() { can.current.text(can.ui.current.value) }, 10) can.mode == "insert" && can.onmotion.delay(can, function() { can.current.text(can.ui.current.value) })
can.mode == "normal" && can.Status("按键", can._keylist.join("")) can.mode == "normal" && can.Status("按键", can._keylist.join(""))
can.mode == "normal" && can.onkeymap.prevent(event) can.mode == "normal" && can.onkeymap.prevent(event)
}, onkeyup: function(event) { can.onaction._complete(event, can) }, onkeyup: function(event) { can.onaction._complete(event, can)
}, onclick: function(event) { can.onkeymap._insert(event, can) }, onclick: function(event) { can.onkeymap._insert(event, can)
}}, code.COMPLETE,
}}, {view: [code.COMPLETE]},
]); can.ui.current = ui.current, can.ui.complete = ui.complete ]); can.ui.current = ui.current, can.ui.complete = ui.complete
}, },
}, [""]) }, [""])
Volcanos(chat.ONFIGURE, {help: "索引导航", Volcanos(chat.ONFIGURE, {help: "索引导航",
create: function(can, target, zone, path) { create: function(can, target, zone, path) {
if (can.isCmdMode()) { can.isCmdMode()? can.onappend._action(can, can.base.Obj(can._msg.Option(ice.MSG_ACTION)), target): can.onmotion.hidden(can, target.parentNode)
can.onappend._action(can, can.base.Obj(can._msg.Option(ice.MSG_ACTION)), target)
} else {
can.onmotion.hidden(can, target.parentNode)
}
}, },
source: function(can, target, zone, path) { var total = 0 source: function(can, target, zone, path) { var total = 0
function show(target, path) { can.run(can.request({}, {dir_root: path, dir_deep: true}), [ice.PWD], function(msg) { var list = msg.Table() function show(target, path) { can.run(can.request({}, {dir_root: path, dir_deep: true}), [ice.PWD], function(msg) { var list = msg.Table()
can.core.List(list, function(item) { if (can.Option(nfs.FILE).indexOf(item.path) == 0) { item.expand = true } can.core.List(list, function(item) { item._menu = shy({trash: function(event) { can.onaction._run(event, can, nfs.TRASH, [can.base.Path(path, item.path)]) }}) })
item._menu = shy({trash: function(event) { can.onaction._run(event, can, nfs.TRASH, [can.base.Path(path, item.path)]) }})
})
can.onimport.tree(can, list, nfs.PATH, ice.PS, function(event, item) { can.onimport.tabview(can, path, item.path) }, target) can.onimport.tree(can, list, nfs.PATH, ice.PS, function(event, item) { can.onimport.tabview(can, path, item.path) }, target)
can.Status("文件数", total += msg.Length()), zone._total(total) can.Status("文件数", zone._total(total += msg.Length()))
}, true) } }, true) }
if (path.length == 1) { return show(target, path[0]) } can.page.Remove(can, target.previousSibling) if (path.length == 1) { return show(target, path[0]) } can.page.Remove(can, target.previousSibling)
@ -51,20 +42,16 @@ Volcanos(chat.ONFIGURE, {help: "索引导航",
}, },
website: function(can, target, zone) { website: function(can, target, zone) {
can.run(can.request({}, {dir_root: "src/website/", dir_deep: true}), [ice.PWD], function(msg) { var list = msg.Table() can.run(can.request({}, {dir_root: "src/website/", dir_deep: true}), [ice.PWD], function(msg) { var list = msg.Table()
can.core.List(list, function(item) { if (can.Option(nfs.FILE).indexOf(item.path) == 0) { item.expand = true } })
can.onimport.tree(can, list, nfs.PATH, ice.PS, function(event, item) { can.onimport.tabview(can, "src/website/", item.path) }, target) can.onimport.tree(can, list, nfs.PATH, ice.PS, function(event, item) { can.onimport.tabview(can, "src/website/", item.path) }, target)
zone._total(msg.Length()) zone._total(msg.Length())
}, true) }, true)
}, },
dream: function(can, target, zone) { var call = arguments.callee dream: function(can, target, zone) { var call = arguments.callee
can.runAction({}, ice.RUN, [web.DREAM], function(msg) { msg.Table(function(item) { var color = item.status == cli.START? "": "gray" can.runAction({}, ice.RUN, [web.DREAM], function(msg) { msg.Table(function(item) { var color = item.status == cli.START? "": "gray"
can.page.style(can, can.onimport.item(can, item, function(event) { can.page.style(can, can.onimport.item(can, item, function(event) { can.onimport.tabview(can, can.Option(nfs.PATH), item.name, web.DREAM) }, function(event) {
can.onimport.tabview(can, can.Option(nfs.PATH), item.name, web.DREAM)
}, function(event) {
return shy({}, kit.Dict(cli.START, [cli.OPEN, cli.STOP], cli.STOP, [cli.START, nfs.TRASH])[item.status], function(event, button) { return shy({}, kit.Dict(cli.START, [cli.OPEN, cli.STOP], cli.STOP, [cli.START, nfs.TRASH])[item.status], function(event, button) {
can.runAction(can.request({}, item), ice.RUN, [web.DREAM, ctx.ACTION, button], function(msg) { can.runAction(can.request({}, item), ice.RUN, [web.DREAM, ctx.ACTION, button], function(msg) {
if (can.sup.onimport._process(can.sup, msg)) { return } if (can.sup.onimport._process(can.sup, msg)) { return } can.onmotion.clear(can, target), call(can, target, zone)
can.onmotion.clear(can, target), call(can, target, zone)
}) })
}) })
}, target), {color: color}) }, target), {color: color})
@ -77,21 +64,17 @@ Volcanos(chat.ONFIGURE, {help: "索引导航",
}, },
xterm: function(can, target, zone) { xterm: function(can, target, zone) {
can.runAction({}, ice.RUN, [code.XTERM], function(msg) { msg.Table(function(item) { can.runAction({}, ice.RUN, [code.XTERM], function(msg) { msg.Table(function(item) {
can.onimport.item(can, item, function(event) { can.onimport.item(can, item, function(event) { can.onimport.tabview(can, ctx.COMMAND, code.XTERM, item.hash) }, function(event) {}, target)
can.onimport.tabview(can, ctx.COMMAND, code.XTERM, item.hash)
}, function(event) {}, target)
}), zone._total(msg.Length()) }) }), zone._total(msg.Length()) })
}, },
plugin: function(can, target, zone) { var total = 0 plugin: function(can, target, zone) { var total = 0
can.onimport.tree(can, can.core.Item(can.onengine.plugin.meta, function(key) { return total++, {index: can.base.trimPrefix(key, "can.")} }), ctx.INDEX, ice.PT, function(event, item) { can.onimport.tree(can, can.core.Item(can.onengine.plugin.meta, function(key) { return total++, {index: key} }), ctx.INDEX, ice.PT, function(event, item) {
can.onimport.tabview(can, can.Option(nfs.PATH), can.core.Keys("can", item.index), ctx.INDEX) can.onimport.tabview(can, can.Option(nfs.PATH), can.core.Keys("can", item.index), ctx.INDEX)
}, target), zone._total(total) }, target), zone._total(total)
}, },
module: function(can, target, zone) { module: function(can, target, zone) {
can.runAction(can.request({}, {fields: ctx.INDEX}), ctx.COMMAND, [mdb.SEARCH, ctx.COMMAND], function(msg) { can.runAction(can.request({}, {fields: ctx.INDEX}), ctx.COMMAND, [mdb.SEARCH, ctx.COMMAND], function(msg) {
can.onimport.tree(can, msg.Table(), ctx.INDEX, ice.PT, function(event, item) { can.onimport.tree(can, msg.Table(), ctx.INDEX, ice.PT, function(event, item) { can.onimport.tabview(can, can.Option(nfs.PATH), item.index, ctx.INDEX) }, target), zone._total(msg.Length())
can.onimport.tabview(can, can.Option(nfs.PATH), item.index, ctx.INDEX)
}, target), zone._total(msg.Length())
}) })
}, },
}) })
@ -116,15 +99,16 @@ Volcanos(chat.ONKEYMAP, {help: "键盘交互",
t: shy("添加命令", function(event, can) { can.onaction["添加"](event, can) }), t: shy("添加命令", function(event, can) { can.onaction["添加"](event, can) }),
p: shy("添加插件", function(event, can) { can.onaction["插件"](event, can) }), p: shy("添加插件", function(event, can) { can.onaction["插件"](event, can) }),
e: shy("添加扩展", function(event, can) { can.onaction["扩展"](event, can) }), e: shy("添加扩展", function(event, can) { can.onaction["扩展"](event, can) }),
g: shy("搜索", function(event, can) { can.onaction["搜索"](event, can) }),
i: shy("插入模式", function(event, can) { can.onkeymap._insert(event, can) }), i: shy("插入模式", function(event, can) { can.onkeymap._insert(event, can) }),
n: shy("命令模式", function(event, can) { can.onkeymap._normal(event, can) }), n: shy("命令模式", function(event, can) { can.onkeymap._normal(event, can) }),
":": shy("底行模式", function(event, can) { can.onimport.toolkit(can, {index: "cli.system"}, function(sub) { can.toolkit["cli.system"] = sub.select() }) }), ":": shy("底行模式", function(event, can) { can.onimport.toolkit(can, {index: "cli.system"}, function(sub) { can.toolkit["cli.system"] = sub.select() }) }),
s: shy("保存文件", function(event, can) { can.onaction.save(event, can, nfs.SAVE) }), s: shy("保存文件", function(event, can) { can.onaction.save(event, can, nfs.SAVE) }),
d: shy("创建空间", function(event, can) { can.onaction.dream(event, can, web.DREAM) }),
m: shy("添加模块", function(event, can) { can.onaction.autogen(event, can, code.AUTOGEN) }),
c: shy("编译项目", function(event, can) { can.onaction.compile(event, can, code.COMPILE) }), c: shy("编译项目", function(event, can) { can.onaction.compile(event, can, code.COMPILE) }),
m: shy("添加模块", function(event, can) { can.onaction.autogen(event, can, code.AUTOGEN) }),
d: shy("创建空间", function(event, can) { can.onaction.dream(event, can, web.DREAM) }),
}, },
normal_ctrl: { normal_ctrl: {
f: shy("向下翻页", function(event, can, target, count) { f: shy("向下翻页", function(event, can, target, count) {
@ -435,7 +419,7 @@ Volcanos(chat.ONACTION, {help: "控件交互",
}) })
}, },
}) })
Volcanos(chat.ONEXPORT, {help: "导出数据", list: ["文件数", "模式", "解析器", "文件名", "当前行", "跳转数"]}) Volcanos(chat.ONEXPORT, {help: "导出数据", list: ["文件数", "模式", "按键", "解析器", "文件名", "当前行", "跳转数"]})
Volcanos(chat.ONPLUGIN, {help: "注册插件", Volcanos(chat.ONPLUGIN, {help: "注册插件",
"code.vimer.keymap": shy("按键", {}, ["mode", "key", ice.LIST, ice.BACK], function(can, msg, cmds) { "code.vimer.keymap": shy("按键", {}, ["mode", "key", ice.LIST, ice.BACK], function(can, msg, cmds) {
can.core.Item(can.onkeymap._mode, function(mode, value) { can.core.Item(can.onkeymap._mode, function(mode, value) {