mirror of
https://shylinux.com/x/volcanos
synced 2025-04-26 01:04:06 +08:00
opt vimer
This commit is contained in:
parent
cbada31ea6
commit
6ac30f3b8b
@ -2,8 +2,8 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
||||
can.ui = can.page.Append(can, can._target, [
|
||||
{view: ["content", "div"]}, {view: ["display", "pre"]},
|
||||
])
|
||||
can.onappend.table(can, can.ui.content, "table", msg)
|
||||
can.onappend.board(can, can.ui.display, "board", msg)
|
||||
can.onappend.table(can, msg, can.ui.content, "table")
|
||||
can.onappend.board(can, msg,can.ui.display, "board")
|
||||
var refresh = msg.Option("_refresh") || can.Conf("feature")["_refresh"]
|
||||
refresh && can.Timer(refresh, function() {
|
||||
can.run({})
|
||||
|
8
frame.js
8
frame.js
@ -158,7 +158,7 @@ Volcanos("onengine", {help: "解析引擎", list: [], _init: function(can, meta,
|
||||
"studio": {name: "研发 studio", action: [
|
||||
{name: "route", help: "路由器", index: "web.route"},
|
||||
{name: "tmux", help: "命令行", index: "web.code.tmux.session"},
|
||||
{name: "vimer", help: "编辑器", index: "web.code.inner", args: ["src/", "main.go"]},
|
||||
{name: "vimer", help: "编辑器", index: "web.code.vimer", args: ["src/", "main.go"]},
|
||||
{name: "repos", help: "代码库", index: "web.code.git.status"},
|
||||
{name: "total", help: "统计量", index: "web.code.git.total"},
|
||||
{name: "plan", help: "任务表", index: "web.team.plan"},
|
||||
@ -489,10 +489,10 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
|
||||
item.type == "select" && item.value && (target.value = item.value)
|
||||
return target
|
||||
},
|
||||
table: function(can, target, type, msg, cb) {
|
||||
return can.page.AppendTable(can, target, msg, msg.append, cb)
|
||||
table: function(can, msg, target, type, cb) {
|
||||
return can.page.AppendTable(can, msg, target, msg.append, cb)
|
||||
},
|
||||
board: function(can, target, type, msg, text) { text = text || can.page.Display(msg.Result())
|
||||
board: function(can, msg, target, type, text) { text = text || can.page.Display(msg.Result())
|
||||
return text && can.page.Append(can, target, [{view: ["code", "div", text]}]).code
|
||||
},
|
||||
|
||||
|
@ -192,7 +192,7 @@ var page = Volcanos("page", {help: "网页模块",
|
||||
return status
|
||||
},
|
||||
|
||||
AppendTable: shy("添加表格", function(can, target, msg, list, cb) {
|
||||
AppendTable: shy("添加表格", function(can, msg, target, list, cb) {
|
||||
if (!msg.append || msg.append.length == 0) {return}
|
||||
|
||||
var table = can.page.Append(can, target, "table");
|
||||
|
@ -12,21 +12,21 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, meta,
|
||||
can.run(msg._event, ["search", "River.onexport.key"])
|
||||
|
||||
can.run(msg._event, cmd, function(msg) {
|
||||
can.onappend.table(can, can.ui.content, "table", msg, function(value, key, index, line) {
|
||||
can.onappend.table(can, msg, can.ui.content, "table", function(value, key, index, line) {
|
||||
return {text: [value, "td"], onclick: function(event) {
|
||||
can.Status("index", index)
|
||||
can.Status("value", value)
|
||||
can.run(event, ["render", line.type, line.name, line.text], function(msg) {
|
||||
can.ui.display.innerHTML = ""
|
||||
can.onappend.table(can, can.ui.display, "table", msg)
|
||||
can.onappend.board(can, can.ui.display, "board", msg)
|
||||
can.onappend.table(can, msg, can.ui.display, "table")
|
||||
can.onappend.board(can, msg, can.ui.display, "board")
|
||||
})
|
||||
}}
|
||||
ca.run(event, [""])
|
||||
})
|
||||
|
||||
can.Status("count", msg.append && msg.append[0] && msg[msg.append[0]].length || 0)
|
||||
can.onappend.board(can, can.ui.content, "board", msg)
|
||||
can.onappend.board(can, msg, can.ui.content, "board")
|
||||
})
|
||||
},
|
||||
|
||||
@ -34,7 +34,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, meta,
|
||||
function search(word) { cmd[1] = word || ""
|
||||
var ev = {}; var res = can.request(ev); res.Copy(msg)
|
||||
can.run(ev, cmd, function(res) { can.ui.content.innerHTML = ""
|
||||
can.onappend.table(can, can.ui.content, "table", res, function(value, key, index, line) {
|
||||
can.onappend.table(can, res, can.ui.content, "table", function(value, key, index, line) {
|
||||
can.Status("count", index+1)
|
||||
return {text: [value, "td"], onclick: function(event) {
|
||||
typeof cb == "function" && cb(line)
|
||||
@ -60,7 +60,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, meta,
|
||||
select: function(can, msg, cmd, cb) { can._output.innerHTML = ""
|
||||
function search(word, cb) { cmd[1] = word
|
||||
can.run({}, cmd, function(msg) { can.ui.content.innerHTML = ""
|
||||
can.onappend.table(can, can.ui.content, "table", msg, function(value, key, index, line) {
|
||||
can.onappend.table(can, msg, can.ui.content, "table", function(value, key, index, line) {
|
||||
can.Status("count", index+1)
|
||||
return {text: [value, "td"], onclick: function(event) {
|
||||
can.Status("index", index)
|
||||
|
@ -2,7 +2,7 @@ Volcanos("onfigure", {help: "控件详情", list: [],
|
||||
city: {click: function(event, can, value, cmd, target, figure) {
|
||||
function run() {figure.output.innerHTML = ""
|
||||
can.Run(event, ["action", "input", can.item.name, target.value], function(msg) {
|
||||
can.page.AppendTable(can, figure.output, msg, msg.append, function(event, value, key, index, tr, td) {
|
||||
can.page.AppendTable(can, msg, figure.output, msg.append, function(event, value, key, index, tr, td) {
|
||||
target.value = value; msg.Option("_refresh") && run()
|
||||
})
|
||||
}, true)
|
||||
|
@ -23,7 +23,7 @@ Volcanos("onfigure", {help: "控件详情", list: [], _init: function(can, item,
|
||||
{button: ["关闭", function(event) { can.page.Remove(can, can._figure.fieldset) }]},
|
||||
])
|
||||
|
||||
can.page.AppendTable(can, can._figure.output, msg, msg.append, function(value, key, index, line) {
|
||||
can.page.AppendTable(can, msg, can._figure.output, msg.append, function(value, key, index, line) {
|
||||
return {type: "td", inner: value, onclick: function() {
|
||||
target.value = value; msg.Option("_refresh") && run()
|
||||
can.page.Remove(can, can._figure.fieldset)
|
||||
|
@ -1,3 +1,6 @@
|
||||
fieldset.editor>form.option div.item input.args[name=line] {
|
||||
width:40px;
|
||||
}
|
||||
fieldset.editor>div.action>div.file {
|
||||
border:solid 2px red; padding:2px;
|
||||
float:left; margin:2px 0;
|
||||
@ -7,19 +10,9 @@ fieldset.editor>div.action>div.file.over {
|
||||
background-color:blue;
|
||||
}
|
||||
fieldset.editor>div.action>div.file.select {
|
||||
background-color:green;
|
||||
color:white;
|
||||
}
|
||||
fieldset.editor>form.option div.item input.args[name=line] {
|
||||
width:40px;
|
||||
background-color:green; color:white;
|
||||
}
|
||||
|
||||
body.white fieldset.editor div.output table {
|
||||
background:#0b2c5400;
|
||||
}
|
||||
body.white fieldset.editor div.output table tr {
|
||||
background:#0b2c5400;
|
||||
}
|
||||
fieldset.editor {
|
||||
background:#0b2c54ab;
|
||||
}
|
||||
@ -52,18 +45,13 @@ fieldset.editor>div.output div.project div.item:hover {
|
||||
fieldset.editor>div.output div.project div.list {
|
||||
padding-left:10px;
|
||||
}
|
||||
|
||||
fieldset.editor>div.output div.profile {
|
||||
padding:0; margin:0;
|
||||
position:relative;
|
||||
}
|
||||
|
||||
fieldset.editor>div.output table.content {
|
||||
font-size:16px; font-family:monospace;
|
||||
padding:0; margin:0;
|
||||
}
|
||||
fieldset.editor>div.output table.content tr {
|
||||
padding:0; margin:0;
|
||||
/* background-color:#06062700; */
|
||||
}
|
||||
fieldset.editor>div.output table.content tr.select td.line {
|
||||
background-color:red;
|
||||
@ -104,26 +92,25 @@ fieldset.editor>div.output table.content td.text span.string {
|
||||
color:magenta;
|
||||
}
|
||||
|
||||
fieldset.editor>div.output div.display div.output {
|
||||
overflow:auto;
|
||||
color:white;
|
||||
}
|
||||
|
||||
fieldset.editor>div.output div.search {
|
||||
background-color:#060627ab; color:white;
|
||||
padding:6px; border:solid 1px red;
|
||||
clear:both;
|
||||
color:white;
|
||||
}
|
||||
fieldset.editor>div.output div.search table {
|
||||
color:white;
|
||||
}
|
||||
fieldset.editor>div.output div.search div.tags {
|
||||
height:220px; overflow:auto;
|
||||
text-align:left;
|
||||
text-align:left; overflow:auto;
|
||||
}
|
||||
fieldset.editor>div.output div.search td>div {
|
||||
max-height:100px;
|
||||
overflow:hidden;
|
||||
}
|
||||
|
||||
body.white fieldset.editor div.output table {
|
||||
background:#0b2c5400; color:white;
|
||||
}
|
||||
body.white fieldset.editor div.output table tr {
|
||||
background:#0b2c5400;
|
||||
}
|
||||
body.white fieldset.editor div.output div.search table {
|
||||
background:#0b2c5400; color:white;
|
||||
}
|
||||
|
@ -1,13 +1,11 @@
|
||||
Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb, target) {
|
||||
Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb, target) { if (!msg.cmds) { return }
|
||||
can.ui = can.page.Appends(can, target, [
|
||||
{type: "table", list: [{type: "tr", list: [
|
||||
{type: "td", list: [{view: "project", style: {"max-height": window.innerHeight-300, display: "none"}} ]},
|
||||
{type: "td", list: [{view: "profile", style: {"max-height": window.innerHeight-300}, list: [
|
||||
{view: ["content", "table"]},
|
||||
]} ], style: {"min-width": parseInt(can.Conf("width"))-100, "max-width": parseInt(can.Conf("width"))-60},
|
||||
},
|
||||
]},
|
||||
]},
|
||||
{type: "td", list: [{view: "project", style: {"max-height": window.innerHeight-480, display: "none"}} ]},
|
||||
{type: "td", list: [{view: "profile", style: {"max-height": window.innerHeight-480}, list: [
|
||||
{view: ["content", "table"]},
|
||||
]}], style: {"min-width": parseInt(can.Conf("width"))-120, "max-width": parseInt(can.Conf("width"))-60}},
|
||||
]}, ]},
|
||||
{view: "search", style: {display: "none"}, list: [{view: "action", list: [
|
||||
{input: ["word", function(event) {
|
||||
if (event.key == "Enter") {
|
||||
@ -27,20 +25,19 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb,
|
||||
can.page.Modify(can, can.ui.search, {style: {display: "none"}})
|
||||
}]},
|
||||
]},
|
||||
{view: "tags"},
|
||||
{view: "tags", style: {"max-height": 160}},
|
||||
]},
|
||||
])
|
||||
|
||||
typeof cb == "function" && cb(msg)
|
||||
can.history = can.history || []
|
||||
|
||||
can.tabview = {}, can.tabview[can.Option("path")+can.Option("file")] = msg
|
||||
msg.Option({path: can.Option("path"), file: can.Option("file"), line: can.Option("line")||1})
|
||||
can.onimport.tabview(can, can.Option("path"), can.Option("file"), can.Option("line")||1)
|
||||
return typeof cb == "function" && cb(msg)
|
||||
can.onimport.project(can, can.Option("path"))
|
||||
},
|
||||
tabview: function(can, path, file, line, cb) {
|
||||
var push = {path: path, file: file, line: line}
|
||||
can.core.Eq(can.history[can.history.length-1], push) || can.history.push(push)
|
||||
|
||||
function show() {
|
||||
can._msg && can._msg.Option("line", can.Option("line"))
|
||||
can._msg = can.tabview[path+file]
|
||||
@ -91,7 +88,7 @@ Volcanos("onsyntax", {help: "语法高亮", list: ["keyword", "prefix", "line"],
|
||||
var cache = false; can.core.List(["content"], function(item) {
|
||||
var p = can.Cache(can.file+item, can.ui[item]); if (p != undefined) { cache = true
|
||||
can.ui.profile.parentNode.scrollTo(0, p.scrollTop)
|
||||
can.onaction.selectLine(can, p.current.target)
|
||||
can.onaction.selectLine(can, p.current.line)
|
||||
can.max = p.max
|
||||
}
|
||||
}); if (cache) { return }
|
||||
@ -136,10 +133,11 @@ Volcanos("onaction", {help: "控件交互", list: [],
|
||||
"返回": function(event, can) {
|
||||
var last = can.history.pop(); last = can.history.pop()
|
||||
last && can.onimport.tabview(can, last.path, last.file, last.line)
|
||||
can.Status("跳转数", can.history.length)
|
||||
},
|
||||
project: function(event, can) {
|
||||
can.page.Toggle(can, can.ui.project, function() {
|
||||
can.onimport.project(can, can.Option("path"))
|
||||
// can.onimport.project(can, can.Option("path"))
|
||||
})
|
||||
},
|
||||
search: function(event, can) {
|
||||
@ -149,8 +147,8 @@ Volcanos("onaction", {help: "控件交互", list: [],
|
||||
},
|
||||
|
||||
appendLine: function(can, value) { var index = ++can.max
|
||||
var line = can.page.Append(can, can.ui.content, [{type: "tr", list: [{view: ["line", "td", index], onclick: function(event) {
|
||||
can.onaction.selectLine(can, line)
|
||||
var ui = can.page.Append(can, can.ui.content, [{type: "tr", list: [{view: ["line", "td", index], onclick: function(event) {
|
||||
can.onaction.selectLine(can, ui.tr)
|
||||
|
||||
}, ondblclick: function(event) {
|
||||
can.user.input(event, can, [
|
||||
@ -171,18 +169,19 @@ Volcanos("onaction", {help: "控件交互", list: [],
|
||||
typeof p == "object"? can.page.Appends(can, td, [p]): td.innerHTML = p
|
||||
|
||||
}, onclick: function(event) {
|
||||
can.onaction.selectLine(can, line)
|
||||
can.onkeymap && can.onkeymap._mode(can, "insert")
|
||||
can.onaction.selectLine(can, ui.tr)
|
||||
|
||||
}, ondblclick: function(event) {
|
||||
return
|
||||
var s = document.getSelection()
|
||||
var str = s.baseNode.data
|
||||
var begin = str.indexOf(s.toString())
|
||||
var end = begin+s.toString().length
|
||||
s = s.toString()
|
||||
var str = ui.text.innerText
|
||||
var s = document.getSelection().toString()
|
||||
var begin = str.indexOf(s)
|
||||
var end = begin+s.length
|
||||
|
||||
for (var i = begin; i >= 0; i--) {
|
||||
if (!str[i].match(/[a-zA-Z0-9.]/)) {
|
||||
s = str.slice(i+1, end)
|
||||
if (str[i].match(/[a-zA-Z0-9_.]/)) {
|
||||
s = str.slice(i, end)
|
||||
} else {
|
||||
break
|
||||
}
|
||||
}
|
||||
@ -194,8 +193,8 @@ Volcanos("onaction", {help: "控件交互", list: [],
|
||||
}
|
||||
|
||||
can.onaction.searchLine(event, can, s)
|
||||
}} ] }]).tr
|
||||
return line
|
||||
}} ] }])
|
||||
return ui.tr
|
||||
},
|
||||
rerankLine: function(can, value) { can.max = 0
|
||||
can.page.Select(can, can.ui.content, "tr", function(item, index) {
|
||||
@ -218,30 +217,34 @@ Volcanos("onaction", {help: "控件交互", list: [],
|
||||
can.page.Select(can, can.ui.content, "tr", function(item, index) {
|
||||
can.page.ClassList.del(can, item, "select")
|
||||
if (item != line && index+1 != line) { return }
|
||||
can.page.ClassList.add(can, item, "select")
|
||||
line = item
|
||||
|
||||
can.Option("line", index+1)
|
||||
can.Status("文件名", can.file)
|
||||
can.Status("解析器", can.parse)
|
||||
can.Status("当前行", can.onexport.position(can, index+1))
|
||||
can.page.ClassList.add(can, item, "select")
|
||||
can.Option("line", index+1)
|
||||
line = item
|
||||
})
|
||||
|
||||
can.page.Select(can, line, "td.text", function(item) {
|
||||
typeof line == "object" && can.page.Select(can, line, "td.text", function(item) {
|
||||
can.current = {
|
||||
scroll: function(x, y) { return can.ui.profile.parentNode.scrollBy(x, y) },
|
||||
offset: function() { return can.ui.profile.parentNode.scrollTop },
|
||||
window: function() { return can.ui.profile.parentNode.offsetHeight },
|
||||
height: function() { return line.offsetHeight },
|
||||
|
||||
prev: function() { return line.previousSibling },
|
||||
next: function() { return line.nextSibling },
|
||||
text: function(text) {
|
||||
line: line, text: function(text) {
|
||||
text != undefined && can.onaction.modifyLine(can, line, text)
|
||||
return item.innerText
|
||||
},
|
||||
target: line,
|
||||
}
|
||||
|
||||
var push = {path: can.Option("path"), file: can.Option("file"), line: can.Option("line")}
|
||||
can.core.Eq({path: push.path, file: push.file}, can.history[can.history.length-1]) || can.history.push(push)
|
||||
can.Status("跳转数", can.history.length)
|
||||
|
||||
can.onkeymap && can.onkeymap.selectLine(can, line, item)
|
||||
})
|
||||
},
|
||||
@ -249,15 +252,16 @@ Volcanos("onaction", {help: "控件交互", list: [],
|
||||
can.page.Modify(can, can.ui.search, {style: {display: ""}})
|
||||
value = can.ui.word.value = value || can.ui.word.value || "main"
|
||||
|
||||
var toast = can.user.toast(can, value, "搜索中...", 1000000)
|
||||
value && can.run(event, ["action", "search", can.parse, value, can.Option("path")], function(msg) { can.ui.tags.innerHTML = ""
|
||||
var toast = can.user.toast(can, "搜索中...", value, 1000000)
|
||||
can.run(event, ["action", "search", can.parse, value, can.Option("path")], function(msg) {
|
||||
toast.Close()
|
||||
|
||||
can.onappend.table(can, can.ui.tags, "table", msg, function(value, key, index, line) { can.Status("标签数", index+1)
|
||||
can.ui.tags.innerHTML = ""
|
||||
can.onappend.table(can, msg, can.ui.tags, "table", function(value, key, index, line) { can.Status("标签数", index+1)
|
||||
value = value.replace("<", "<").replace(">", ">"), value = value.replace("./", "")
|
||||
return {text: ["", "td"], list: [{text: [value, "div"]}], onclick: function(event) {
|
||||
line.line && can.onimport.tabview(can, can.Option("path"), line.file.replace("./", ""), parseInt(line.line), function() {
|
||||
var pos = can.current.offset()-can.current.target.offsetTop
|
||||
var pos = can.current.offset()-can.current.line.offsetTop
|
||||
can.current.scroll(0, -pos)
|
||||
})
|
||||
}}
|
||||
@ -265,7 +269,7 @@ Volcanos("onaction", {help: "控件交互", list: [],
|
||||
}, true)
|
||||
},
|
||||
})
|
||||
Volcanos("onexport", {help: "导出数据", list: ["模式", "按键", "文件名", "解析器", "当前行", "标签数"],
|
||||
Volcanos("onexport", {help: "导出数据", list: ["解析器", "文件名", "当前行", "跳转数", "标签数"],
|
||||
position: function(can, index, total) { total = total || can.max
|
||||
return (parseInt(index))+"/"+parseInt(total)+" = "+parseInt((index)*100/total)+"%"
|
||||
},
|
||||
|
@ -20,20 +20,16 @@ fieldset.editor>div.output input.editor.normal {
|
||||
fieldset.editor>div.output input.editor.command {
|
||||
display:none;
|
||||
}
|
||||
fieldset.editor>div.output input.command {
|
||||
clear:both;
|
||||
padding:0; margin:0;
|
||||
font-size:16px; font-family:monospace;
|
||||
padding-left:12px;
|
||||
|
||||
fieldset.editor>div.output input.command {
|
||||
margin:0; padding:0 12px;
|
||||
font-size:16px; font-family:monospace;
|
||||
background-color:black; color:white;
|
||||
caret-color:red;
|
||||
|
||||
min-width:480px;
|
||||
border:solid 1px red;
|
||||
border-left:solid 3px green;
|
||||
z-index:200;
|
||||
min-width:480px;
|
||||
display:block;
|
||||
}
|
||||
fieldset.editor>div.output input.command.normal {
|
||||
display:none;
|
||||
@ -41,3 +37,22 @@ fieldset.editor>div.output input.command.normal {
|
||||
fieldset.editor>div.output input.command.insert {
|
||||
display:none;
|
||||
}
|
||||
|
||||
fieldset.editor>div.output div.display {
|
||||
border:solid 2px greenyellow;
|
||||
padding:6px;
|
||||
}
|
||||
fieldset.editor>div.output div.display div.action {
|
||||
padding-left:6px;
|
||||
}
|
||||
fieldset.editor>div.output div.display div.output {
|
||||
padding:0; border:0; overflow:auto;
|
||||
color:white;
|
||||
}
|
||||
fieldset.editor>div.output div.display input.cmd {
|
||||
font-size:16px; font-family:monospace;
|
||||
background-color:black; color:white;
|
||||
min-width:480px;
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,6 +1,8 @@
|
||||
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
|
||||
Volcanos("onimport", {help: "导入数据", list: [], _merge: function(can, sub) {
|
||||
can.onimport.inner_init = sub._init
|
||||
}, _init: function(can, msg, list, cb, target) {
|
||||
can.require(["/plugin/local/code/inner.js"], function(can) {
|
||||
can.onimport._init(can, msg, list, function() {
|
||||
can.onimport.inner_init(can, msg, list, function() {
|
||||
var ui = can.page.Append(can, can.ui.profile, [
|
||||
{view: ["editor", "input"], onkeydown: function(event) {
|
||||
can.onkeymap.parse(event, can, "insert")
|
||||
@ -17,51 +19,47 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
||||
{view: ["command", "input"], onkeydown: function(event) {
|
||||
can.onkeymap.parse(event, can, "command")
|
||||
}},
|
||||
]); can.core.Copy(can.ui, ui, "editor", "command"), can.onkeymap._init(can, "insert")
|
||||
]); can.core.Copy(can.ui, ui, "editor", "command")
|
||||
|
||||
var ui = can.page.Append(can, target, [
|
||||
{view: "display", style: {display: "none"}, list: [{view: "action", list: [
|
||||
{button: ["关闭", function(event) {
|
||||
can.page.Modify(can, can.ui.display, {style: {display: "none"}})
|
||||
} ]},
|
||||
]},
|
||||
{view: "output", style: {"max-height": "200"}},
|
||||
{view: "display", style: {display: "none"}, list: [
|
||||
{view: "action", list: [
|
||||
{input: ["cmd", function(event) {
|
||||
can.onkeymap.parse(event, can, "command")
|
||||
}], value: "", onfocus: function(event) {
|
||||
event.target.setSelectionRange(0, -1)
|
||||
}},
|
||||
{button: ["执行", function(event) {
|
||||
can.onkeymap.command.Enter(event, can, can.ui.cmd.value)
|
||||
}]},
|
||||
{button: ["关闭", function(event) {
|
||||
can.page.Modify(can, can.ui.display, {style: {display: "none"}})
|
||||
} ]},
|
||||
]},
|
||||
{view: "output", style: {"max-height": 160}},
|
||||
]},
|
||||
]); can.core.Copy(can.ui, ui, "display", "output")
|
||||
]); can.core.Copy(can.ui, ui, "display", "output", "cmd")
|
||||
|
||||
typeof cb == "function" && cb()
|
||||
can.keylist = [], can.onkeymap._init(can, "insert")
|
||||
}, target)
|
||||
})
|
||||
},
|
||||
}, ["/plugin/local/code/vimer.css"])
|
||||
Volcanos("onaction", {help: "控件交互", list: [],
|
||||
_merge: function(can, sub) { for (var k in sub) {
|
||||
can.onaction.hasOwnProperty(k) || (can.onaction[k] = sub[k])
|
||||
}; return true },
|
||||
|
||||
save: function(event, can) {
|
||||
var msg = can.request(event); msg.Option("content", can.onexport.content(can))
|
||||
can.run(event, ["action", "save", can.parse, can.Option("file"), can.Option("path")], function(msg) {
|
||||
can.user.toast(can, "保存成功")
|
||||
}, true)
|
||||
},
|
||||
"编辑": function(event, can) { can.onkeymap && can.onkeymap._insert(can) },
|
||||
"刷新": function(event, can) {
|
||||
can.run(event, [can.Option("path"), can.Option("file")])
|
||||
display: function(event, can) {
|
||||
can.page.Toggle(can, can.ui.display, function() {
|
||||
// can.onimport.project(can, can.Option("path"))
|
||||
})
|
||||
},
|
||||
"运行": function(event, can) {
|
||||
can.page.Modify(can, can.ui.display, {innerHTML: "", style: {display: "none"}})
|
||||
can.run(event, ["action", "engine", can.parse, can.Option("file"), can.Option("path")], function(msg) {
|
||||
(msg.Result() || msg.append && msg.append.length > 0) && can.page.Modify(can, can.ui.display, {innerHTML: "", style: {display: "block"}})
|
||||
can.onappend.table(can, can.ui.display, "table", msg)
|
||||
can.onappend.board(can, can.ui.display, "board", msg)
|
||||
}, true)
|
||||
},
|
||||
|
||||
|
||||
})
|
||||
Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert"], _init: function(can, mode) {
|
||||
can.history = []
|
||||
can.core.List(can.onkeymap.list, function(item) { var engine = {}
|
||||
can.core.Item(can.onkeymap[item], function(key, cb) { var map = engine
|
||||
for (var i = key.length-1; i > -1; i--) {
|
||||
@ -77,10 +75,14 @@ Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert"
|
||||
return value
|
||||
},
|
||||
_command: function(can) { can.onkeymap._mode(can, "command")
|
||||
can.page.Modify(can, can.ui.command, {style: {
|
||||
position: "absolute", top: can.current.offset()+can.current.window()-can.current.height(),
|
||||
}})
|
||||
can.ui.command.focus()
|
||||
if (can.ui.display.style.display == "none") {
|
||||
can.page.Modify(can, can.ui.command, {style: {
|
||||
display: "", position: "absolute", top: can.current.offset()+can.current.window()-can.current.height(),
|
||||
}})
|
||||
can.ui.command.focus()
|
||||
} else {
|
||||
can.ui.cmd.focus()
|
||||
}
|
||||
},
|
||||
_normal: function(can) { can.onkeymap._mode(can, "normal")
|
||||
can.ui.editor.focus()
|
||||
@ -90,37 +92,38 @@ Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert"
|
||||
},
|
||||
|
||||
_remote: function(event, can, key, arg, cb) {
|
||||
can.page.Modify(can, can.ui.display, {style: {display: "none"}})
|
||||
var toast = can.user.toast(can, "执行中...", key, 1000000)
|
||||
var msg = can.request(event); msg.Option("content", can.onexport.content(can))
|
||||
can.run(event, arg||["action", key, can.parse, can.Option("file"), can.Option("path")], cb||function(msg) {
|
||||
can.page.Modify(can, can.ui.display, {style: {display: "block"}})
|
||||
toast.Close()
|
||||
|
||||
can.ui.output.innerHTML = ""
|
||||
can.onappend.table(can, can.ui.output, "table", msg, function(value, key, index) {
|
||||
can.onappend.table(can, msg, can.ui.output, "table", function(value, key, index) {
|
||||
return {text: [value, "td"]}
|
||||
})
|
||||
can.onappend.board(can, can.ui.output, "board", msg)
|
||||
can.onappend.board(can, msg, can.ui.output, "board")
|
||||
}, true)
|
||||
},
|
||||
_engine: {
|
||||
e: function(event, can, line, ls) { can.onimport.tabview(can, can.Option("path"), ls[1]) },
|
||||
w: function(event, can) { can.onaction["save"](event, can, "save") },
|
||||
r: function(event, can) { can.onaction["运行"](event, can, "运行") },
|
||||
p: function(event, can) { can.onaction.project(event, can) },
|
||||
q: function(event, can) { can.onaction.display(event, can) },
|
||||
w: function(event, can) { can.onaction.save(event, can) },
|
||||
},
|
||||
|
||||
parse: function(event, can, mode) {
|
||||
event.key.length == 1 && can.history.push(event.key); if (can.mode != mode) {
|
||||
event.key.length == 1 && can.keylist.push(event.key); if (can.mode != mode) {
|
||||
event.stopPropagation(), event.preventDefault()
|
||||
}; can.mode != "command" && can.Status("按键", can.history.join(""))
|
||||
}; can.mode != "command" && can.Status("按键", can.keylist.join(""))
|
||||
|
||||
for (var pre = 0; pre < can.history.length; pre++) {
|
||||
if ("0" <= can.history[pre] && can.history[pre] <= "9") { continue } break
|
||||
}; can.count = parseInt(can.history.slice(0, pre).join(""))||1
|
||||
for (var pre = 0; pre < can.keylist.length; pre++) {
|
||||
if ("0" <= can.keylist[pre] && can.keylist[pre] <= "9") { continue } break
|
||||
}; can.count = parseInt(can.keylist.slice(0, pre).join(""))||1
|
||||
|
||||
function repeat(cb, count) {
|
||||
for (var i = 1; i <= count; i++) { if (cb(event, can, count)) { break } }
|
||||
can.history.length > 0 && (can.lastcmd = can.history), can.history = []
|
||||
can.Status("按键", can.history.join(""))
|
||||
can.keylist.length > 0 && (can.lastcmd = can.keylist), can.keylist = []
|
||||
can.Status("按键", can.keylist.join(""))
|
||||
}
|
||||
|
||||
var p = can.onsyntax[can.parse]
|
||||
@ -128,22 +131,28 @@ Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert"
|
||||
return repeat(cb, can.count)
|
||||
}
|
||||
|
||||
var map = can.onkeymap[can.mode]._engine; for (var i = can.history.length-1; i > pre-1; i--) {
|
||||
var cb = map[can.history[i]]; if (typeof cb == "function") {
|
||||
var map = can.onkeymap[can.mode]._engine; for (var i = can.keylist.length-1; i > pre-1; i--) {
|
||||
var cb = map[can.keylist[i]]; if (typeof cb == "function") {
|
||||
return repeat(cb, can.count)
|
||||
}; if (typeof cb == "object") { map = cb; continue }; break
|
||||
}
|
||||
},
|
||||
command: {
|
||||
Escape: function(event, can) {
|
||||
can.page.Modify(can, can.ui.command, {style: {display: "none"}, value: ""})
|
||||
can.onkeymap._normal(can)
|
||||
},
|
||||
Enter: function(event, can) { var line = can.ui.command.value; var ls = can.core.Split(line, " ", ",", {simple: true})
|
||||
Enter: function(event, can) { var line = can.ui.command.value || can.ui.cmd.value ; var ls = can.core.Split(line, " ", ",", {simple: true})
|
||||
var cb = can.onkeymap._engine[ls[0]]; typeof cb == "function"? cb(event, can, line, ls):
|
||||
can.onkeymap._remote(event, can, line, ["action", "command"].concat(ls))
|
||||
can.onkeymap.command.Escape(event, can)
|
||||
|
||||
can.page.Modify(can, can.ui.command, {style: {display: "none"}, value: ""})
|
||||
can.page.Modify(can, can.ui.display, {style: {display: ""}})
|
||||
can.ui.cmd.value = line, can.ui.cmd.focus()
|
||||
can.ui.cmd.setSelectionRange(0, -1)
|
||||
can.ui.output.innerHTML = ""
|
||||
},
|
||||
jk: function(event, can) { can.history = can.history.slice(0, -1)
|
||||
jk: function(event, can) { can.keylist = can.keylist.slice(0, -1)
|
||||
can.onkeymap.command.Enter(event, can)
|
||||
},
|
||||
},
|
||||
@ -153,7 +162,7 @@ Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert"
|
||||
can.onkeymap._command(can)
|
||||
},
|
||||
".": function(event, can) {
|
||||
can.history = can.lastcmd
|
||||
can.keylist = can.lastcmd
|
||||
can.onkeymap.parse({key: ""}, can, "normal")
|
||||
},
|
||||
|
||||
@ -224,20 +233,20 @@ Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert"
|
||||
can.onaction.selectLine(can, can.onkeymap.insertLine(can, "", can.current.next()))
|
||||
},
|
||||
O: function(event, can) { can.onkeymap._insert(can)
|
||||
can.onaction.selectLine(can, can.onkeymap.insertLine(can, "", can.current.target))
|
||||
can.onaction.selectLine(can, can.onkeymap.insertLine(can, "", can.current.line))
|
||||
},
|
||||
|
||||
yy: function(event, can) { can.last = can.current.text() },
|
||||
dd: function(event, can) { can.last = can.current.text()
|
||||
var next = can.current.next()
|
||||
can.onkeymap.deleteLine(can, can.current.target)
|
||||
can.onkeymap.deleteLine(can, can.current.line)
|
||||
can.onaction.selectLine(can, next)
|
||||
},
|
||||
p: function(event, can) {
|
||||
can.onkeymap.insertLine(can, can.last, can.current.next())
|
||||
},
|
||||
P: function(event, can) {
|
||||
can.onkeymap.insertLine(can, can.last, can.current.target)
|
||||
can.onkeymap.insertLine(can, can.last, can.current.line)
|
||||
},
|
||||
},
|
||||
insert: {
|
||||
@ -293,8 +302,7 @@ Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert"
|
||||
}})
|
||||
|
||||
can.ui.editor.focus()
|
||||
can.ui.editor.setSelectionRange(0, 0)
|
||||
can.onkeymap._mode(can, "insert")
|
||||
// can.ui.editor.setSelectionRange(0, 0)
|
||||
// can.ui.editor.setSelectionRange(event.offsetX/10, event.offsetX/10)
|
||||
},
|
||||
insertLine: function(can, value, before) {
|
||||
@ -308,4 +316,5 @@ Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert"
|
||||
can.onaction.rerankLine(can)
|
||||
},
|
||||
})
|
||||
|
||||
Volcanos("onexport", {help: "导出数据", list: ["模式", "按键", "解析器", "文件名", "当前行", "跳转数", "标签数"],
|
||||
})
|
||||
|
@ -1,7 +1,7 @@
|
||||
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb) {
|
||||
can.ui = can.page.Appends(can, can._target, [{view: "content"}, {view: "display"}])
|
||||
|
||||
can.table = can.onappend.table(can, can.ui.content, "table", msg, function(value, key, index, line) {
|
||||
can.table = can.onappend.table(can, msg, can.ui.content, "table", function(value, key, index, line) {
|
||||
return {text: [value, "td"], oncontextmenu: function(event) {
|
||||
can.user.carte(can, can.ondetail, can.ondetail.list, function(ev, cmd, meta) {
|
||||
var cb = meta[cmd]; cb && cb(event, can, cmd, value, key, index, line)
|
||||
|
@ -1,5 +1,5 @@
|
||||
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { can._output.innerHTML = ""
|
||||
can.onappend.table(can, target, "table", msg), can.ui = can.page.Append(can, target, [
|
||||
can.onappend.table(can, msg, target, "table"), can.ui = can.page.Append(can, target, [
|
||||
{view: "project", style: {display: "none"}},
|
||||
{view: "content", onmouseenter: function(event) {
|
||||
can.onkeypop.action = can
|
||||
@ -14,7 +14,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
||||
can.current = null
|
||||
|
||||
// 加载绘图
|
||||
var code = can.onappend.board(can, can.ui.content, "board", msg, msg.Result()||can.onexport.content(can))
|
||||
var code = can.onappend.board(can, msg, can.ui.content, "board", msg.Result()||can.onexport.content(can))
|
||||
can.page.Select(can, can.ui.content, "svg", function(svg) { can.svg = can.group = svg
|
||||
can.onimport.block(can, svg), can.onimport.group(can, svg).click()
|
||||
can.page.Select(can, svg, "*", function(item, index) {
|
||||
@ -603,8 +603,8 @@ Volcanos("onaction", {help: "组件菜单", list: [
|
||||
_mode: {
|
||||
run: function(event, can) { var target = event.target
|
||||
event.type == "click" && target.Value("type") && can.run(event, ["action", "run", target.Value("zone"), target.Value("type"), target.Value("name"), target.Value("text")], function(msg) {
|
||||
can.onappend.table(can, can.ui.display, "table", msg)
|
||||
can.onappend.board(can, can.ui.display, "board", msg)
|
||||
can.onappend.table(can, msg, can.ui.display, "table")
|
||||
can.onappend.board(can, msg, can.ui.display, "board")
|
||||
}, true)
|
||||
},
|
||||
translate: function(event, can, point) {
|
||||
|
@ -8,7 +8,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
||||
value.path.endsWith("/")? can.path.Push(value): can.list.push(value)
|
||||
})
|
||||
|
||||
can.onappend.table(can, can.ui.project, "table", can.path, function(value, key, index, line, array) {
|
||||
can.onappend.table(can, can.path, can.ui.project, "table", function(value, key, index, line, array) {
|
||||
return {type: "td", inner: value, click: function(event) {
|
||||
can.sup.onaction.change(event, can.sup, key, value, function(msg) {
|
||||
can.run(event)
|
||||
|
@ -1,7 +1,7 @@
|
||||
Volcanos("onimport", {help: "导入数据", list: [],
|
||||
init: function(can, msg, cb, output, action, option) {output.innerHTML = "";
|
||||
if (!msg.result || msg.result.length == 0) {
|
||||
var table = can.page.AppendTable(can, output, msg, msg.append);
|
||||
var table = can.page.AppendTable(can, msg, output, msg.append);
|
||||
table.onclick = function(event) {switch (event.target.tagName) {
|
||||
case "TD":
|
||||
can.onimport.which(event, table, msg.append, function(index, key) {
|
||||
|
@ -1,6 +1,6 @@
|
||||
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { target.innerHTML = ""
|
||||
if (msg.Option("_display") == "table") {
|
||||
return can.onappend.table(can, target, "table", msg)
|
||||
return can.onappend.table(can, msg, target, "table")
|
||||
} target.innerHTML = msg.Result()
|
||||
|
||||
can.page.Select(can, target, ".story", function(item) { var data = item.dataset
|
||||
|
@ -2,8 +2,8 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
||||
can.ui = can.page.Append(can, can._target, [
|
||||
{view: ["content", "div"]}, {view: ["display", "pre"]},
|
||||
])
|
||||
can.onappend.table(can, can.ui.content, "table", msg)
|
||||
can.onappend.board(can, can.ui.display, "board", msg)
|
||||
can.onappend.table(can, msg, can.ui.content, "table")
|
||||
can.onappend.board(can, msg, can.ui.display, "board")
|
||||
return typeof cb == "function" && cb(msg)
|
||||
},
|
||||
})
|
||||
|
@ -1,7 +1,7 @@
|
||||
Volcanos("onimport", {help: "导入数据", list: [],
|
||||
_init: function(can, msg, list, cb, target) { can._output.innerHTML = ""
|
||||
if (msg.Option("_display") == "table") {
|
||||
can.onappend.table(can, can._target, "table", msg)
|
||||
can.onappend.table(can, msg, can._target, "table")
|
||||
return typeof cb == "function" && cb(msg)
|
||||
}
|
||||
can.ui = can.page.Append(can, can._output, [{view: "content"}, {view: "display"}])
|
||||
|
@ -1,7 +1,7 @@
|
||||
Volcanos("onimport", {help: "导入数据", list: [],
|
||||
_init: function(can, msg, list, cb, target) { can._output.innerHTML = ""
|
||||
if (msg.Option("_display") == "table") {
|
||||
can.onappend.table(can, can._target, "table", msg)
|
||||
can.onappend.table(can, msg, can._target, "table")
|
||||
return typeof cb == "function" && cb(msg)
|
||||
}
|
||||
can.ui = can.page.Append(can, can._output, [{view: "content"}, {view: "display"}])
|
||||
@ -183,7 +183,7 @@ Volcanos("onaction", {help: "组件菜单", list: ["编辑", "清空", ["view",
|
||||
},
|
||||
"数据源": function(event, can) {
|
||||
can.ui.display.innerHTML = ""
|
||||
can.onappend.table(can, can.ui.display, "table", can._msg)
|
||||
can.onappend.table(can, can._msg, can.ui.display, "table")
|
||||
},
|
||||
})
|
||||
Volcanos("onexport", {help: "导出数据", list: ["from", "commit", "total", "date", "begin", "add", "del", "close", "note"]})
|
||||
|
@ -8,7 +8,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
||||
]))
|
||||
|
||||
var cmd = "", arg = ""
|
||||
can.onappend.table(can, can.ui.content, "table", msg, function(value, key, index, line, array) {
|
||||
can.onappend.table(can, msg, can.ui.content, "table", function(value, key, index, line, array) {
|
||||
if (key == "key") {
|
||||
switch (value) {
|
||||
case "extra.cmd": cmd += line.value; break
|
||||
@ -33,7 +33,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
||||
}, can.ui.display)
|
||||
|
||||
|
||||
can.onappend.board(can, can.ui.display, "board", msg)
|
||||
can.onappend.board(can, msg, can.ui.display, "board")
|
||||
can.onimport._board(can, msg)
|
||||
return typeof cb == "function" && cb(msg)
|
||||
},
|
||||
@ -167,7 +167,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
||||
return true
|
||||
},
|
||||
_inner: function(can, msg) {
|
||||
can.onappend.board(can, can.ui.display, "board", msg)
|
||||
can.onappend.board(can, msg, can.ui.display, "board")
|
||||
can.onimport._board(can, msg)
|
||||
return true
|
||||
},
|
||||
|
10
proto.js
10
proto.js
@ -42,7 +42,15 @@ var Volcanos = shy("火山架", {libs: [], pack: {}, order: 1, cache: {}, index:
|
||||
for (var i = 0; i < cache.length; i++) {
|
||||
if (can[cache[i]._name] && can[cache[i]._name]._merge && can[cache[i]._name]._merge(can, cache[i])) { continue }
|
||||
if (typeof cb == "function" && cb(can, name, cache[i])) { continue}
|
||||
can[cache[i]._name] = cache[i]
|
||||
if (can[cache[i]._name]) {
|
||||
for (var k in cache[i]) {
|
||||
can[cache[i]._name].hasOwnProperty(k) || (can[cache[i]._name][k] = cache[i][k])
|
||||
}
|
||||
} else {
|
||||
can[cache[i]._name] = cache[i]
|
||||
}
|
||||
|
||||
|
||||
// 加载索引
|
||||
}
|
||||
meta.cache[name] = cache
|
||||
|
Loading…
x
Reference in New Issue
Block a user