1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-26 09:14: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) { var cb = map && map[event.key.toLowerCase()]; if (can.base.isFunc(cb) && event.key.length > 1) {
repeat(cb, count); return list 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 map = can.onkeymap._engine[mode]||{}; for (var i = list.length-1; i > pre-1; i--) {
var cb = map[list[i]]||{}; switch (typeof cb) { 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) 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) } if (target._keys.length == 0 && target.tagName == "INPUT") { can.onkeymap.prevent(event) }
}, },
DelText: function(target, start, count) { DelText: function(target, start, count) { var end = count? start+count: target.value.length
target.value = target.value.substring(0, start)+target.value.substring(start+(count||target.value.length), 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) target.setSelectionRange(start, start)
return cut
}, },
prevent: function(event) { prevent: function(event) {
event.stopPropagation(), event.preventDefault() event.stopPropagation(), event.preventDefault()

View File

@ -72,7 +72,6 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, cb, target
}, true) }, true)
}, },
tabview: function(can, path, file, line, cb) { var key = path+ice.DF+file 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) 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._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}) 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 return can.onimport.layout(can), can.file
}, can.ui.content, can.ui.profile_output, can.ui.display_output)) { }, 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)) { 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) { 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.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) { 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())) init(p = can.onsyntax[can.parse] = can.base.Obj(msg.Result()))
@ -333,17 +332,17 @@ Volcanos("onaction", {help: "控件交互", list: ["搜索", "打开", "添加",
can.Status("跳转数", can.history.length) 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) { appendLine: function(can, value) {
var ui = can.page.Append(can, can.ui.content, [{type: html.TR, list: [ var ui = can.page.Append(can, can.ui.content, [{type: html.TR, list: [
{view: ["line unselectable", html.TD, ++can.max], onclick: function(event) { {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) { }, ondblclick: function(event) {
can.onaction.favorLine(can, ui.text.innerText) can.onaction.favorLine(can, ui.text.innerText)
}}, }},
{view: [html.TEXT, html.TD], list: [can.onsyntax._parse(can, value)], onclick: function(event) { {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) { }, ondblclick: function(event) {
var s = document.getSelection().toString(), str = ui.text.innerText var s = document.getSelection().toString(), str = ui.text.innerText
@ -359,7 +358,7 @@ Volcanos("onaction", {help: "控件交互", list: ["搜索", "打开", "添加",
}} }}
]}]); return ui.tr ]}]); 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) { 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 } 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)))) 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.base.isObject(line) && can.page.Select(can, line, "td.text", function(item) {
can.current = { can.current = {
scroll: function(x, y) { can.ui.content.scrollLeft += x, can.ui.content.scrollTop += y }, scroll: function(count) { if (count) { can.ui.content.scrollTop += count*can.current.line.offsetHeight }
window: function() { return can.ui.content.offsetHeight }, return (can.current.line.offsetTop-can.ui.content.scrollTop)/can.current.line.offsetHeight
offset: function() { return can.ui.content.scrollTop }, },
height: function() { return line.offsetHeight }, window: function() { return can.ui.content.offsetHeight/can.current.line.offsetHeight },
prev: function() { return line.previousSibling }, prev: function() { return line.previousSibling },
next: function() { return line.nextSibling }, next: function() { return line.nextSibling },
@ -379,11 +378,14 @@ Volcanos("onaction", {help: "控件交互", list: ["搜索", "打开", "添加",
}, },
} }
var offhead = 5, size = 20 if (!event) {
var pos = can.current.line.offsetTop-can.current.offset(); if (pos < offhead*20) { var scroll = can.current.scroll(); if (scroll < 5) { can.current.scroll(scroll-5) } else {
can.current.scroll(0, pos-offhead*size) var window = can.current.window(); if (scroll > window/2) { can.current.scroll(scroll-window/2) }
} else if (pos > can.current.window()/2) { }
can.current.scroll(0, pos-can.current.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()} 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) { Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, cb, target) {
can.require(["inner.js"], function(can) { can.onimport.inner_init(can, msg, function() { 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) { }, target) }, function(can, name, sub) {
name == chat.ONIMPORT && (can.onimport.inner_init = sub._init) name == chat.ONIMPORT && (can.onimport.inner_init = sub._init)
name == chat.ONKEYMAP && (can.base.Copy(can.onkeymap._mode, sub._mode)) 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, [ can.ui.current = can.page.Append(can, can.ui.content.parentNode, [
{view: ["current", html.INPUT], onkeydown: function(event) { if (event.metaKey) { return } {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._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) can.mode == "normal" && can.onkeymap.prevent(event)
}, onclick: function(event) { can.onkeymap._insert(event, can) }}, }, onclick: function(event) { can.onkeymap._insert(event, can) }},
]).first ]).first
@ -18,47 +19,42 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
}, [""]) }, [""])
Volcanos("onkeymap", {help: "键盘交互", list: [], Volcanos("onkeymap", {help: "键盘交互", list: [],
_model: function(can, value) { can.Status("模式", can.mode = value) _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 return can.page.Modify(can, can.ui.current, {className: "current"+ice.SP+can.mode}), value
}, },
_command: function(can) { can.onkeymap._model(can, "command") _command: function(can) { can.onkeymap._model(can, "command")
can.ui.current.blur() can.ui.current.blur()
}, },
_normal: function(can) { can.onkeymap._model(can, "normal") _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") _insert: function(event, can) { can.onkeymap._model(can, "insert")
can.ui.current.focus(), can.onkeymap.prevent(event) can.ui.current.focus(), can.ui.content.scrollLeft -= 10000
can.ui.content.scrollLeft -= 100 can.onkeymap.prevent(event)
}, },
_mode: { _mode: {
normal: { normal: {
jk: function(event, can, target) { can.onkeymap._command(can) },
escape: function(event, can) { 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, 0, 0) },
h: function(event, can, target) { can.onaction.cursorMove(can, target, -1) }, 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, 1) },
L: function(event, can, target) { can.onaction.cursorMove(can, target, 0, -1) }, L: function(event, can, target) { can.onaction.cursorMove(can, target, 0, -1) },
j: function(event, can) { can.onaction.selectLine(can, can.current.next()) }, j: function(event, can) { can.onaction.selectLine(event, can, can.current.next()) },
k: function(event, can) { can.onaction.selectLine(can, can.current.prev()) }, 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 }, 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(can, count = count > 1? count: can.max), 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) { count = count||2
var pos = can.current.offset()-target.offsetTop zt: function(event, can, target, count) {
can.current.scroll(0, -(pos+can.current.height()*count)) return can.current.scroll(can.current.scroll()-(count>1? count: 3)), true
return true
}, },
zz: function(event, can, target, count) { count = count||5 zz: function(event, can, target, count) {
var pos = can.current.offset()-target.offsetTop return can.current.scroll(can.current.scroll()-(count = count>1? count: can.current.window()/2)), true
can.current.scroll(0, -(pos+can.current.height()*count))
return true
}, },
zb: function(event, can, target, count) { count = count||3 zb: function(event, can, target, count) {
var pos = can.current.offset()-target.offsetTop return can.current.scroll(can.current.scroll()-can.current.window()+(count>1? count: 5)), true
can.current.scroll(0, -(pos+can.current.window()-can.current.height()*count))
return true
}, },
i: function(event, can) { can.onkeymap._insert(event, can) }, i: function(event, can) { can.onkeymap._insert(event, can) },
@ -72,56 +68,44 @@ Volcanos("onkeymap", {help: "键盘交互", list: [],
can.onaction.cursorMove(can, target, 0, -1) can.onaction.cursorMove(can, target, 0, -1)
}, },
o: function(event, can) { can.onkeymap._insert(event, can) o: function(event, can) { can.onkeymap._insert(event, can)
can.onaction.selectLine(can, can.onaction.insertLine(can, "", can.current.next())) can.onaction.selectLine(event, can, can.onaction.insertLine(can, "", can.current.next()))
can.onkeymap._insert(event, can)
}, },
O: function(event, can) { can.onkeymap._insert(event, can) O: function(event, can) { can.onkeymap._insert(event, can)
can.onaction.selectLine(can, can.onaction.insertLine(can, "", can.current.line)) can.onaction.selectLine(event, can, can.onaction.insertLine(can, "", can.current.line))
can.onkeymap._insert(event, can)
}, },
yy: function(event, can) { can._last_text = can.current.text() }, yy: function(event, can) { can._last_text = can.current.text() },
dd: function(event, can) { can._last_text = can.current.text() dd: function(event, can) { can._last_text = can.current.text()
var next = can.current.next() var next = can.current.next(); can.onaction.deleteLine(can, can.current.line)
can.onaction.deleteLine(can, can.current.line) can.onaction.selectLine(event, can, next)
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)
}, },
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: { 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.onkeymap.DelText(target, target.selectionStart-1, 1)
can.current.text(can.ui.current.value)
}, },
escape: function(event, can) { can.onkeymap._normal(can) }, Escape: function(event, can) { can.onkeymap._normal(can) },
enter: function(event, can, target) { Enter: function(event, can, target) {
var left = target.value.slice(event.target.selectionEnd) can.onaction.selectLine(event, can, can.onaction.insertLine(can, can.onkeymap.DelText(target, target.selectionEnd), can.current.next()))
can.current.text(target.value.slice(0, event.target.selectionEnd)||"")
can.onaction.selectLine(can, can.onaction.insertLine(can, left, can.current.next()))
}, },
backspace: function(event, can, target) { Backspace: function(event, can, target) {
if (target.selectionStart > 0) { return } if (target.selectionStart > 0) { return }
can.onkeymap.prevent(event)
if (!can.current.prev()) { return } if (!can.current.prev()) { return }
can.onkeymap.prevent(event)
var rest = can.current.text() 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()) can.onaction.deleteLine(can, can.current.next())
var pos = can.current.text().length var pos = can.current.text().length
can.ui.current.value = can.current.text()+rest can.ui.current.value = can.current.text()+rest
can.onaction.cursorMove(can, can.ui.current, 0, pos) can.onaction.cursorMove(can, can.ui.current, 0, pos)
}, },
arrowdown: function(event, can) { ArrowDown: function(event, can) { can.onaction.selectLine(event, can, can.current.next()) },
can.onaction.selectLine(can, can.current.next()) ArrowUp: function(event, can) { can.onaction.selectLine(event, can, can.current.prev()) },
},
arrowup: function(event, can) {
can.onaction.selectLine(can, can.current.prev())
},
}, },
}, _engine: {}, }, _engine: {},
}) })
@ -135,8 +119,10 @@ Volcanos("onaction", {help: "控件交互", list: [nfs.SAVE],
_selectLine: function(event, can) { _selectLine: function(event, can) {
can.page.Select(can, can.current.line, "td.text", function(td) { can.current.line.appendChild(can.ui.current) 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.page.Modify(can, can.ui.current, {style: kit.Dict(html.LEFT, td.offsetLeft-1, html.WIDTH,td.offsetWidth-12), value: td.innerText})
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.current.focus(), can.onaction.cursorMove(can, can.ui.current, 0, (event.offsetX)/13-1)
can.ui.content.scrollLeft -= td.offsetLeft can.ui.content.scrollLeft -= td.offsetLeft
}
}) })
}, },
insertLine: function(can, value, before) { insertLine: function(can, value, before) {