1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-26 09:14:06 +08:00
This commit is contained in:
harveyshao 2022-03-07 11:10:46 +08:00
parent d569d76299
commit 8c022446de
3 changed files with 53 additions and 13 deletions

View File

@ -276,7 +276,7 @@ Volcanos("onsyntax", {help: "语法高亮", list: ["keyword", "prefix", "line"],
function wrap(type, str) { return type? '<span class="'+type+'">'+str+'</span>': str } function wrap(type, str) { return type? '<span class="'+type+'">'+str+'</span>': str }
var p = can.onsyntax[can.parse]; if (!p) { return line } p = can.onsyntax[p.link]||p, p.split = p.split||{} var p = can.onsyntax[can.parse]; if (!p) { return line } p = can.onsyntax[p.link]||p, p.split = p.split||{}
p.keyword && (line = can.core.List(can.core.Split(line, p.split.space||ice.SP, 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} item = can.base.isObject(item)? item: {text: item}
var text = item.text; var type = item.keyword||p.keyword[text] var text = item.text; var type = item.keyword||p.keyword[text]
@ -452,6 +452,12 @@ Volcanos("onaction", {help: "控件交互", list: ["搜索", "打开", "添加",
}} }}
]}]); return ui.tr ]}]); return ui.tr
}, },
_getLine: function(can, line) {
return can.page.Select(can, can.ui.content, html.TR, function(item, index, array) { if (item == line || index+1 == line) { return item } })[0]
},
_getLineno: function(can, line) {
return can.page.Select(can, can.ui.content, html.TR, function(item, index, array) { if (item == line || index+1 == line) { return index+1 } })[0]
},
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")) } 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")) }
can.page.Select(can, can.ui.content, html.TR, function(item, index, array) { if (line < 0 || line > array.length) { return } can.page.Select(can, can.ui.content, html.TR, function(item, index, array) { if (line < 0 || line > array.length) { return }
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 }

View File

@ -1,4 +1,5 @@
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, cb, target) { Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, cb, target) {
can.undo = [], can.redo = []
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.page.ClassList.add(can, can._fields, "inner") can.page.ClassList.add(can, can._fields, "inner")
can.onkeymap._build(can), can.onimport._input(can), can.onkeymap._plugin({}, can), can.base.isFunc(cb) && cb(msg) can.onkeymap._build(can), can.onimport._input(can), can.onkeymap._plugin({}, can), can.base.isFunc(cb) && cb(msg)
@ -64,6 +65,16 @@ Volcanos("onkeymap", {help: "键盘交互", list: [],
ArrowDown: function(event, can) { can.onaction.selectLine(event, can, can.current.next()) }, ArrowDown: function(event, can) { can.onaction.selectLine(event, can, can.current.next()) },
ArrowUp: function(event, can) { can.onaction.selectLine(event, can, can.current.prev()) }, ArrowUp: function(event, can) { can.onaction.selectLine(event, can, can.current.prev()) },
".": function(event, can, target) { var cb = can.redo.pop(); cb && cb() },
u: function(event, can, target) { var cb = can.undo.pop(); cb && cb() },
J: function(event, can, target) {
var next = can.current.next(); if (!next) { return }
var line = can.current.line, text = can.current.text()
var rest = can.page.Select(can, next, "td.text")[0].innerText
can.current.text(text.trimRight()+" "+rest.trimLeft()), can.onaction.deleteLine(can, next)
can.undo.push(function() { can.onaction.modifyLine(can, line, text), can.onaction.insertLine(can, rest, line.nextSibling) })
},
H: function(event, can, target) { can.onkeymap.cursorMove(can, target, 0, 0) }, H: function(event, can, target) { can.onkeymap.cursorMove(can, target, 0, 0) },
h: function(event, can, target) { can.onkeymap.cursorMove(can, target, -1) }, h: function(event, can, target) { can.onkeymap.cursorMove(can, target, -1) },
l: function(event, can, target) { can.onkeymap.cursorMove(can, target, 1) }, l: function(event, can, target) { can.onkeymap.cursorMove(can, target, 1) },
@ -81,13 +92,32 @@ Volcanos("onkeymap", {help: "键盘交互", list: [],
I: function(event, can, target) { can.onkeymap._insert(event, can), can.onkeymap.cursorMove(can, target, 0, 0) }, I: function(event, can, target) { can.onkeymap._insert(event, can), can.onkeymap.cursorMove(can, target, 0, 0) },
a: function(event, can, target) { can.onkeymap._insert(event, can), can.onkeymap.cursorMove(can, target, 1) }, a: function(event, can, target) { can.onkeymap._insert(event, can), can.onkeymap.cursorMove(can, target, 1) },
A: function(event, can, target) { can.onkeymap._insert(event, can), can.onkeymap.cursorMove(can, target, 0, -1) }, A: function(event, can, target) { can.onkeymap._insert(event, can), can.onkeymap.cursorMove(can, target, 0, -1) },
o: function(event, can) { can.onkeymap._insert(event, can), can.onaction.selectLine(event, can, can.onaction.insertLine(can, "", can.current.next())) }, o: function(event, can) { var text = can.current.text()
O: function(event, can) { can.onkeymap._insert(event, can), can.onaction.selectLine(event, can, can.onaction.insertLine(can, "", can.current.line)) }, 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.cursorMove(can, can.ui.current, 1000)
},
O: 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.cursorMove(can, can.ui.current, 1000)
},
yy: function(event, can, target, count) { can._last_text = can.current.text() }, yy: function(event, can, target, count) { can._last_text = can.current.text() },
dd: function(event, can, target, count) { can._last_text = can.current.text(), can.onaction.selectLine(event, can, can.onaction.deleteLine(can, can.current.line)) }, dd: function(event, can, target, count) { var text = can.current.text(), line = can.onaction._getLineno(can, can.current.line)
p: function(event, can) { can.onaction.insertLine(can, can._last_text, can.current.next()) }, can._last_text = can.current.text(), can.onaction.selectLine(event, can, can.onaction.deleteLine(can, can.current.line))
P: function(event, can) { can.onaction.insertLine(can, can._last_text, can.current.line) }, can.undo.push(function() { can.onaction.insertLine(can, text, line), can.onaction.selectLine(event, can, line) })
var callee = arguments.callee
can.redo.push(function() { callee(event, can, target, count) })
},
p: 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) })
},
P: 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) })
},
s: function(event, can) { can.onaction.save(event, can) }, s: function(event, can) { can.onaction.save(event, can) },
m: function(event, can) { can.onaction.autogen(event, can, "autogen") }, m: function(event, can) { can.onaction.autogen(event, can, "autogen") },
@ -105,8 +135,11 @@ Volcanos("onkeymap", {help: "键盘交互", list: [],
}, },
Enter: function(event, can, target) { Enter: function(event, can, target) {
var line = can.onaction.insertLine(can, can.onkeymap.deleteText(target, target.selectionEnd), can.current.next()) var rest = can.onkeymap.deleteText(target, target.selectionEnd), text = can.ui.current.value
can.current.text(can.ui.current.value), can.onaction.selectLine(event, can, line) var indent = (text.substr(0, text.indexOf(text.trimLeft()))+(text.endsWith("}")?"\t":""))||(text.trimRight() == ""? text: "")
var line = can.onaction.insertLine(can, indent+rest.trimLeft(), can.current.next())
can.current.text(text.trimRight()||text), can.onaction.selectLine(event, can, line)
can.onkeymap.cursorMove(can, can.ui.current, indent.length, 0)
}, },
Backspace: function(event, can, target) { Backspace: function(event, can, target) {
if (target.selectionStart > 0) { return } if (target.selectionStart > 0) { return }
@ -196,10 +229,10 @@ hi
}, },
insertLine: function(can, value, before) { insertLine: function(can, value, before) {
var line = can.onaction.appendLine(can, value) var line = can.onaction.appendLine(can, value)
before && can.ui.content.insertBefore(line, before) before && can.ui.content.insertBefore(line, can.onaction._getLine(can, before))
return can.onaction.rerankLine(can), line return can.onaction.rerankLine(can), can.onaction._getLineno(can, line)
}, },
deleteLine: function(can, line) { deleteLine: function(can, line) { line = can.onaction._getLine(can, line)
var next = line.nextSibling||line.previousSibling var next = line.nextSibling||line.previousSibling
can.page.Remove(can, line), can.onaction.rerankLine(can) can.page.Remove(can, line), can.onaction.rerankLine(can)
return next return next

View File

@ -399,7 +399,7 @@ function can(tool) {
]}) ]})
} }
try { if (global) { try { if (typeof(global) == lang.OBJECT) {
global.kit = kit, global.ice = ice global.kit = kit, global.ice = ice
global.ctx = ctx, global.cli = cli, global.web = web, global.aaa = aaa global.ctx = ctx, global.cli = cli, global.web = web, global.aaa = aaa
global.mdb = mdb, global.ssh = ssh, global.nfs = nfs, global.tcp = tcp global.mdb = mdb, global.ssh = ssh, global.nfs = nfs, global.tcp = tcp
@ -425,5 +425,6 @@ try { if (global) {
}) })
}) })
}) })
} else {
Volcanos.meta.target = document.body
} } catch (e) { console.log(e) } } } catch (e) { console.log(e) }
try { Volcanos.meta.target = document.body } catch (e) { }