mirror of
https://shylinux.com/x/volcanos
synced 2025-04-25 16:58:06 +08:00
opt inner.js
This commit is contained in:
parent
0d60be84d0
commit
fd95a53b92
11
frame.js
11
frame.js
@ -861,6 +861,11 @@ Volcanos("onkeymap", {help: "键盘交互", list: [], _focus: [], _init: functio
|
||||
var cb = map && map[event.key.toLowerCase()]; if (can.base.isFunc(cb) && event.key.length > 1) {
|
||||
repeat(cb, count); return list
|
||||
}
|
||||
var map = can.onkeymap._mode[mode]
|
||||
var cb = map && map[event.key]; if (can.base.isFunc(cb) && event.key.length > 1) {
|
||||
repeat(cb, count); return list
|
||||
}
|
||||
|
||||
|
||||
var map = can.onkeymap._engine[mode]||{}; for (var i = list.length-1; i > pre-1; i--) {
|
||||
var cb = map[list[i]]||{}; switch (typeof cb) {
|
||||
@ -947,9 +952,11 @@ Volcanos("onkeymap", {help: "键盘交互", list: [], _focus: [], _init: functio
|
||||
target._keys = can.onkeymap._parse(event, can, event.ctrlKey? "insert_ctrl": mdb.INSERT, target._keys||[], target)
|
||||
if (target._keys.length == 0 && target.tagName == "INPUT") { can.onkeymap.prevent(event) }
|
||||
},
|
||||
DelText: function(target, start, count) {
|
||||
target.value = target.value.substring(0, start)+target.value.substring(start+(count||target.value.length), target.value.length)
|
||||
DelText: function(target, start, count) { var end = count? start+count: target.value.length
|
||||
var cut = target.value.slice(start, end)
|
||||
target.value = target.value.substring(0, start)+target.value.substring(end, target.value.length)
|
||||
target.setSelectionRange(start, start)
|
||||
return cut
|
||||
},
|
||||
prevent: function(event) {
|
||||
event.stopPropagation(), event.preventDefault()
|
||||
|
@ -72,7 +72,6 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, cb, target
|
||||
}, true)
|
||||
},
|
||||
tabview: function(can, path, file, line, cb) { var key = path+ice.DF+file
|
||||
can.onkeymap._command(can)
|
||||
if (can.tabview[key]) { can.user.mod.isCmd && can.user.title(path+file)
|
||||
can._msg && can._msg.Option(nfs.LINE, can.Option(nfs.LINE)), can._msg = can.tabview[key]
|
||||
can.Option({path: path, file: file, line: line||can._msg.Option(nfs.LINE)||1})
|
||||
@ -180,7 +179,7 @@ Volcanos("onsyntax", {help: "语法高亮", list: ["keyword", "prefix", "line"],
|
||||
})
|
||||
return can.onimport.layout(can), can.file
|
||||
}, can.ui.content, can.ui.profile_output, can.ui.display_output)) {
|
||||
return can.onaction.selectLine(can, msg.Option(nfs.LINE)), can.base.isFunc(cb) && cb()
|
||||
return can.onaction.selectLine(null, can, msg.Option(nfs.LINE)), can.base.isFunc(cb) && cb()
|
||||
}
|
||||
|
||||
if (msg.Option(ctx.INDEX)) {
|
||||
@ -194,7 +193,7 @@ Volcanos("onsyntax", {help: "语法高亮", list: ["keyword", "prefix", "line"],
|
||||
|
||||
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(can, msg.Option(nfs.LINE)), can.base.isFunc(cb) && cb() }
|
||||
}), can.onaction.selectLine(null, can, msg.Option(nfs.LINE)), can.base.isFunc(cb) && cb() }
|
||||
|
||||
var p = can.onsyntax[can.parse]; !p? can.run({}, [ctx.ACTION, mdb.PLUGIN, can.parse, msg.Option(nfs.FILE), msg.Option(nfs.PATH)], function(msg) {
|
||||
init(p = can.onsyntax[can.parse] = can.base.Obj(msg.Result()))
|
||||
@ -333,17 +332,17 @@ Volcanos("onaction", {help: "控件交互", list: ["搜索", "打开", "添加",
|
||||
can.Status("跳转数", can.history.length)
|
||||
},
|
||||
|
||||
scrollLine: function(can, count) { var size = 20; can.current.scroll(0, count*size) },
|
||||
scrollLine: function(can, count) { var size = 20; can.current.scroll(count*size) },
|
||||
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(can, ui.tr)
|
||||
can.onaction.selectLine(event, can, ui.tr)
|
||||
}, ondblclick: function(event) {
|
||||
can.onaction.favorLine(can, ui.text.innerText)
|
||||
}},
|
||||
|
||||
{view: [html.TEXT, html.TD], list: [can.onsyntax._parse(can, value)], onclick: function(event) {
|
||||
can.onaction.selectLine(can, ui.tr)
|
||||
can.onaction.selectLine(event, can, ui.tr)
|
||||
|
||||
}, ondblclick: function(event) {
|
||||
var s = document.getSelection().toString(), str = ui.text.innerText
|
||||
@ -359,7 +358,7 @@ Volcanos("onaction", {help: "控件交互", list: ["搜索", "打开", "添加",
|
||||
}}
|
||||
]}]); return ui.tr
|
||||
},
|
||||
selectLine: function(can, line) { if (!line) { return }
|
||||
selectLine: function(event, can, line) { if (!line) { return }
|
||||
can.page.Select(can, can.ui.content, html.TR, function(item, index) {
|
||||
if (!can.page.ClassList.set(can, item, html.SELECT, item == line || index+1 == line)) { return }
|
||||
line = item, can.Status(kit.Dict("文件名", can.file, "解析器", can.parse, "当前行", can.onexport.position(can, can.Option(nfs.LINE, index+1))))
|
||||
@ -367,10 +366,10 @@ Volcanos("onaction", {help: "控件交互", list: ["搜索", "打开", "添加",
|
||||
|
||||
can.base.isObject(line) && can.page.Select(can, line, "td.text", function(item) {
|
||||
can.current = {
|
||||
scroll: function(x, y) { can.ui.content.scrollLeft += x, can.ui.content.scrollTop += y },
|
||||
window: function() { return can.ui.content.offsetHeight },
|
||||
offset: function() { return can.ui.content.scrollTop },
|
||||
height: function() { return line.offsetHeight },
|
||||
scroll: function(count) { if (count) { can.ui.content.scrollTop += count*can.current.line.offsetHeight }
|
||||
return (can.current.line.offsetTop-can.ui.content.scrollTop)/can.current.line.offsetHeight
|
||||
},
|
||||
window: function() { return can.ui.content.offsetHeight/can.current.line.offsetHeight },
|
||||
|
||||
prev: function() { return line.previousSibling },
|
||||
next: function() { return line.nextSibling },
|
||||
@ -379,11 +378,14 @@ Volcanos("onaction", {help: "控件交互", list: ["搜索", "打开", "添加",
|
||||
},
|
||||
}
|
||||
|
||||
var offhead = 5, size = 20
|
||||
var pos = can.current.line.offsetTop-can.current.offset(); if (pos < offhead*20) {
|
||||
can.current.scroll(0, pos-offhead*size)
|
||||
} else if (pos > can.current.window()/2) {
|
||||
can.current.scroll(0, pos-can.current.window()/2)
|
||||
if (!event) {
|
||||
var scroll = can.current.scroll(); if (scroll < 5) { can.current.scroll(scroll-5) } else {
|
||||
var window = can.current.window(); if (scroll > window/2) { can.current.scroll(scroll-window/2) }
|
||||
}
|
||||
} else {
|
||||
var scroll = can.current.scroll(); if (scroll < 3) { can.current.scroll(scroll-3) } else {
|
||||
var window = can.current.window(); if (scroll > window-4) { can.current.scroll(scroll-window+4) }
|
||||
}
|
||||
}
|
||||
|
||||
var push = {path: can.Option(nfs.PATH), file: can.Option(nfs.FILE), line: can.Option(nfs.LINE), text: can.current.text()}
|
||||
|
@ -1,6 +1,6 @@
|
||||
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, cb, target) {
|
||||
can.require(["inner.js"], function(can) { can.onimport.inner_init(can, msg, function() {
|
||||
can.onkeymap._build(can), can.onimport._input(can), can.onkeymap._normal(can), can.base.isFunc(cb) && cb(msg)
|
||||
can.onkeymap._build(can), can.onimport._input(can), can.onkeymap._command(can), can.base.isFunc(cb) && cb(msg)
|
||||
}, target) }, function(can, name, sub) {
|
||||
name == chat.ONIMPORT && (can.onimport.inner_init = sub._init)
|
||||
name == chat.ONKEYMAP && (can.base.Copy(can.onkeymap._mode, sub._mode))
|
||||
@ -10,7 +10,8 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
||||
can.ui.current = can.page.Append(can, can.ui.content.parentNode, [
|
||||
{view: ["current", html.INPUT], onkeydown: function(event) { if (event.metaKey) { return }
|
||||
can._keylist = can.onkeymap._parse(event, can, can.mode, can._keylist, can.ui.current)
|
||||
can.mode != "command" && can.core.Timer(10, function() { can.current.text(can.ui.current.value) })
|
||||
can.mode == "insert" && can.core.Timer(10, function() { can.current.text(can.ui.current.value) })
|
||||
can.mode == "normal" && can.Status("按键", can._keylist.join(""))
|
||||
can.mode == "normal" && can.onkeymap.prevent(event)
|
||||
}, onclick: function(event) { can.onkeymap._insert(event, can) }},
|
||||
]).first
|
||||
@ -18,47 +19,42 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
||||
}, [""])
|
||||
Volcanos("onkeymap", {help: "键盘交互", list: [],
|
||||
_model: function(can, value) { can.Status("模式", can.mode = value)
|
||||
can.current && (can.ui.current.value = can.current.text())
|
||||
return can.page.Modify(can, can.ui.current, {className: "current"+ice.SP+can.mode}), value
|
||||
},
|
||||
_command: function(can) { can.onkeymap._model(can, "command")
|
||||
can.ui.current.blur()
|
||||
},
|
||||
_normal: function(can) { can.onkeymap._model(can, "normal")
|
||||
can.ui.current.focus()
|
||||
can.ui.current.focus(), can.ui.content.scrollLeft -= 10000
|
||||
},
|
||||
_insert: function(event, can) { can.onkeymap._model(can, "insert")
|
||||
can.ui.current.focus(), can.onkeymap.prevent(event)
|
||||
can.ui.content.scrollLeft -= 100
|
||||
can.ui.current.focus(), can.ui.content.scrollLeft -= 10000
|
||||
can.onkeymap.prevent(event)
|
||||
},
|
||||
|
||||
_mode: {
|
||||
normal: {
|
||||
jk: function(event, can, target) { can.onkeymap._command(can) },
|
||||
escape: function(event, can) { can.onkeymap._command(can) },
|
||||
|
||||
H: function(event, can, target) { can.onaction.cursorMove(can, target, 0, 0) },
|
||||
h: function(event, can, target) { can.onaction.cursorMove(can, target, -1) },
|
||||
l: function(event, can, target) { can.onaction.cursorMove(can, target, 1) },
|
||||
L: function(event, can, target) { can.onaction.cursorMove(can, target, 0, -1) },
|
||||
j: function(event, can) { can.onaction.selectLine(can, can.current.next()) },
|
||||
k: function(event, can) { can.onaction.selectLine(can, can.current.prev()) },
|
||||
j: function(event, can) { can.onaction.selectLine(event, can, can.current.next()) },
|
||||
k: function(event, can) { can.onaction.selectLine(event, can, can.current.prev()) },
|
||||
|
||||
gg: function(event, can, target, count) { return can.onaction.selectLine(can, count||1), true },
|
||||
G: function(event, can, target, count) { return can.onaction.selectLine(can, count = count > 1? count: can.max), true },
|
||||
zt: function(event, can, target, count) { count = count||2
|
||||
var pos = can.current.offset()-target.offsetTop
|
||||
can.current.scroll(0, -(pos+can.current.height()*count))
|
||||
return true
|
||||
gg: function(event, can, target, count) { return can.onaction.selectLine(event, can, count||1), true },
|
||||
G: function(event, can, target, count) { return can.onaction.selectLine(event, can, count = count>1? count: can.max), true },
|
||||
|
||||
zt: function(event, can, target, count) {
|
||||
return can.current.scroll(can.current.scroll()-(count>1? count: 3)), true
|
||||
},
|
||||
zz: function(event, can, target, count) { count = count||5
|
||||
var pos = can.current.offset()-target.offsetTop
|
||||
can.current.scroll(0, -(pos+can.current.height()*count))
|
||||
return true
|
||||
zz: function(event, can, target, count) {
|
||||
return can.current.scroll(can.current.scroll()-(count = count>1? count: can.current.window()/2)), true
|
||||
},
|
||||
zb: function(event, can, target, count) { count = count||3
|
||||
var pos = can.current.offset()-target.offsetTop
|
||||
can.current.scroll(0, -(pos+can.current.window()-can.current.height()*count))
|
||||
return true
|
||||
zb: function(event, can, target, count) {
|
||||
return can.current.scroll(can.current.scroll()-can.current.window()+(count>1? count: 5)), true
|
||||
},
|
||||
|
||||
i: function(event, can) { can.onkeymap._insert(event, can) },
|
||||
@ -72,56 +68,44 @@ Volcanos("onkeymap", {help: "键盘交互", list: [],
|
||||
can.onaction.cursorMove(can, target, 0, -1)
|
||||
},
|
||||
o: function(event, can) { can.onkeymap._insert(event, can)
|
||||
can.onaction.selectLine(can, can.onaction.insertLine(can, "", can.current.next()))
|
||||
can.onkeymap._insert(event, can)
|
||||
can.onaction.selectLine(event, can, can.onaction.insertLine(can, "", can.current.next()))
|
||||
},
|
||||
O: function(event, can) { can.onkeymap._insert(event, can)
|
||||
can.onaction.selectLine(can, can.onaction.insertLine(can, "", can.current.line))
|
||||
can.onkeymap._insert(event, can)
|
||||
can.onaction.selectLine(event, can, can.onaction.insertLine(can, "", can.current.line))
|
||||
},
|
||||
|
||||
yy: function(event, can) { can._last_text = can.current.text() },
|
||||
dd: function(event, can) { can._last_text = can.current.text()
|
||||
var next = can.current.next()
|
||||
can.onaction.deleteLine(can, can.current.line)
|
||||
can.onaction.selectLine(can, next)
|
||||
},
|
||||
p: function(event, can) {
|
||||
can.onaction.insertLine(can, can._last_text, can.current.next())
|
||||
},
|
||||
P: function(event, can) {
|
||||
can.onaction.insertLine(can, can._last_text, can.current.line)
|
||||
var next = can.current.next(); can.onaction.deleteLine(can, can.current.line)
|
||||
can.onaction.selectLine(event, can, next)
|
||||
},
|
||||
p: function(event, can) { can.onaction.insertLine(can, can._last_text, can.current.next()) },
|
||||
P: function(event, can) { can.onaction.insertLine(can, can._last_text, can.current.line) },
|
||||
},
|
||||
insert: {
|
||||
jk: function(event, can, target) { can.onkeymap._normal(can)
|
||||
jk: function(event, can, target) { can.onkeymap._normal(can),
|
||||
can.onkeymap.DelText(target, target.selectionStart-1, 1)
|
||||
can.current.text(can.ui.current.value)
|
||||
},
|
||||
escape: function(event, can) { can.onkeymap._normal(can) },
|
||||
enter: function(event, can, target) {
|
||||
var left = target.value.slice(event.target.selectionEnd)
|
||||
can.current.text(target.value.slice(0, event.target.selectionEnd)||"")
|
||||
can.onaction.selectLine(can, can.onaction.insertLine(can, left, can.current.next()))
|
||||
Escape: function(event, can) { can.onkeymap._normal(can) },
|
||||
Enter: function(event, can, target) {
|
||||
can.onaction.selectLine(event, can, can.onaction.insertLine(can, can.onkeymap.DelText(target, target.selectionEnd), can.current.next()))
|
||||
},
|
||||
backspace: function(event, can, target) {
|
||||
Backspace: function(event, can, target) {
|
||||
if (target.selectionStart > 0) { return }
|
||||
can.onkeymap.prevent(event)
|
||||
if (!can.current.prev()) { return }
|
||||
can.onkeymap.prevent(event)
|
||||
|
||||
var rest = can.current.text()
|
||||
can.onaction.selectLine(can, can.current.prev())
|
||||
can.onaction.selectLine(event, can, can.current.prev())
|
||||
can.onaction.deleteLine(can, can.current.next())
|
||||
var pos = can.current.text().length
|
||||
|
||||
can.ui.current.value = can.current.text()+rest
|
||||
can.onaction.cursorMove(can, can.ui.current, 0, pos)
|
||||
},
|
||||
arrowdown: function(event, can) {
|
||||
can.onaction.selectLine(can, can.current.next())
|
||||
},
|
||||
arrowup: function(event, can) {
|
||||
can.onaction.selectLine(can, can.current.prev())
|
||||
},
|
||||
ArrowDown: function(event, can) { can.onaction.selectLine(event, can, can.current.next()) },
|
||||
ArrowUp: function(event, can) { can.onaction.selectLine(event, can, can.current.prev()) },
|
||||
},
|
||||
}, _engine: {},
|
||||
})
|
||||
@ -135,8 +119,10 @@ Volcanos("onaction", {help: "控件交互", list: [nfs.SAVE],
|
||||
_selectLine: function(event, can) {
|
||||
can.page.Select(can, can.current.line, "td.text", function(td) { can.current.line.appendChild(can.ui.current)
|
||||
can.page.Modify(can, can.ui.current, {style: kit.Dict(html.LEFT, td.offsetLeft-1, html.WIDTH,td.offsetWidth-12), value: td.innerText})
|
||||
can.ui.current.focus(), can.onaction.cursorMove(can, can.ui.current, 0, (event.offsetX)/13-1)
|
||||
can.ui.content.scrollLeft -= td.offsetLeft
|
||||
if (event) { if (can.mode == "command") { can.onkeymap._insert(event, can) }
|
||||
can.ui.current.focus(), can.onaction.cursorMove(can, can.ui.current, 0, (event.offsetX)/13-1)
|
||||
can.ui.content.scrollLeft -= td.offsetLeft
|
||||
}
|
||||
})
|
||||
},
|
||||
insertLine: function(can, value, before) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user