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:
shylinux 2020-07-08 19:45:07 +08:00
parent 37040d7697
commit 14f9ef9b71
5 changed files with 158 additions and 12 deletions

View File

@ -1,6 +1,6 @@
fieldset.Search { fieldset.Search {
display:none; display:none;
position:absolute; position:fixed;
left:120px; left:120px;
top:40px; top:40px;
background:black; background:black;

View File

@ -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 = "" select: function(can, msg, cmd, cb) { can._output.innerHTML = ""
function search(word) { cmd[1] = word function search(word) { cmd[1] = word
can.run({}, cmd, function(msg) { can.ui.content.innerHTML = "" can.run({}, cmd, function(msg) { can.ui.content.innerHTML = ""
@ -79,7 +106,7 @@ Volcanos("onaction", {help: "交互操作", list: ["关闭", "清空", "完成"]
"清空": function(event, can, key) { "清空": function(event, can, key) {
can._output.innerHTML = "" can._output.innerHTML = ""
}, },
"完成": function(event, can, key) { can.cb() }, "完成": function(event, can, key) { can.cb && can.cb() },
}) })
Volcanos("ondetail", {help: "交互菜单", list: ["共享", "更名", "删除"], Volcanos("ondetail", {help: "交互菜单", list: ["共享", "更名", "删除"],
"共享": function(event, can, value, sub) { var msg = sub.request(event) "共享": function(event, can, value, sub) { var msg = sub.request(event)

View File

@ -14,7 +14,8 @@ fieldset.editor>div.action>div.file.select {
} }
fieldset.editor>div.output>div.project { 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 { fieldset.editor>div.output>div.project div.item {
cursor:pointer; cursor:pointer;
@ -46,6 +47,7 @@ fieldset.editor>div.output div.content {
font-size:16px; font-family:monospace; font-size:16px; font-family:monospace;
border-left:solid 2px red; border-left:solid 2px red;
min-height:200px; min-height:200px;
max-width:200px;
float:left; float:left;
} }
fieldset.editor>div.output div.content>pre.item { fieldset.editor>div.output div.content>pre.item {
@ -82,6 +84,20 @@ fieldset.editor>div.output pre.display:hover {
max-height:640px; max-height:640px;
z-index:10; 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 { fieldset.editor>div.output textarea.editor {
position:absolute; padding:0; margin:0; position:absolute; padding:0; margin:0;

View File

@ -1,11 +1,14 @@
Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb, target) { target.innerHTML = "" Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb, target) { target.innerHTML = ""
if (can.Conf("height") < 600) { can.Conf("height", 600) } if (can.Conf("height") < 600) { can.Conf("height", 600) }
can.onimport._share(can); var width = can.Conf("width"), height = can.Conf("height") 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, [ can.onappend.table(can, target, "table", msg), can.ui = can.page.Append(can, target, [
{view: "project"}, {view: "profile"}, {view: "project"}, {view: "profile"},
{view: "preview"}, {view: "content", style: {"max-width": can.Conf("width")-240+"px"}},
{view: "holdon", list: [
{view: "preview"}, {view: "content", style: {"max-width": can.Conf("width")-240+"px"}},
]},
{view: ["editor", "textarea"], onkeydown: function(event) { {view: ["editor", "textarea"], onkeydown: function(event) {
can.onkeymap.parse(event, can, "insert"), can.Timer(10, function() { 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") can.onkeymap.parse(event, can, "command")
}}, }},
{type: "code", list: [{view: ["display", "pre"]}]}, {type: "code", list: [{view: ["display", "pre"]}]},
{view: "search"},
]) ])
msg.Option("path", can.Option("path")) msg.Option("path", can.Option("path"))
@ -108,6 +112,7 @@ Volcanos("onsyntax", {help: "语法高亮", list: ["keyword", "prefix", "line"],
}, true): init(p) }, true): init(p)
}, },
parse: function(can, line) { var p = can.onsyntax[can.parse]; if (!p) { return } 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 } 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) { 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)) 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("")) }).join(""))
p.prefix && can.core.Item(p.prefix, function(pre, type) { 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) { p.suffix && can.core.Item(p.suffix, function(pre, type) {
if (line.endsWith(pre)) { line = wrap(type, line) } 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 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: { png: {
display: true, display: true,
@ -567,8 +629,12 @@ Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert"
}, },
}) })
Volcanos("onaction", {help: "控件交互", list: [ Volcanos("onaction", {help: "控件交互", list: [
"", "项目", "上传", "", "保存", "运行", "搜索",
"", "提交", "记录", "复盘", "历史", // "运行", "收藏",
// "", "项目", "上传", "", "保存", "运行",
// "", "提交", "记录", "复盘", "历史",
// "", "搜索",
], ],
modifyLine: function(can, target, value) { var p = can.onsyntax.parse(can, value) modifyLine: function(can, target, value) { var p = can.onsyntax.parse(can, value)
typeof p == "object"? can.page.Appends(can, target, [p]): target.innerHTML = p 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") can.page.ClassList[index==i? "add": "del"](can, item, "select")
}) })
}); if (typeof target != "object") { return }; can.current = target }); if (typeof target != "object") { return }; can.current = target
return
can.page.Modify(can, can.editor, {className: "editor "+can.mode, value: can.current.innerText, style: { can.page.Modify(can, can.editor, {className: "editor "+can.mode, value: can.current.innerText, style: {
height: target.offsetHeight, width: target.offsetWidth, height: target.offsetHeight, width: target.offsetWidth,
@ -601,7 +668,9 @@ Volcanos("onaction", {help: "控件交互", list: [
can.onaction.selectLine(can, index) can.onaction.selectLine(can, index)
}}]) }}])
var line = can.page.Append(can, can.ui.content, [{view: ["item", "pre", ""], onclick: function(event) { 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) }}]).first; value && can.onaction.modifyLine(can, line, value)
return line return line
}, },
@ -614,6 +683,16 @@ Volcanos("onaction", {help: "控件交互", list: [
can.onaction.deleteLine(can, target.nextSibling) can.onaction.deleteLine(can, target.nextSibling)
return target 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) { "串行": function(event, can, msg) {
can.core.Next(can.page.Select(can, can._action, "div.file", function(item) { 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"}}) can.page.Modify(can, can.ui.project, {style: {display: hide? "": "none"}})
}, },
"上传": function(event, can) { can.user.upload(event, can) }, "上传": 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) "记录": function(event, can) { var sub = can.request(event)
can.core.Item(can.Option(), sub.Option) can.core.Item(can.Option(), sub.Option)
sub.Option("display", can.display.innerText) 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"]) }, "列表": function(event, can) { can.onkeymap._remote(event, can, "收藏", ["action", "favor", "url.favor"]) },
}) })
Volcanos("ondetail", {help: "菜单交互", list: ["保存", "运行", "提交", "记录", "删除行", "合并行", "插入行", "添加行", "追加行"], Volcanos("ondetail", {help: "菜单交互", list: [
// "保存", "运行", "提交", "记录", "删除行", "合并行", "插入行", "添加行", "追加行",
],
"删除行": function(event, can, msg) { "删除行": function(event, can, msg) {
can.onaction.deleteLine(can, can.current) can.onaction.deleteLine(can, can.current)
}, },

View File

@ -10,7 +10,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
field: function(can, item, target) { var meta = can.base.Obj(item.meta) 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) { can.onappend._init(can, meta, Volcanos.meta.libs.concat(["/plugin/state.js"]), function(sub) {
sub.run = function(event, cmds, cb, silent) { 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) }, can._output, target)
}, },