mirror of
https://shylinux.com/x/volcanos
synced 2025-04-25 16:58:06 +08:00
opt inner
This commit is contained in:
parent
efad4ad4c4
commit
4412a89c61
@ -39,7 +39,7 @@ Volcanos(chat.ONFIGURE, {help: "控件详情", key: {
|
||||
onclick: function(event, can, meta, cb, target) {
|
||||
target._can && target._can.close()
|
||||
can.onfigure.key._make(event, can, meta, cb, target)
|
||||
can.onmotion.focus(can, target)
|
||||
// can.onmotion.focus(can, target)
|
||||
},
|
||||
onfocus: function(event, can, meta, cb, target, last) {
|
||||
can.onfigure.key._make(event, can, meta, cb, target)
|
||||
|
@ -6,7 +6,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据",
|
||||
|
||||
project: function(can, path) {
|
||||
can.onimport.zone(can, can.core.Item(can.onfigure, function(name, cb) {
|
||||
return can.base.isFunc(cb)? {name: name, _init: function(target, zone) { return cb(can, target, zone, path) }}: undefined
|
||||
if (can.base.isFunc(cb)) { return {name: name, _init: function(target, zone) { return cb(can, target, zone, path) }} }
|
||||
}), can.ui.project), can.user.isMobile && !can.user.isLandscape() && can.onmotion.hidden(can, can.ui.project)
|
||||
},
|
||||
tabview: function(can, path, file, line, cb) { var key = can.onexport.keys(can, path, file)
|
||||
@ -31,10 +31,10 @@ 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)] }
|
||||
can.Status(kit.Dict("文件名", ls.join(ice.PS), "解析器", can.parse))
|
||||
skip || can.onaction.selectLine(null, can, can.Option(nfs.LINE)), can.onimport.layout(can)
|
||||
var scroll = can.current.scroll(); can.current.scroll(scroll-5)
|
||||
can.onengine.signal(can, "tabview.view.show", msg), can.base.isFunc(cb) && cb(), cb = null
|
||||
can.Status(kit.Dict("文件名", ls.join(ice.PS), "解析器", can.parse)), can.onimport.layout(can)
|
||||
skip || can.onaction.selectLine(can, can.Option(nfs.LINE))
|
||||
can.onengine.signal(can, "tabview.view.show", msg)
|
||||
can.base.isFunc(cb) && cb(), cb = null
|
||||
})
|
||||
}
|
||||
function load(msg) { can.tabview[key] = msg
|
||||
@ -58,7 +58,6 @@ Volcanos(chat.ONIMPORT, {help: "导入数据",
|
||||
Volcanos(chat.ONFIGURE, {help: "索引导航",
|
||||
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()
|
||||
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, path, item.path) }, target)
|
||||
can.Status("文件数", total += msg.Length()), zone._total(total)
|
||||
}, true) }
|
||||
@ -74,16 +73,13 @@ Volcanos(chat.ONFIGURE, {help: "索引导航",
|
||||
})
|
||||
Volcanos(chat.ONSYNTAX, {help: "语法高亮", _init: function(can, msg, cb) {
|
||||
if (can.onmotion.cache(can, function(cache_data) {
|
||||
can.file && (cache_data[can.file] = {current: can.current, max: can.max,
|
||||
profile_display: can.ui.profile.style.display, display_display: can.ui.display.style.display,
|
||||
})
|
||||
can.file && (cache_data[can.file] = {current: can.current, max: can.max, profile_display: can.ui.profile.style.display, display_display: can.ui.display.style.display})
|
||||
can.file = can.onexport.keys(can, can.Option(nfs.PATH), can.Option(nfs.FILE))
|
||||
var p = cache_data[can.file]; if (p) { can.current = p.current, can.max = p.max }
|
||||
can.page.style(can, can.ui.profile, html.DISPLAY, p? p.profile_display: html.NONE)
|
||||
can.page.style(can, can.ui.display, html.DISPLAY, p? p.display_display: html.NONE)
|
||||
can.parse = can.base.Ext(can.file), can.Status("模式", "plugin")
|
||||
return can.file
|
||||
|
||||
}, can.ui._content, can.ui._profile_output, can.ui.display_output)) {
|
||||
return can.base.isFunc(cb) && cb(msg._content)
|
||||
}
|
||||
@ -92,8 +88,8 @@ Volcanos(chat.ONSYNTAX, {help: "语法高亮", _init: function(can, msg, cb) {
|
||||
|
||||
function init(p) {
|
||||
can.max = 0, can.core.List(can.ls = msg.Result().split(ice.NL), function(item) { can.onaction.appendLine(can, item) })
|
||||
can.onaction.selectLine(null, can, can.Option(nfs.LINE)), can.onengine.signal(can, "tabview.view.init", msg)
|
||||
can.base.isFunc(cb) && cb(msg._content = can.ui._content)
|
||||
can.onaction.selectLine(can, can.Option(nfs.LINE)), can.current.scroll(can.current.scroll()-4)
|
||||
can.onengine.signal(can, "tabview.view.init", msg), can.base.isFunc(cb) && cb(msg._content = can.ui._content)
|
||||
}
|
||||
can.require(["inner/syntax.js"], function() { can.Conf("plug") && (can.onsyntax[can.parse] = can.Conf("plug"))
|
||||
var p = can.onsyntax[can.parse]; !p? can.runAction({}, mdb.PLUGIN, [can.parse, can.Option(nfs.FILE), can.Option(nfs.PATH)], function(msg) {
|
||||
@ -111,7 +107,7 @@ Volcanos(chat.ONSYNTAX, {help: "语法高亮", _init: function(can, msg, cb) {
|
||||
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() })
|
||||
|
||||
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/")
|
||||
if (_arg.indexOf(location.origin) == 0 && ls.length > 1) {
|
||||
return can.onimport.tabview(can, can.Option(nfs.PATH), ls[1].split(ice.PS)[0], web.DREAM), sub.Update()
|
||||
@ -123,7 +119,7 @@ Volcanos(chat.ONSYNTAX, {help: "语法高亮", _init: function(can, msg, cb) {
|
||||
_parse: function(can, line) { line = can.page.replace(can, line||"")
|
||||
function wrap(text, type) { return can.page.Format(html.SPAN, text, type) }
|
||||
var p = can.onsyntax[can.parse]; p = can.onsyntax[p.link]||p, p.split = p.split||{}
|
||||
p.keyword && (line = can.core.List(can.core.Split(line, p.split.space||"\t ", p.split.operator||"{[(,:;!|<*>)]}", {detail: true}), function(item, index, array) {
|
||||
p.keyword && (line = can.core.List(can.core.Split(line, p.split.space||"\t ", p.split.operator||"{[(,:;!?|<*>)]}", {detail: true}), function(item, index, array) {
|
||||
item = can.base.isObject(item)? item: {text: item}; var text = item.text, type = p.keyword[text]
|
||||
switch (item.type||type) {
|
||||
case html.SPACE: return text
|
||||
@ -134,10 +130,8 @@ Volcanos(chat.ONSYNTAX, {help: "语法高亮", _init: function(can, msg, cb) {
|
||||
case code.DATATYPE:
|
||||
case code.FUNCTION: return wrap(text, type)
|
||||
default:
|
||||
var t = can.core.Item(p.regexp, function(reg, type) {
|
||||
var m = text.match(new RegExp(reg)); if (m && m.length > 0 && m[0] == text) { return type}
|
||||
}); if (t && t.length > 0) { return wrap(text, t[0]) }
|
||||
return text
|
||||
var t = can.core.Item(p.regexp, function(reg, type) { var m = text.match(new RegExp(reg)); if (m && m.length > 0 && m[0] == text) { return type} })
|
||||
return t && t.length > 0? wrap(text, t[0]): text
|
||||
}
|
||||
}).join(""))
|
||||
p.prefix && can.core.Item(p.prefix, function(pre, type) { if (can.base.beginWith(line, pre)) { line = wrap(line, type) } })
|
||||
@ -145,18 +139,19 @@ Volcanos(chat.ONSYNTAX, {help: "语法高亮", _init: function(can, msg, cb) {
|
||||
return line
|
||||
},
|
||||
})
|
||||
Volcanos(chat.ONENGINE, {help: "搜索引擎",
|
||||
listen: shy("监听事件", function(can, key, cb) { arguments.callee.meta[key] = (arguments.callee.meta[key]||[]).concat(cb) }),
|
||||
})
|
||||
Volcanos(chat.ONACTION, {help: "控件交互",
|
||||
appendLine: function(can, value) {
|
||||
var ui = can.page.Append(can, can.ui._content, [{type: html.TR, list: [
|
||||
{view: ["line unselectable", html.TD, ++can.max], onclick: function(event) {
|
||||
can.onaction.selectLine(event, can, ui.tr)
|
||||
can.onaction.selectLine(can, ui.tr)
|
||||
}, ondblclick: function(event) {
|
||||
can.onaction.favorLine(can, ui.text.innerText)
|
||||
can.onaction.favorLine(event, can, ui.text.innerText)
|
||||
}},
|
||||
|
||||
{view: [html.TEXT, html.TD], inner: can.onsyntax._parse(can, value), onclick: function(event) {
|
||||
can.onaction.selectLine(event, can, ui.tr)
|
||||
|
||||
can.onaction.selectLine(can, ui.tr)
|
||||
}, ondblclick: function(event) {
|
||||
var s = document.getSelection().toString(), str = ui.text.innerText, begin = str.indexOf(s), end = begin+s.length
|
||||
for (var i = begin; i >= 0; i--) { if (str[i].match(/[a-zA-Z0-9_.]/)) { s = str.slice(i, end) } else { break } }
|
||||
@ -164,7 +159,8 @@ Volcanos(chat.ONACTION, {help: "控件交互",
|
||||
}}
|
||||
]}]); return ui.tr
|
||||
},
|
||||
selectLine: function(event, can, line) { if (!line) { return parseInt(can.core.Value(can.page.Select(can, can.ui._content, [[[html.TR, html.SELECT], [html.TD, "line"]]])[0], "innerText")||"1") }
|
||||
selectLine: function(can, line) {
|
||||
if (!line) { return parseInt(can.core.Value(can.page.Select(can, can.ui._content, [[[html.TR, html.SELECT], [html.TD, nfs.LINE]]])[0], "innerText")||"1") }
|
||||
can.page.Select(can, can.ui._content, html.TR, function(item, index, array) {
|
||||
if (!can.page.ClassList.set(can, item, html.SELECT, item == line || index+1 == line)) { return }
|
||||
line = item, can.Status("当前行", can.onexport.position(can, can.Option(nfs.LINE, index+1)))
|
||||
@ -184,7 +180,7 @@ Volcanos(chat.ONACTION, {help: "控件交互",
|
||||
}
|
||||
|
||||
can.onimport.history(can, {path: can.Option(nfs.PATH), file: can.Option(nfs.FILE), line: can.Option(nfs.LINE)})
|
||||
can.onexport.hash(can), can.onengine.signal(can, "tabview.line.select", can.request(event))
|
||||
can.onexport.hash(can), can.onengine.signal(can, "tabview.line.select")
|
||||
}); return parseInt(can.page.Select(can, line, "td.line")[0].innerText)
|
||||
},
|
||||
searchLine: function(event, can, value) {
|
||||
@ -192,7 +188,7 @@ Volcanos(chat.ONACTION, {help: "控件交互",
|
||||
msg.Append(nfs.FILE)? can.onimport.tabview(can, msg.Append(nfs.PATH), msg.Append(nfs.FILE), msg.Append(nfs.LINE)): can.user.toast(can, "not found")
|
||||
})
|
||||
},
|
||||
favorLine: function(can, value) {
|
||||
favorLine: function(event, can, value) {
|
||||
can.user.input(event, can, [{name: mdb.ZONE, value: "hi"}, {name: mdb.NAME, value: "hello"}], function(data) {
|
||||
can.runAction(event, code.FAVOR, [ctx.ACTION, mdb.INSERT, mdb.ZONE, data.zone||"",
|
||||
mdb.TYPE, can.parse, mdb.NAME, data.name||"", mdb.TEXT, (value||"").trimRight(),
|
||||
@ -200,24 +196,16 @@ Volcanos(chat.ONACTION, {help: "控件交互",
|
||||
], function() { can.user.toastSuccess(can) })
|
||||
})
|
||||
},
|
||||
|
||||
back: function(event, can) { can.history.pop(); var last = can.history.pop()
|
||||
last && can.onimport.tabview(can, last.path, last.file, last.line), can.Status("跳转数", can.history.length)
|
||||
},
|
||||
})
|
||||
Volcanos(chat.ONENGINE, {help: "搜索引擎",
|
||||
listen: shy("监听事件", function(can, key, cb) { arguments.callee.meta[key] = (arguments.callee.meta[key]||[]).concat(cb) }),
|
||||
back: function(can) { can.history.pop(); var last = can.history.pop(); last && can.onimport.tabview(can, last.path, last.file, last.line) },
|
||||
})
|
||||
Volcanos(chat.ONEXPORT, {help: "导出数据", list: ["文件数", "解析器", "文件名", "当前行", "跳转数"],
|
||||
keys: function(can, path, file) {
|
||||
return [path||can.Option(nfs.PATH), file||can.Option(nfs.FILE)].join(ice.DF)
|
||||
},
|
||||
hash: function(can) { if (!can.isCmdMode()) { return }
|
||||
var list = []; if (can.Option(nfs.PATH) != can.misc.Search(can, nfs.PATH)) { list.push(can.Option(nfs.PATH)) }
|
||||
if (list.length > 0 || can.Option(nfs.FILE) != can.misc.Search(can, nfs.FILE)) { list.push(can.Option(nfs.FILE)) }
|
||||
if (list.length > 0 || can.Option(nfs.LINE) != can.misc.Search(can, nfs.LINE)) { list.push(can.Option(nfs.LINE)||1) }
|
||||
if (list.length > 0 || can.Option(nfs.LINE) != can.misc.Search(can, nfs.LINE)) { list.push(can.Option(nfs.LINE)) }
|
||||
location.hash = list.join(ice.FS)
|
||||
},
|
||||
keys: function(can, path, file) { return [path||can.Option(nfs.PATH), file||can.Option(nfs.FILE)].join(ice.FS) },
|
||||
content: function(can) { return can.page.Select(can, can.ui.content, "td.text", function(item) { return item.innerText }).join(ice.NL) },
|
||||
position: function(can, index, total) { total = total||can.max; return (parseInt(index))+ice.PS+parseInt(total)+" = "+parseInt((index)*100/total)+"%" },
|
||||
})
|
||||
@ -227,19 +215,14 @@ Volcanos(chat.ONIMPORT, {help: "导入数据",
|
||||
var ui = can.onimport._panel(can, target, kit.Dict(
|
||||
mdb.LINK, function(event) {
|
||||
if ([nfs.ZML, nfs.IML].indexOf(can.base.Ext(can.Option(nfs.FILE))) > -1) {
|
||||
can.user.open(can.misc.MergeURL(can, {
|
||||
pod: can.misc.Search(can, ice.POD), website: can.base.trimPrefix(can.base.Path(can.Option(nfs.PATH), can.Option(nfs.FILE)), "src/website/"),
|
||||
}))
|
||||
can.user.open(can.misc.MergePodCmd(can, {website: can.base.trimPrefix(can.base.Path(can.Option(nfs.PATH), can.Option(nfs.FILE)), "src/website/")}))
|
||||
} else {
|
||||
can.user.open(can.misc.MergeURL(can, {
|
||||
pod: can.misc.Search(can, ice.POD), cmd: can.base.Path(can.Option(nfs.PATH), can.Option(nfs.FILE))
|
||||
}))
|
||||
can.user.open(can.misc.MergePodCmd(can, {cmd: can.base.Path(can.Option(nfs.PATH), can.Option(nfs.FILE))}))
|
||||
}
|
||||
},
|
||||
html.WIDTH, function(event) {
|
||||
can.user.input(event, can, [{name: html.WIDTH, value: can.profile_size[can.onexport.keys(can)]*100/can.ConfWidth()||50}], function(list) {
|
||||
can.profile_size[can.onexport.keys(can)] = can.ConfWidth()*parseInt(list[0])/100
|
||||
can.onaction[cli.SHOW](event, can)
|
||||
can.profile_size[can.onexport.keys(can)] = can.ConfWidth()*parseInt(list[0])/100, can.onaction[cli.SHOW](event, can)
|
||||
})
|
||||
},
|
||||
)); can.ui.profile_output = ui.output
|
||||
@ -249,124 +232,79 @@ Volcanos(chat.ONIMPORT, {help: "导入数据",
|
||||
cli.SHOW, function(event) { can.onaction[cli.EXEC](event, can) },
|
||||
html.HEIGHT, function(event) {
|
||||
can.user.input(event, can, [{name: html.HEIGHT, value: can.display_size[can.onexport.keys(can)]*100/can.ConfHeight()||50}], function(list) {
|
||||
can.display_size[can.onexport.keys(can)] = can.ConfHeight()*parseInt(list[0])/100
|
||||
can.onaction[cli.EXEC](event, can)
|
||||
can.display_size[can.onexport.keys(can)] = can.ConfHeight()*parseInt(list[0])/100, can.onaction[cli.EXEC](event, can)
|
||||
})
|
||||
}
|
||||
)); can.ui.display_output = ui.output, can.ui.display_status = ui.status
|
||||
},
|
||||
profile: function(can, msg) {
|
||||
if (msg) {
|
||||
var sup = can.tabview[can.onexport.keys(can)]
|
||||
can.onmotion.toggle(can, can.ui.profile_output, false)
|
||||
if (msg.Result().indexOf("<iframe") > -1) {
|
||||
var width = can.profile_size[can.onexport.keys(can)]||(can.ConfWidth()-can.ui.project.offsetWidth)/4*3
|
||||
if (sup._profile_output != can.ui._profile_output) { can.page.Remove(can, sup._profile_output) }
|
||||
profile: function(can, msg) { var sup = can.tabview[can.onexport.keys(can)]
|
||||
if (msg.Result().indexOf("<iframe") > -1) { if (sup._profile_output != can.ui._profile_output) { can.page.Remove(can, sup._profile_output) }
|
||||
can.ui.profile_output = sup._profile_output = can.page.Append(can, can.ui._profile_output.parentNode, [{view: html.OUTPUT, inner: msg.Result()}]).output
|
||||
can.profile_size[can.onexport.keys(can)] = width
|
||||
var width = can.profile_size[can.onexport.keys(can)]||(can.ConfWidth()-can.ui.project.offsetWidth)/4*3; can.profile_size[can.onexport.keys(can)] = width
|
||||
} else {
|
||||
var width = can.profile_size[can.onexport.keys(can)]||(can.ConfWidth()-can.ui.project.offsetWidth)/2
|
||||
can.ui.profile_output = sup._profile_output = can.ui._profile_output
|
||||
can.onimport.process(can, msg, can.ui._profile_output, width, can.ui.profile.offsetHeight)
|
||||
can.page.Select(can, can.ui._profile_output, html.TABLE, function(target) { can.onmotion.delay(can, function() {
|
||||
if (target.offsetWidth < can.ui._profile_output.offsetWidth) {
|
||||
can.profile_size[can.onexport.keys(can)] = target.offsetWidth, can.onimport.layout(can)
|
||||
}
|
||||
}, 10) })
|
||||
var width = can.profile_size[can.onexport.keys(can)]||(can.ConfWidth()-can.ui.project.offsetWidth)/2
|
||||
can.onimport.process(can, msg, can.ui._profile_output, can.ui.profile.offsetHeight, width)
|
||||
can.onappend._status(can, msg.Option(ice.MSG_STATUS), can.page.Append(can, can.ui._profile_output, [html.STATUS]).first)
|
||||
can.page.Select(can, can.ui._profile_output, "table.content", function(target) { can.page.style(can, target, html.MAX_HEIGHT, "1000px") })
|
||||
}
|
||||
can.page.Select(can, can.ui._profile_output, html.TABLE, function(target) { can.onmotion.delay(can, function() {
|
||||
if (target.offsetWidth < can.ui._profile_output.offsetWidth) { can.profile_size[can.onexport.keys(can)] = target.offsetWidth, can.onimport.layout(can) }
|
||||
}) }), can.page.Select(can, can.ui._profile_output, "table.content", function(target) { can.page.style(can, target, html.MAX_HEIGHT, "1000px") })
|
||||
}
|
||||
can.onmotion.toggle(can, can.ui.profile_output, true)
|
||||
can.onmotion.toggle(can, can.ui.profile, true), can.onimport.layout(can)
|
||||
},
|
||||
display: function(can, msg) {
|
||||
var height = can.display_size[can.onexport.keys(can)]||{sh: can.ConfHeight()/2}[can.parse]||can.ConfHeight()/2
|
||||
if (msg) {
|
||||
can.onimport.process(can, msg, can.ui.display_output, can.ui.display.offsetWidth, height)
|
||||
var height = can.display_size[can.onexport.keys(can)]||can.ConfHeight()/2
|
||||
can.onimport.process(can, msg, can.ui.display_output, height, can.ui.display.offsetWidth)
|
||||
can.onappend._status(can, msg.Option(ice.MSG_STATUS), can.ui.display_status)
|
||||
can.onmotion.delay(can, function() {
|
||||
can.page.Select(can, can.ui.display_output, html.TABLE, function(target) {
|
||||
if (target.offsetHeight < can.ui.display_output.offsetHeight-3*html.ACTION_HEIGHT) {
|
||||
can.display_size[can.onexport.keys(can)] = target.offsetHeight-3*html.ACTION_HEIGHT, can.onimport.layout(can)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
can.onmotion.toggle(can, can.ui.display, true), can.onimport.layout(can)
|
||||
},
|
||||
process: function(can, msg, target, width, height) { can.onmotion.clear(can, target), can.user.toastSuccess(can)
|
||||
process: function(can, msg, target, height, width) { can.onmotion.clear(can, target), can.user.toastSuccess(can)
|
||||
if (msg.Option(ice.MSG_PROCESS) == "_field") {
|
||||
msg.Table(function(item) { item.display = msg.Option(ice.MSG_DISPLAY)
|
||||
can.onimport.plug(can, item, target, function(sub) { width && sub.ConfWidth(width)
|
||||
, height && sub.ConfHeight(height-3*html.ACTION_HEIGHT), sub.Focus() })
|
||||
can.onimport.plug(can, item, target, function(sub) { height && sub.ConfHeight(height-3*html.ACTION_HEIGHT), width && sub.ConfWidth(width), sub.Focus() })
|
||||
})
|
||||
} else if (msg.Option(ice.MSG_DISPLAY) != "") {
|
||||
can.onappend._output(can, msg, msg.Option(ice.MSG_DISPLAY), target, false, function(msg) { can.onmotion.delay(can, function() { can.onimport.layout(can) }) })
|
||||
} else {
|
||||
can.onappend.table(can, msg, function(value, key, index, line, array) {
|
||||
return {text: [value, html.TD], onclick: function(event) {
|
||||
if (line.line || line.file) { can.onimport.tabview(can, line.path||can.Option(nfs.PATH), line.file||can.Option(nfs.FILE), line.line||can.Option(nfs.LINE)) }
|
||||
}}
|
||||
return {text: [value, html.TD], onclick: function(event) { if (line.line || line.file) {
|
||||
can.onimport.tabview(can, line.path||can.Option(nfs.PATH), line.file||can.Option(nfs.FILE), line.line||can.Option(nfs.LINE), function() {
|
||||
can.current.scroll(can.current.scroll()-9)
|
||||
})
|
||||
} }}
|
||||
}, target), can.onappend.board(can, msg, target)
|
||||
}
|
||||
},
|
||||
}, [""])
|
||||
Volcanos(chat.ONACTION, {help: "控件交互", _trans: {link: "链接", width: "宽度", height: "高度"},
|
||||
"搜索": function(event, can) {
|
||||
can.user.input(event, can, [mdb.NAME, [ctx.ACTION, nfs.TAGS, nfs.GREP, cli.MAKE]], function(data) {
|
||||
can.user.input(event, can, [mdb.NAME, [ctx.ACTION, nfs.TAGS, cli.MAKE, nfs.GREP]], function(data) {
|
||||
can.ui.search.Update({}, [ctx.ACTION, data.action, data.name])
|
||||
})
|
||||
},
|
||||
"打开": function(event, can) { var msg = can.request(event, {paths: can.sup.paths.join(ice.FS)})
|
||||
can.user.input(event, can, [nfs.FILE], function(list) {
|
||||
if (list[0].indexOf("line:") == 0) { var ls = can.core.Split(list[0], ice.DF, ice.DF)
|
||||
can.onimport.tabview(can, can.Option(nfs.PATH), can.Option(nfs.FILE), ls[1])
|
||||
return
|
||||
}
|
||||
can.core.List(can.sup.paths, function(path) {
|
||||
if (list[0].indexOf(path) == 0) { can.onimport.tabview(can, path, list[0].slice(path.length)) }
|
||||
})
|
||||
"打开": function(event, can) {
|
||||
can.user.input(can.request(event, {paths: can.sup.paths.join(ice.FS)}), can, [nfs.FILE], function(list) {
|
||||
if (list[0].indexOf("line:") == 0) { return can.onaction.selectLine(can, parseInt(can.core.Split(list[0], ice.DF, ice.DF)[1])) }
|
||||
can.core.List(can.sup.paths, function(path) { if (list[0].indexOf(path) == 0) { can.onimport.tabview(can, path, list[0].slice(path.length)) } })
|
||||
})
|
||||
},
|
||||
show: function(event, can) { can.request(event, {_toast: "渲染中..."})
|
||||
if (can.base.endWith(can.Option(nfs.FILE), ".js")) {
|
||||
var file = can.base.Path("/require/", can.Option(nfs.PATH), can.Option(nfs.FILE))
|
||||
delete(Volcanos.meta.cache[file]), eval("\n_can_name = \""+file+"\"\n"+can.onexport.content(can)+"\n_can_name = \"\"\nconsole.log(\"once\")")
|
||||
}
|
||||
can.runAction(event, mdb.RENDER, [can.parse, can.Option(nfs.FILE), can.Option(nfs.PATH)], function(msg) {
|
||||
can.onimport.profile(can, msg)
|
||||
})
|
||||
show: function(event, can) {
|
||||
if (can.base.Ext(can.Option(nfs.FILE)) == nfs.JS) { delete(Volcanos.meta.cache[can.base.Path("/require/", can.Option(nfs.PATH), can.Option(nfs.FILE))]) }
|
||||
can.runAction(can.request(event, {_toast: "渲染中..."}), mdb.RENDER, [can.parse, can.Option(nfs.FILE), can.Option(nfs.PATH)], function(msg) { can.onimport.profile(can, msg) })
|
||||
},
|
||||
exec: function(event, can) { can.request(event, {_toast: "执行中...", "some": "run"})
|
||||
can.runAction(event, mdb.ENGINE, [can.parse, can.Option(nfs.FILE), can.Option(nfs.PATH)], function(msg) {
|
||||
can.onimport.display(can, msg)
|
||||
})
|
||||
exec: function(event, can) {
|
||||
can.runAction(can.request(event, {_toast: "执行中..."}), mdb.ENGINE, [can.parse, can.Option(nfs.FILE), can.Option(nfs.PATH)], function(msg) { can.onimport.display(can, msg) })
|
||||
},
|
||||
clear: function(event, can) {
|
||||
if (can.page.Select(can, can._root._target, ".input.float", function(item) { return can.page.Remove(can, item) }).length > 0) { return }
|
||||
if (can.page.Select(can, can._status, "legend.select", function(item) { return item.click(), item }).length > 0) { return }
|
||||
|
||||
if (can.ui.display.style.display == "") { return can.onmotion.hidden(can, can.ui.display), can.onimport.layout(can) }
|
||||
if (can.ui.profile.style.display == "") { return can.onmotion.hidden(can, can.ui.profile), can.onimport.layout(can) }
|
||||
can.onmotion.toggle(can, can.ui.project), can.onimport.layout(can)
|
||||
},
|
||||
listTags: function(event, can, button) { var list = []
|
||||
can.core.Item(can.request(event), function(key, value) { if (key.indexOf("_") == 0) { return }
|
||||
list.push({zone: "msg", type: typeof value, name: key, text: can.base.isObject(value)? "": (value+"").split(ice.NL)[0],
|
||||
path: "usr/volcanos/", file: "lib/misc.js", line: 1,
|
||||
})
|
||||
})
|
||||
can.core.List([can.base, can.core, can.misc, can.page, can.user, can.onengine, can.ondaemon, can.onappend, can.onlayout, can.onmotion, can.onkeymap], function(lib) {
|
||||
can.core.Item(lib, function(key, value) { if (key.indexOf("_") == 0 || !lib.hasOwnProperty(key)) { return }
|
||||
list.push({zone: lib._name, type: typeof value, name: key, text: can.base.isObject(value)? "": (value+"").split(ice.NL)[0],
|
||||
path: "usr/volcanos/", file: lib._path, line: 1,
|
||||
})
|
||||
})
|
||||
})
|
||||
can.runAction(can.request(event, {text: can.base.Format(list)}), button)
|
||||
},
|
||||
})
|
||||
|
||||
Volcanos(chat.ONIMPORT, {help: "导入数据",
|
||||
_keydown: function(can) { can.onkeymap._build(can)
|
||||
can.isCmdMode() && can._root.onengine.listen(can, chat.ONKEYDOWN, function(event) {
|
||||
@ -378,14 +316,16 @@ Volcanos(chat.ONKEYMAP, {help: "导入数据",
|
||||
_mode: {
|
||||
plugin: {
|
||||
Escape: shy("切换模式", function(event, can) { can.onaction.clear(event, can) }),
|
||||
g: shy("搜索", function(event, can) { can.onaction["搜索"](event, can) }),
|
||||
f: shy("打开文件", function(event, can) { can.onaction["打开"](event, can) }),
|
||||
r: shy("执行命令", function(event, can) { can.onaction[cli.EXEC](event, can) }),
|
||||
v: shy("渲染界面", function(event, can) { can.onaction[cli.SHOW](event, can) }),
|
||||
x: shy("关闭标签", function(event, can) { can._tab._close() }),
|
||||
r: shy("执行命令", function(event, can) { can.onaction[cli.EXEC](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() }),
|
||||
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() }),
|
||||
|
||||
j: shy("向下滚动", function(event, can) {
|
||||
if (can.ui.content != can.ui._content) {
|
||||
can.ui.content.contentWindow.document.body.scrollTop += 16
|
||||
@ -536,6 +476,21 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
|
||||
}, [""])
|
||||
Volcanos(chat.ONACTION, {help: "控件交互", list: [],
|
||||
sess: function(event, can) { can.onexport.sess(can), can.user.toastSuccess(can) },
|
||||
listTags: function(event, can, button) { var list = []
|
||||
can.core.Item(can.request(event), function(key, value) { if (key.indexOf("_") == 0) { return }
|
||||
list.push({zone: "msg", type: typeof value, name: key, text: can.base.isObject(value)? "": (value+"").split(ice.NL)[0],
|
||||
path: "usr/volcanos/", file: "lib/misc.js", line: 1,
|
||||
})
|
||||
})
|
||||
can.core.List([can.base, can.core, can.misc, can.page, can.user, can.onengine, can.ondaemon, can.onappend, can.onlayout, can.onmotion, can.onkeymap], function(lib) {
|
||||
can.core.Item(lib, function(key, value) { if (key.indexOf("_") == 0 || !lib.hasOwnProperty(key)) { return }
|
||||
list.push({zone: lib._name, type: typeof value, name: key, text: can.base.isObject(value)? "": (value+"").split(ice.NL)[0],
|
||||
path: "usr/volcanos/", file: lib._path, line: 1,
|
||||
})
|
||||
})
|
||||
})
|
||||
can.runAction(can.request(event, {text: can.base.Format(list)}), button)
|
||||
},
|
||||
})
|
||||
Volcanos(chat.ONEXPORT, {help: "导出数据",
|
||||
sess: function(can) { can.user.localStorage(can, "web.code.inner.sess", {"plug": can.onexport.plug(can), "exts": can.onexport.exts(can), "tabs": can.onexport.tabs(can)}) },
|
||||
|
@ -2,7 +2,7 @@ Volcanos(chat.ONIMPORT, {help: "导入数据", _init: function(can, msg, cb, tar
|
||||
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.onimport._input(can), can.onkeymap._build(can), can.onkeymap._plugin({}, can)
|
||||
can.onengine.listen(can, "tabview.line.select", function(msg) { can.onaction._selectLine(msg._event, 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)
|
||||
}, target) }, function(can, name, sub) { name == chat.ONIMPORT && (can.onimport.inner_init = sub._init)
|
||||
@ -108,7 +108,7 @@ Volcanos(chat.ONKEYMAP, {help: "键盘交互",
|
||||
},
|
||||
_insert: function(event, can) { can.onkeymap._model(can, "insert")
|
||||
can.ui.current.focus(), can.ui.content.scrollLeft -= 10000
|
||||
can.onkeymap.prevent(event)
|
||||
event && can.onkeymap.prevent(event)
|
||||
},
|
||||
|
||||
_mode: {
|
||||
@ -116,7 +116,6 @@ Volcanos(chat.ONKEYMAP, {help: "键盘交互",
|
||||
t: 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) }),
|
||||
f: shy("打开文件", function(event, can) { can.onaction["打开"](event, can) }),
|
||||
|
||||
i: shy("插入模式", function(event, can) { can.onkeymap._insert(event, can) }),
|
||||
n: shy("命令模式", function(event, can) { can.onkeymap._normal(event, can) }),
|
||||
@ -129,20 +128,20 @@ Volcanos(chat.ONKEYMAP, {help: "键盘交互",
|
||||
},
|
||||
normal_ctrl: {
|
||||
f: shy("向下翻页", function(event, can, target, count) {
|
||||
var line = can.onaction.selectLine(event, can)+can.current.window()-3-can.current.scroll()
|
||||
return can.current.scroll(line), can.onaction.selectLine(event, can, line), true
|
||||
var line = can.onaction.selectLine(can)+can.current.window()-3-can.current.scroll()
|
||||
return can.current.scroll(line), can.onaction.selectLine(can, line), true
|
||||
}),
|
||||
b: shy("向上翻页", function(event, can, target, count) {
|
||||
var line = can.onaction.selectLine(event, can)-can.current.window()+3
|
||||
return can.current.scroll(line), can.onaction.selectLine(event, can, line), true
|
||||
var line = can.onaction.selectLine(can)-can.current.window()+3
|
||||
return can.current.scroll(line), can.onaction.selectLine(can, line), true
|
||||
}),
|
||||
},
|
||||
normal: {
|
||||
Escape: shy("切换模式", function(event, can) { can.onkeymap._plugin(event, can) }),
|
||||
ArrowLeft: shy("光标左移", function(event, can, target) { can.onkeymap.cursorMove(can, target, -1) }),
|
||||
ArrowRight: shy("光标右移", function(event, can, target) { can.onkeymap.cursorMove(can, target, 1) }),
|
||||
ArrowDown: shy("光标下移", function(event, can) { can.onaction.selectLine(event, can, can.current.next()) }),
|
||||
ArrowUp: shy("光标上移", function(event, can) { can.onaction.selectLine(event, can, can.current.prev()) }),
|
||||
ArrowDown: shy("光标下移", function(event, can) { can.onaction.selectLine(can, can.current.next()) }),
|
||||
ArrowUp: shy("光标上移", function(event, can) { can.onaction.selectLine(can, can.current.prev()) }),
|
||||
|
||||
s: shy("保存文件", function(event, can) { can.onaction.save(event, can, nfs.SAVE) }),
|
||||
c: shy("编译项目", function(event, can) { can.onaction.compile(event, can, code.COMPILE) }),
|
||||
@ -162,14 +161,14 @@ Volcanos(chat.ONKEYMAP, {help: "键盘交互",
|
||||
l: shy("光标右移", function(event, can, target) { can.onkeymap.cursorMove(can, target, 1) }),
|
||||
L: shy("跳到行尾", function(event, can, target) { can.onkeymap.cursorMove(can, target, 0, -1) }),
|
||||
j: shy("光标下移", function(event, can) {
|
||||
can.onaction.selectLine(event, can, can.current.next())
|
||||
can.onaction.selectLine(can, can.current.next())
|
||||
}),
|
||||
k: shy("光标上移", function(event, can) {
|
||||
can.onaction.selectLine(event, can, can.current.prev())
|
||||
can.onaction.selectLine(can, can.current.prev())
|
||||
}),
|
||||
|
||||
gg: shy("跳到某行", function(event, can, target, count) { return can.onaction.selectLine(event, can, count), true }),
|
||||
G: shy("跳到某行", function(event, can, target, count) { return can.onaction.selectLine(event, can, count = count>1? count: can.max), true }),
|
||||
gg: shy("跳到某行", function(event, can, target, count) { return can.onaction.selectLine(can, count), true }),
|
||||
G: shy("跳到某行", function(event, can, target, count) { return can.onaction.selectLine(can, count = count>1? count: can.max), true }),
|
||||
zt: shy("将当前行拉到屏幕最上", function(event, can, target, count) { return can.current.scroll(can.current.scroll()-(count>1? count: 3)), true }),
|
||||
zz: shy("将当前行拉到屏幕中间", function(event, can, target, count) { return can.current.scroll(can.current.scroll()-(count = count>1? count: can.current.window()/2)), true }),
|
||||
zb: shy("将当前行拉到屏幕最下", function(event, can, target, count) { return can.current.scroll(can.current.scroll()-can.current.window()+(count>1? count: 5)), true }),
|
||||
@ -180,29 +179,29 @@ Volcanos(chat.ONKEYMAP, {help: "键盘交互",
|
||||
A: shy("插入行尾", function(event, can, target) { can.onkeymap._insert(event, can), can.onkeymap.cursorMove(can, target, 0, -1) }),
|
||||
o: shy("插入下一行", function(event, can) { var text = can.current.text()
|
||||
text = text.substr(0, text.indexOf(text.trimLeft()))+(text.endsWith("{")?"\t":"")
|
||||
can.onkeymap._insert(event, can), can.onaction.selectLine(event, can, can.onaction.insertLine(can, text, can.current.next()))
|
||||
can.onkeymap._insert(event, can), can.onaction.selectLine(can, can.onaction.insertLine(can, text, can.current.next()))
|
||||
can.onkeymap.cursorMove(can, can.ui.current, 1000)
|
||||
}),
|
||||
O: shy("插入上一行", function(event, can) { var text = can.current.text()
|
||||
text = text.substr(0, text.indexOf(text.trimLeft()))+(text.endsWith("}")?"\t":"")
|
||||
can.onkeymap._insert(event, can), can.onaction.selectLine(event, can, can.onaction.insertLine(can, text, can.current.line))
|
||||
can.onkeymap._insert(event, can), can.onaction.selectLine(can, can.onaction.insertLine(can, text, can.current.line))
|
||||
can.onkeymap.cursorMove(can, can.ui.current, 1000)
|
||||
}),
|
||||
|
||||
yy: shy("复制当前行", function(event, can, target, count) { can._last_text = can.current.text() }),
|
||||
dd: shy("剪切当前行", function(event, can, target, count) { var text = can.current.text(), line = can.onaction._getLineno(can, can.current.line)
|
||||
can._last_text = can.current.text(), can.onaction.selectLine(event, can, can.onaction.deleteLine(can, can.current.line))
|
||||
can.undo.push(function() { can.onaction.insertLine(can, text, line), can.onaction.selectLine(event, can, line) })
|
||||
can._last_text = can.current.text(), can.onaction.selectLine(can, can.onaction.deleteLine(can, can.current.line))
|
||||
can.undo.push(function() { can.onaction.insertLine(can, text, line), can.onaction.selectLine(can, line) })
|
||||
var callee = arguments.callee
|
||||
can.redo.push(function() { callee(event, can, target, count) })
|
||||
}),
|
||||
p: shy("粘贴", function(event, can) {
|
||||
var line = can.onaction.insertLine(can, can._last_text, can.current.next())
|
||||
can.undo.push(function() { can.onaction.deleteLine(can, line), can.onaction.selectLine(event, can, line-1) })
|
||||
can.undo.push(function() { can.onaction.deleteLine(can, line), can.onaction.selectLine(can, line-1) })
|
||||
}),
|
||||
P: shy("粘贴", function(event, can) {
|
||||
var line = can.onaction.insertLine(can, can._last_text, can.current.line)
|
||||
can.undo.push(function() { can.onaction.deleteLine(can, line), can.onaction.selectLine(event, can, line+1) })
|
||||
can.undo.push(function() { can.onaction.deleteLine(can, line), can.onaction.selectLine(can, line+1) })
|
||||
}),
|
||||
},
|
||||
insert: {
|
||||
@ -218,7 +217,7 @@ Volcanos(chat.ONKEYMAP, {help: "键盘交互",
|
||||
can.onkeymap.prevent(event)
|
||||
|
||||
var rest = can.current.text()
|
||||
can.onaction.selectLine(event, can, can.current.prev())
|
||||
can.onaction.selectLine(can, can.current.prev())
|
||||
can.onaction.deleteLine(can, can.current.next())
|
||||
var pos = can.current.text().length
|
||||
|
||||
@ -234,14 +233,14 @@ Volcanos(chat.ONKEYMAP, {help: "键盘交互",
|
||||
if (text.endsWith("`") && can.base.count(text, "`")%2==1) { can.onaction.insertLine(can, left+"`", can.current.next()) }
|
||||
|
||||
var line = can.onaction.insertLine(can, left+rest.trimLeft(), can.current.next())
|
||||
can.current.text(text.trimRight()||text), can.onaction.selectLine(event, can, line)
|
||||
can.current.text(text.trimRight()||text), can.onaction.selectLine(can, line)
|
||||
can.onkeymap.cursorMove(can, can.ui.current, left.length, 0)
|
||||
}),
|
||||
ArrowUp: shy("光标上移", function(event, can) { if (event.key != "ArrowUp") { return }
|
||||
can.onaction.selectLine(event, can, can.current.prev())
|
||||
can.onaction.selectLine(can, can.current.prev())
|
||||
}),
|
||||
ArrowDown: shy("光标下移", function(event, can) { if (event.key != "ArrowDown") { return }
|
||||
can.onaction.selectLine(event, can, can.current.next())
|
||||
can.onaction.selectLine(can, can.current.next())
|
||||
}),
|
||||
},
|
||||
}, _engine: {},
|
||||
@ -389,10 +388,13 @@ Volcanos(chat.ONACTION, {help: "控件交互",
|
||||
filter()
|
||||
}
|
||||
},
|
||||
_selectLine: function(event, can) { if (!can.current) { return }
|
||||
_selectLine: function(can) { if (!can.current) { return }
|
||||
can.page.Select(can, can.current.line, "td.text", function(td) { var target = can.ui.current; target.value = td.innerText
|
||||
can.current.line.appendChild(target), can.page.style(can, target,
|
||||
html.LEFT, td.offsetLeft-1, html.WIDTH, can.base.Max(can.ui.content.style.width, td.offsetWidth))
|
||||
// can.mode != "insert" && can.onkeymap._insert(event, can)
|
||||
// target.focus(), can.ui.content.scrollLeft -= 10000
|
||||
// return
|
||||
if (event && event.type) {
|
||||
if (event.type == "click" && can.mode != "insert") { can.onkeymap._insert(event, can)
|
||||
can.onmotion.delay(can, function() { can.onaction._complete(event, can) })
|
||||
|
Loading…
x
Reference in New Issue
Block a user