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
37040d7697
commit
14f9ef9b71
@ -1,6 +1,6 @@
|
||||
fieldset.Search {
|
||||
display:none;
|
||||
position:absolute;
|
||||
position:fixed;
|
||||
left:120px;
|
||||
top:40px;
|
||||
background:black;
|
||||
|
@ -27,6 +27,33 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, meta,
|
||||
})
|
||||
},
|
||||
|
||||
active: function(can, msg, cmd, cb) { can._output.innerHTML = ""
|
||||
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.Status("count", index+1)
|
||||
return {text: [value, "td"], onclick: function(event) {
|
||||
typeof cb == "function" && cb(line)
|
||||
can.Status("index", index)
|
||||
can.Status("value", value)
|
||||
}}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
can.ui = can.page.Append(can, can._output, [
|
||||
{input: ["word", function(event) {
|
||||
if (event.key == "Enter") {
|
||||
search(event.target.value)
|
||||
}
|
||||
}], value: cmd[1]},
|
||||
{view: "content"},
|
||||
])
|
||||
can.page.Modify(can, can._target, {style: {display: "block"}})
|
||||
can.ui.input.focus()
|
||||
search(cmd[1])
|
||||
},
|
||||
select: function(can, msg, cmd, cb) { can._output.innerHTML = ""
|
||||
function search(word) { cmd[1] = word
|
||||
can.run({}, cmd, function(msg) { can.ui.content.innerHTML = ""
|
||||
@ -79,7 +106,7 @@ Volcanos("onaction", {help: "交互操作", list: ["关闭", "清空", "完成"]
|
||||
"清空": function(event, can, key) {
|
||||
can._output.innerHTML = ""
|
||||
},
|
||||
"完成": function(event, can, key) { can.cb() },
|
||||
"完成": function(event, can, key) { can.cb && can.cb() },
|
||||
})
|
||||
Volcanos("ondetail", {help: "交互菜单", list: ["共享", "更名", "删除"],
|
||||
"共享": function(event, can, value, sub) { var msg = sub.request(event)
|
||||
|
@ -14,7 +14,8 @@ fieldset.editor>div.action>div.file.select {
|
||||
}
|
||||
|
||||
fieldset.editor>div.output>div.project {
|
||||
max-width:120px; overflow:auto;
|
||||
max-height:400px; overflow:auto;
|
||||
max-width:120px;
|
||||
}
|
||||
fieldset.editor>div.output>div.project div.item {
|
||||
cursor:pointer;
|
||||
@ -46,6 +47,7 @@ fieldset.editor>div.output div.content {
|
||||
font-size:16px; font-family:monospace;
|
||||
border-left:solid 2px red;
|
||||
min-height:200px;
|
||||
max-width:200px;
|
||||
float:left;
|
||||
}
|
||||
fieldset.editor>div.output div.content>pre.item {
|
||||
@ -82,6 +84,20 @@ fieldset.editor>div.output pre.display:hover {
|
||||
max-height:640px;
|
||||
z-index:10;
|
||||
}
|
||||
fieldset.editor>div.output div.search {
|
||||
padding:6px; border:solid 1px red;
|
||||
max-height:120px; overflow:auto;
|
||||
position:sticky; bottom:0;
|
||||
clear:both;
|
||||
margin:0;
|
||||
}
|
||||
fieldset.editor>div.output div.search:hover {
|
||||
background-color:black;
|
||||
z-index:10;
|
||||
}
|
||||
fieldset.editor>div.output div.holdon {
|
||||
max-height:400px; overflow:auto;
|
||||
}
|
||||
|
||||
fieldset.editor>div.output textarea.editor {
|
||||
position:absolute; padding:0; margin:0;
|
||||
|
@ -1,11 +1,14 @@
|
||||
Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb, target) { target.innerHTML = ""
|
||||
if (can.Conf("height") < 600) { can.Conf("height", 600) }
|
||||
can.onimport._share(can); var width = can.Conf("width"), height = can.Conf("height")
|
||||
can.page.Modify(can, target, {style: {"max-height": height-160+"px"}})
|
||||
// can.page.Modify(can, target, {style: {"max-height": height-160+"px"}})
|
||||
|
||||
can.onappend.table(can, target, "table", msg), can.ui = can.page.Append(can, target, [
|
||||
{view: "project"}, {view: "profile"},
|
||||
|
||||
{view: "holdon", list: [
|
||||
{view: "preview"}, {view: "content", style: {"max-width": can.Conf("width")-240+"px"}},
|
||||
]},
|
||||
|
||||
{view: ["editor", "textarea"], onkeydown: function(event) {
|
||||
can.onkeymap.parse(event, can, "insert"), can.Timer(10, function() {
|
||||
@ -22,6 +25,7 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb,
|
||||
can.onkeymap.parse(event, can, "command")
|
||||
}},
|
||||
{type: "code", list: [{view: ["display", "pre"]}]},
|
||||
{view: "search"},
|
||||
])
|
||||
|
||||
msg.Option("path", can.Option("path"))
|
||||
@ -108,6 +112,7 @@ Volcanos("onsyntax", {help: "语法高亮", list: ["keyword", "prefix", "line"],
|
||||
}, true): init(p)
|
||||
},
|
||||
parse: function(can, line) { var p = can.onsyntax[can.parse]; if (!p) { return }
|
||||
p = can.onsyntax[p.link] || p
|
||||
function wrap(type, str) { return type? '<span class="'+type+'">'+str+'</span>': str }
|
||||
p.keyword && (line = can.core.List(can.core.Split(line, p.split && p.split.space || " ", p.split && p.split.operator || "{[(|)]}"), function(item, index, array) {
|
||||
item = typeof item == "object"? item: {text: item}, p.word && (item = p.word(item, index, array))
|
||||
@ -121,7 +126,7 @@ Volcanos("onsyntax", {help: "语法高亮", list: ["keyword", "prefix", "line"],
|
||||
}).join(""))
|
||||
|
||||
p.prefix && can.core.Item(p.prefix, function(pre, type) {
|
||||
if (line.startsWith(pre)) { line = wrap(type, line) }
|
||||
if (line.trim().startsWith(pre)) { line = wrap(type, line) }
|
||||
})
|
||||
p.suffix && can.core.Item(p.suffix, function(pre, type) {
|
||||
if (line.endsWith(pre)) { line = wrap(type, line) }
|
||||
@ -311,6 +316,63 @@ Volcanos("onsyntax", {help: "语法高亮", list: ["keyword", "prefix", "line"],
|
||||
return array[index-2]=="can"&&array[index-1]=="."&&(libs[value]||libs[value.text])? {keyword: "function", text: value.text||value}: value
|
||||
},
|
||||
},
|
||||
h: {
|
||||
split: {
|
||||
space: " ",
|
||||
operator: "{[(.:,;!|)]}",
|
||||
},
|
||||
prefix: {
|
||||
"//": "comment",
|
||||
"/*": "comment",
|
||||
"*": "comment",
|
||||
},
|
||||
keyword: {
|
||||
"#include": "keyword",
|
||||
"#define": "keyword",
|
||||
"#ifndef": "keyword",
|
||||
"#ifdef": "keyword",
|
||||
"#else": "keyword",
|
||||
"#endif": "keyword",
|
||||
|
||||
"typedef": "keyword",
|
||||
|
||||
"if": "keyword",
|
||||
"else": "keyword",
|
||||
"for": "keyword",
|
||||
"while": "keyword",
|
||||
"do": "keyword",
|
||||
"range": "keyword",
|
||||
"break": "keyword",
|
||||
"continue": "keyword",
|
||||
"switch": "keyword",
|
||||
"case": "keyword",
|
||||
"default": "keyword",
|
||||
|
||||
"return": "keyword",
|
||||
|
||||
"union": "datatype",
|
||||
"struct": "datatype",
|
||||
"extern": "datatype",
|
||||
"unsigned": "datatype",
|
||||
"static": "datatype",
|
||||
"double": "datatype",
|
||||
"const": "datatype",
|
||||
"void": "datatype",
|
||||
"long": "datatype",
|
||||
"char": "datatype",
|
||||
"int": "datatype",
|
||||
|
||||
"sizeof": "function",
|
||||
"assert": "function",
|
||||
"zmalloc": "function",
|
||||
|
||||
"NULL": "string",
|
||||
"0": "string",
|
||||
"1": "string",
|
||||
"-1": "string",
|
||||
},
|
||||
},
|
||||
c: {link: "h"},
|
||||
|
||||
png: {
|
||||
display: true,
|
||||
@ -567,8 +629,12 @@ Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert"
|
||||
},
|
||||
})
|
||||
Volcanos("onaction", {help: "控件交互", list: [
|
||||
"", "项目", "上传", "", "保存", "运行",
|
||||
"", "提交", "记录", "复盘", "历史",
|
||||
"搜索",
|
||||
// "运行", "收藏",
|
||||
|
||||
// "", "项目", "上传", "", "保存", "运行",
|
||||
// "", "提交", "记录", "复盘", "历史",
|
||||
// "", "搜索",
|
||||
],
|
||||
modifyLine: function(can, target, value) { var p = can.onsyntax.parse(can, value)
|
||||
typeof p == "object"? can.page.Appends(can, target, [p]): target.innerHTML = p
|
||||
@ -584,6 +650,7 @@ Volcanos("onaction", {help: "控件交互", list: [
|
||||
can.page.ClassList[index==i? "add": "del"](can, item, "select")
|
||||
})
|
||||
}); if (typeof target != "object") { return }; can.current = target
|
||||
return
|
||||
|
||||
can.page.Modify(can, can.editor, {className: "editor "+can.mode, value: can.current.innerText, style: {
|
||||
height: target.offsetHeight, width: target.offsetWidth,
|
||||
@ -601,7 +668,9 @@ Volcanos("onaction", {help: "控件交互", list: [
|
||||
can.onaction.selectLine(can, index)
|
||||
}}])
|
||||
var line = can.page.Append(can, can.ui.content, [{view: ["item", "pre", ""], onclick: function(event) {
|
||||
can.onaction.selectLine(can, line)
|
||||
// can.onaction.selectLine(can, line)
|
||||
}, ondblclick: function(event) {
|
||||
can.onaction.searchLine(event, can, document.getSelection().toString())
|
||||
}}]).first; value && can.onaction.modifyLine(can, line, value)
|
||||
return line
|
||||
},
|
||||
@ -614,6 +683,16 @@ Volcanos("onaction", {help: "控件交互", list: [
|
||||
can.onaction.deleteLine(can, target.nextSibling)
|
||||
return target
|
||||
},
|
||||
searchLine: function(event, can, value) { var msg = can.request(event)
|
||||
msg.Option("_path", can.Option("path"))
|
||||
can.run(event, ["search", "Search.onimport.active", can.parse, value, ""], function(line) {
|
||||
var ls = line.file.split("/")
|
||||
can.onimport.tabview(can, ls.slice(0, -1).join("/"), ls[ls.length-1])
|
||||
can.onaction.selectLine(can, parseInt(line.line-1))
|
||||
can.current && can.current.scrollIntoView()
|
||||
can.ui.holdon.scrollBy(0, -22*5)
|
||||
}, true)
|
||||
},
|
||||
|
||||
"串行": function(event, can, msg) {
|
||||
can.core.Next(can.page.Select(can, can._action, "div.file", function(item) {
|
||||
@ -632,7 +711,29 @@ Volcanos("onaction", {help: "控件交互", list: [
|
||||
can.page.Modify(can, can.ui.project, {style: {display: hide? "": "none"}})
|
||||
},
|
||||
"上传": function(event, can) { can.user.upload(event, can) },
|
||||
"搜索": function(event, can) { can.onkeymap._remote(event, can, "搜索", ["action", "find", "vim.history", "", "id", "type", "name", "text"]) },
|
||||
"搜索": function(event, can) {
|
||||
can.onaction.searchLine(event, can, "")
|
||||
return
|
||||
|
||||
can.user.input(event, can, ["word"], function(event, button, meta, list) {
|
||||
var msg = can.request(event)
|
||||
msg.Option("_path", can.Option("path"))
|
||||
can.run(event, ["action", "search", can.parse, list[0], ""], function(msg) {
|
||||
can.page.Modify(can, can.ui.search, {innerHTML: "", style: {display: "block"}})
|
||||
can.onappend.table(can, can.ui.search, "table", msg, function(value, key, index, line) {
|
||||
return {text: [value, "td"], onclick: function(event) {
|
||||
console.log(value)
|
||||
|
||||
var ls = line.file.split("/")
|
||||
can.onimport.tabview(can, ls.slice(0, -1).join("/"), ls[ls.length-1])
|
||||
can.onaction.selectLine(can, parseInt(line.line-1))
|
||||
can.current && can.current.scrollIntoView()
|
||||
can._target && can._target.scrollBy(0, -22*3)
|
||||
}}
|
||||
})
|
||||
}, true)
|
||||
})
|
||||
},
|
||||
"记录": function(event, can) { var sub = can.request(event)
|
||||
can.core.Item(can.Option(), sub.Option)
|
||||
sub.Option("display", can.display.innerText)
|
||||
@ -651,7 +752,9 @@ Volcanos("onaction", {help: "控件交互", list: [
|
||||
},
|
||||
"列表": function(event, can) { can.onkeymap._remote(event, can, "收藏", ["action", "favor", "url.favor"]) },
|
||||
})
|
||||
Volcanos("ondetail", {help: "菜单交互", list: ["保存", "运行", "提交", "记录", "删除行", "合并行", "插入行", "添加行", "追加行"],
|
||||
Volcanos("ondetail", {help: "菜单交互", list: [
|
||||
// "保存", "运行", "提交", "记录", "删除行", "合并行", "插入行", "添加行", "追加行",
|
||||
],
|
||||
"删除行": function(event, can, msg) {
|
||||
can.onaction.deleteLine(can, can.current)
|
||||
},
|
||||
|
@ -10,7 +10,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
||||
field: function(can, item, target) { var meta = can.base.Obj(item.meta)
|
||||
can.onappend._init(can, meta, Volcanos.meta.libs.concat(["/plugin/state.js"]), function(sub) {
|
||||
sub.run = function(event, cmds, cb, silent) {
|
||||
can.run(event, ["action", "story", item.type, item.name, item.text].concat(cmds), cb, true)
|
||||
can.run(event, (cmds[0] == "search"? []: ["action", "story", item.type, item.name, item.text]).concat(cmds), cb, true)
|
||||
}
|
||||
}, can._output, target)
|
||||
},
|
||||
|
Loading…
x
Reference in New Issue
Block a user