1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-25 08:48:06 +08:00
This commit is contained in:
shaoying 2020-06-06 22:22:30 +08:00
parent 968159c995
commit c113a9a64d
7 changed files with 79 additions and 71 deletions

109
frame.js
View File

@ -64,27 +64,34 @@ Volcanos("onengine", { _init: function(can, meta, list, cb, target) {
typeof cb == "function" && cb(msg)
return true
case "Action":
var river = can.onengine.river[cmds[0]||can.user.Search(can, "river")];
var storm = river && river.storm[cmds[1]||can.user.Search(can, "storm")];
var action = storm && storm.action[cmds[2]];
var river = can.onengine.river[cmds[0]]
var storm = river && river.storm[cmds[1]]
var action = storm && storm.action && storm.action[cmds[2]]
if (!storm) { break } if (cmds.length == 2) {
if (storm.index) {
can.misc.Run(event, can, {names: pane._name}, [river.name, storm.name, "index"].concat(storm.index), cb)
return true
}
can.core.List(storm.action, function(value) {
msg.Push("name", value.name||"");
msg.Push("help", value.help||"");
msg.Push("pod", value.pod||"");
msg.Push("group", value.group||"");
msg.Push("index", value.index||"");
msg.Push("args", value.args||"[]");
msg.Push("inputs", JSON.stringify(value.inputs||[]));
msg.Push("feature", JSON.stringify(value.feature||{}));
msg.Push("name", value.name||"")
msg.Push("help", value.help||"")
msg.Push("pod", value.pod||"")
msg.Push("group", value.group||"")
msg.Push("index", value.index||"")
msg.Push("args", value.args||"[]")
msg.Push("inputs", JSON.stringify(value.inputs||[]))
msg.Push("feature", JSON.stringify(value.feature||{}))
})
typeof cb == "function" && cb(msg);
} else if (action.engine) {
action.engine(event, can, msg, pane, cmds, cb);
} else {
} else if (action && action.engine) {
action.engine(event, can, msg, pane, cmds, cb)
} else if (action) {
msg.Option("group", action.group)
msg.Option("index", action.index)
return false
} else {
return false
}
return true
}
@ -103,19 +110,10 @@ Volcanos("onappend", { _init: function(can, meta, list, cb, target, field) {
var action = can.page.Select(can, field, "div.action")[0];
var output = can.page.Select(can, field, "div.output")[0];
var status = can.page.Select(can, field, "div.status")[0];
var feature = can.base.Obj(meta.feature)
can.page.ClassList.add(can, field, feature.style||"")
legend && (legend.onclick = function(event) { var msg = can.request(event)
can.core.List(["share", "pod"], function(key) { var value = can.user.Search(can, key)
value != undefined && msg.Option(key, can.user.Search(key))
})
can.core.List(["River", "Storm", "Action"], function(item) {
can.run(event, ["search", item+".onexport.key"])
})
var args = {}; can.core.List(msg.option, function(key) { args[key] = msg.Option(key) })
location.href = can.user.Share(can, args, true)
})
can.onappend._legend(can, legend)
// 添加插件
var sub = Volcanos(meta.name, { _help: meta.name, _target: field,
@ -185,7 +183,7 @@ Volcanos("onappend", { _init: function(can, meta, list, cb, target, field) {
}
// 解析参数
cmds = cmds && cmds.length > 0? cmds: can.page.Select(can, option, "input.args", function(item) {
cmds = cmds && cmds.length > 0? cmds: can.page.Select(can, option, "input.args,select.args", function(item) {
return item.name && item.value || ""
}); for (var i = cmds.length-1; i >= 0; i--) {
if (!cmds[i]) { cmds.pop() } else { break }
@ -232,27 +230,10 @@ Volcanos("onappend", { _init: function(can, meta, list, cb, target, field) {
return run(event, cmds, cb, silent)
}
// 工具栏
action.innerHTML = "", table.onaction && can.core.List(table.onaction.list, function(item) {
item === ""? can.page.Append(can, action, [{view: "item space"}]):
typeof item == "string"? can.onappend.input(can, action, "input", {type: "button", value: item, onclick: function(event) {
table.onaction[item](event, table, msg)
}}): item.length > 0? can.onappend.input(can, action, "input", {type: "select", values: item.slice(1), name: item[0], onchange: function(event) {
table.onaction[item[0]](event, table, msg, item[event.target.selectedIndex+1])
}}): typeof item == "object" && can.onappend.input(can, action, "input", item)
})
// 上下文
table.ondetail && table.ondetail.list && table.ondetail.list.length > 0 && (table._target.oncontextmenu = function(event) {
can.onappend.carte(sub, table.ondetail||{}, msg["_detail"] || sub.Conf("detail"), function(ev, item, meta) {
(table.ondetail[item]||table.onaction[item])(event, table, msg)
})
})
// 状态条
status.innerHTML = "", table.onexport && can.core.List(table.onexport.list, function(item) {
can.page.Append(can, status, [{view: "item "+item, title: item, list: [{text: [item+": ", "label"]}, {text: ["", "span"]}]}])
})
// 交互控件
can.onappend._action(table, action)
can.onappend._detail(table, msg, msg["_detail"] || sub.Conf("detail"), output)
can.onappend._status(table, status)
sub.Status("ncmd", sub._history.length+"/"+count)
})
sub._outputs.push(table)
@ -260,6 +241,40 @@ Volcanos("onappend", { _init: function(can, meta, list, cb, target, field) {
}); cb(sub);
},
_legend: function(can, legend) {
legend && (legend.onclick = function(event) { var msg = can.request(event)
can.core.List(["share", "pod"], function(key) { var value = can.user.Search(can, key)
value != undefined && msg.Option(key, can.user.Search(key))
})
can.core.List(["River", "Storm", "Action"], function(item) {
can.run(event, ["search", item+".onexport.key"])
})
var args = {}; can.core.List(msg.option, function(key) { args[key] = msg.Option(key) })
location.href = can.user.Share(can, args, true)
})
},
_action: function(can, action) { // [string [class item...] {}]
action.innerHTML = "", can.onaction && can.core.List(can.onaction.list, function(item) {
item === ""? can.page.Append(can, action, [{view: "item space"}]):
typeof item == "string"? can.onappend.input(can, action, "input", {type: "button", value: item, onclick: function(event) {
(can.onaction[item] || can.onkeymap && can.onkeymap._remote)(event, can, item)
}}): item.length > 0? can.onappend.input(can, action, "input", {type: "select", values: item.slice(1), name: item[0], onchange: function(event) {
can.onaction[item[0]](event, can, msg, item[event.target.selectedIndex+1])
}}): typeof item == "object" && can.onappend.input(can, action, "input", item)
})
},
_detail: function(can, msg, list, target) {
can.ondetail && can.ondetail.list && can.ondetail.list.length > 0 && (target.oncontextmenu = function(event) {
can.onappend.carte(can, can.ondetail||{}, list, function(ev, item, meta) {
(can.ondetail[item] || can.onaction[item] || can.onkeymap && can.onkeymap._remote)(event, can, item)
})
})
},
_status: function(can, status) {
status.innerHTML = "", can.onexport && can.core.List(can.onexport.list, function(item) {
can.page.Append(can, status, [{view: "item "+item, title: item, list: [{text: [item+": ", "label"]}, {text: ["", "span"]}]}])
})
},
item: function(can, target, type, item, cb, cbs) {
var ui = can.page.Append(can, target, [{view: [type, "div", item.nick||item.name],
oncontextmenu: function(event) { cbs(event, ui.item) }, click: function(event) {

View File

@ -140,7 +140,7 @@ fieldset div.code {
padding:10px;
overflow:auto;
border:solid 3px green;
max-height:640px;
/* max-height:640px; */
}
fieldset table {

View File

@ -325,6 +325,7 @@ var page = Volcanos("page", {help: "网页模块",
if (text.startsWith("http")) {return "<a href='"+text+"' target='_blank'>"+text+"</a>"}
text = text.replace(/\033\[31m/g, "<span style='color:#f00'>")
text = text.replace(/\033\[32m/g, "<span style='color:#0f0'>")
text = text.replace(/\033\[33m/g, "<span style='color:#ff0'>")
text = text.replace(/\033\[36m/g, "<span style='color:#0ff'>")
text = text.replace(/\033\[1m/g, "<span style='font-weight:bold'>")
text = text.replace(/\033\[0m/g, "</span>")

View File

@ -43,6 +43,7 @@ Volcanos("onexport", {help: "导出数据", list: [], _init: function(can, msg,
// console.log(event, sub, msg)
// 插件回调
//
msg.Option("index", value.index)
return can.run(event, can.onengine[cmds[0]]? cmds: [river, storm, index].concat(cmds), function(msg) {
can.run(msg._event, ["search", "Footer.onaction.ncmd"]);
can.onappend.toast(can, "执行成功", value.name, 2000);

View File

@ -50,6 +50,7 @@ fieldset.editor>div.output div.preview>div.item:hover {
}
fieldset.editor>div.output div.preview>div.item.select {
background-color:red;
height:20px; border:solid 1px yellow;
}
fieldset.editor>div.output div.content {
font-size:16px; font-family:monospace;

View File

@ -421,11 +421,11 @@ Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert"
_normal: function(can) { can.onkeymap._mode(can, "normal") },
_insert: function(can) { can.onkeymap._mode(can, "insert") },
_remote: function(event, can, key, arg) { can.ui.display.innerHTML = "", can.ui.profile.innerHTML = ""
_remote: function(event, can, key, arg, cb) { can.ui.display.innerHTML = "", can.ui.profile.innerHTML = ""
var p = can.onsyntax[can.parse]
can.display = p && p.profile && can.ui.profile || can.ui.display
var msg = can.request(event); msg.Option("content", can.onexport.content(can))
can.run(event, arg||["action", key, can.Option("path"), can.Option("name")], function(msg) {
can.run(event, arg||["action", key, can.Option("path"), can.Option("name")], cb||function(msg) {
if (msg.key && msg.time && msg.key.length != msg.time.length) {
msg.key && (msg.key = msg.key.slice(2))
}
@ -590,7 +590,7 @@ 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)
typeof p == "object"? can.page.Appends(can, target, [p]): target.innerHTML = p
},
@ -636,21 +636,15 @@ Volcanos("onaction", {help: "控件交互", list: ["", "项目", "", "上传", "
return target
},
"项目": function(event, can, msg) { can.onlayout.project(can) },
"上传": function(event, can, msg) { can.onappend.upload(can) },
"保存": function(event, can, msg) { can.onkeymap._remote(event, can, "保存") },
"运行": function(event, can, msg) { can.onkeymap._remote(event, can, "运行") },
"日志": function(event, can, msg) { can.onkeymap._remote(event, can, "日志") },
"记录": function(event, can, msg) { var sub = can.request(event)
"项目": function(event, can) { can.onlayout.project(can) },
"上传": function(event, can) { can.onappend.upload(can) },
"搜索": function(event, can) { can.onkeymap._remote(event, can, "搜索", ["action", "find", "vim.history", "", "id", "type", "name", "text"]) },
"记录": function(event, can) { var sub = can.request(event)
can.core.Item(can.Option(), sub.Option)
sub.Option("display", can.display.innerText)
can.onkeymap._remote(event, can, "记录", ["action", "记录"])
},
"复盘": function(event, can, msg) { can.onkeymap._remote(event, can, "复盘") },
"提交": function(event, can, msg) { can.onkeymap._remote(event, can, "提交") },
"历史": function(event, can, msg) { can.onkeymap._remote(event, can, "历史") },
"收藏": function(event, can, msg) {
"收藏": function(event, can) {
chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {
chrome.tabs.sendMessage(tabs[0].id, { action: "copy" }, function (response) {
var win = chrome.extension.getBackgroundPage();
@ -661,11 +655,11 @@ Volcanos("onaction", {help: "控件交互", list: ["", "项目", "", "上传", "
})
})
},
"列表": function(event, can, msg) { 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) {
can.onaction.delteLine(can, can.current)
can.onaction.deleteLine(can, can.current)
},
"合并行": function(event, can, msg) {
can.onaction.mergeLine(can, can.current)
@ -684,7 +678,6 @@ Volcanos("onlayout", {help: "页面布局", list: [], _init: function(can) {
can.onlayout.project(can)
can.onlayout.project(can)
},
project: function(can) { var hide = can.ui.project.style.display == "none"
var width = 80, height = 480;
can.page.Modify(can, can.ui.project, {style: {width: width, "max-height": height, display: hide? "": "none"}})

View File

@ -1,6 +1,5 @@
Volcanos("onimport", {help: "导入数据", list: [],
init: function(can, msg, cb, output, action, option) {output.innerHTML = "";
var table = can.page.AppendTable(can, output, msg, msg.append);
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { can._target.innerHTML = ""
var table = can.onappend.table(can, target, "table", msg)
table.onclick = function(event) {switch (event.target.tagName) {
case "SPAN":
case "TD":
@ -125,5 +124,3 @@ Volcanos("ondetail", {help: "组件详情", list: ["开始", "完成", "取消"]
})
Volcanos("onexport", {help: "导出数据", list: []})