1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-25 16:58:06 +08:00

opt inner.js

This commit is contained in:
IT 老营长 @云轩领航-创始人 2022-01-19 09:42:35 +08:00
parent 0d60be84d0
commit fd95a53b92
3 changed files with 65 additions and 70 deletions

View File

@ -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()

View File

@ -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()}

View File

@ -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) {