1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-25 16:58: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) typeof cb == "function" && cb(msg)
return true return true
case "Action": case "Action":
var river = can.onengine.river[cmds[0]||can.user.Search(can, "river")]; var river = can.onengine.river[cmds[0]]
var storm = river && river.storm[cmds[1]||can.user.Search(can, "storm")]; var storm = river && river.storm[cmds[1]]
var action = storm && storm.action[cmds[2]]; var action = storm && storm.action && storm.action[cmds[2]]
if (!storm) { break } if (cmds.length == 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) { can.core.List(storm.action, function(value) {
msg.Push("name", value.name||""); msg.Push("name", value.name||"")
msg.Push("help", value.help||""); msg.Push("help", value.help||"")
msg.Push("pod", value.pod||""); msg.Push("pod", value.pod||"")
msg.Push("group", value.group||""); msg.Push("group", value.group||"")
msg.Push("index", value.index||""); msg.Push("index", value.index||"")
msg.Push("args", value.args||"[]"); msg.Push("args", value.args||"[]")
msg.Push("inputs", JSON.stringify(value.inputs||[])); msg.Push("inputs", JSON.stringify(value.inputs||[]))
msg.Push("feature", JSON.stringify(value.feature||{})); msg.Push("feature", JSON.stringify(value.feature||{}))
}) })
typeof cb == "function" && cb(msg); typeof cb == "function" && cb(msg);
} else if (action.engine) { } else if (action && action.engine) {
action.engine(event, can, msg, pane, cmds, cb); action.engine(event, can, msg, pane, cmds, cb)
} else { } else if (action) {
msg.Option("group", action.group) msg.Option("group", action.group)
msg.Option("index", action.index) msg.Option("index", action.index)
return false return false
} else {
return false
} }
return true 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 action = can.page.Select(can, field, "div.action")[0];
var output = can.page.Select(can, field, "div.output")[0]; var output = can.page.Select(can, field, "div.output")[0];
var status = can.page.Select(can, field, "div.status")[0]; var status = can.page.Select(can, field, "div.status")[0];
var feature = can.base.Obj(meta.feature) var feature = can.base.Obj(meta.feature)
can.page.ClassList.add(can, field, feature.style||"") can.page.ClassList.add(can, field, feature.style||"")
can.onappend._legend(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)
})
// 添加插件 // 添加插件
var sub = Volcanos(meta.name, { _help: meta.name, _target: field, 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 || "" return item.name && item.value || ""
}); for (var i = cmds.length-1; i >= 0; i--) { }); for (var i = cmds.length-1; i >= 0; i--) {
if (!cmds[i]) { cmds.pop() } else { break } 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) return run(event, cmds, cb, silent)
} }
// 工具栏 // 交互控件
action.innerHTML = "", table.onaction && can.core.List(table.onaction.list, function(item) { can.onappend._action(table, action)
item === ""? can.page.Append(can, action, [{view: "item space"}]): can.onappend._detail(table, msg, msg["_detail"] || sub.Conf("detail"), output)
typeof item == "string"? can.onappend.input(can, action, "input", {type: "button", value: item, onclick: function(event) { can.onappend._status(table, status)
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"]}]}])
})
sub.Status("ncmd", sub._history.length+"/"+count) sub.Status("ncmd", sub._history.length+"/"+count)
}) })
sub._outputs.push(table) sub._outputs.push(table)
@ -260,6 +241,40 @@ Volcanos("onappend", { _init: function(can, meta, list, cb, target, field) {
}); cb(sub); }); 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) { item: function(can, target, type, item, cb, cbs) {
var ui = can.page.Append(can, target, [{view: [type, "div", item.nick||item.name], var ui = can.page.Append(can, target, [{view: [type, "div", item.nick||item.name],
oncontextmenu: function(event) { cbs(event, ui.item) }, click: function(event) { oncontextmenu: function(event) { cbs(event, ui.item) }, click: function(event) {

View File

@ -140,7 +140,7 @@ fieldset div.code {
padding:10px; padding:10px;
overflow:auto; overflow:auto;
border:solid 3px green; border:solid 3px green;
max-height:640px; /* max-height:640px; */
} }
fieldset table { 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>"} 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\[31m/g, "<span style='color:#f00'>")
text = text.replace(/\033\[32m/g, "<span style='color:#0f0'>") 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\[36m/g, "<span style='color:#0ff'>")
text = text.replace(/\033\[1m/g, "<span style='font-weight:bold'>") text = text.replace(/\033\[1m/g, "<span style='font-weight:bold'>")
text = text.replace(/\033\[0m/g, "</span>") 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) // 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) { 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.run(msg._event, ["search", "Footer.onaction.ncmd"]);
can.onappend.toast(can, "执行成功", value.name, 2000); 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 { fieldset.editor>div.output div.preview>div.item.select {
background-color:red; background-color:red;
height:20px; border:solid 1px yellow;
} }
fieldset.editor>div.output div.content { fieldset.editor>div.output div.content {
font-size:16px; font-family:monospace; 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") }, _normal: function(can) { can.onkeymap._mode(can, "normal") },
_insert: function(can) { can.onkeymap._mode(can, "insert") }, _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] var p = can.onsyntax[can.parse]
can.display = p && p.profile && can.ui.profile || can.ui.display can.display = p && p.profile && can.ui.profile || can.ui.display
var msg = can.request(event); msg.Option("content", can.onexport.content(can)) 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) { if (msg.key && msg.time && msg.key.length != msg.time.length) {
msg.key && (msg.key = msg.key.slice(2)) 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) 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
}, },
@ -636,21 +636,15 @@ Volcanos("onaction", {help: "控件交互", list: ["", "项目", "", "上传", "
return target return target
}, },
"项目": function(event, can, msg) { can.onlayout.project(can) }, "项目": function(event, can) { can.onlayout.project(can) },
"上传": function(event, can, msg) { can.onappend.upload(can) }, "上传": function(event, can) { can.onappend.upload(can) },
"保存": function(event, can, msg) { can.onkeymap._remote(event, can, "保存") }, "搜索": function(event, can) { can.onkeymap._remote(event, can, "搜索", ["action", "find", "vim.history", "", "id", "type", "name", "text"]) },
"运行": function(event, can, msg) { can.onkeymap._remote(event, can, "运行") }, "记录": function(event, can) { var sub = can.request(event)
"日志": function(event, can, msg) { can.onkeymap._remote(event, can, "日志") },
"记录": function(event, can, msg) { 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)
can.onkeymap._remote(event, can, "记录", ["action", "记录"]) can.onkeymap._remote(event, can, "记录", ["action", "记录"])
}, },
"复盘": function(event, can, msg) { can.onkeymap._remote(event, can, "复盘") }, "收藏": function(event, can) {
"提交": function(event, can, msg) { can.onkeymap._remote(event, can, "提交") },
"历史": function(event, can, msg) { can.onkeymap._remote(event, can, "历史") },
"收藏": function(event, can, msg) {
chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) { chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {
chrome.tabs.sendMessage(tabs[0].id, { action: "copy" }, function (response) { chrome.tabs.sendMessage(tabs[0].id, { action: "copy" }, function (response) {
var win = chrome.extension.getBackgroundPage(); 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) { "删除行": function(event, can, msg) {
can.onaction.delteLine(can, can.current) can.onaction.deleteLine(can, can.current)
}, },
"合并行": function(event, can, msg) { "合并行": function(event, can, msg) {
can.onaction.mergeLine(can, can.current) 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)
can.onlayout.project(can) can.onlayout.project(can)
}, },
project: function(can) { var hide = can.ui.project.style.display == "none" project: function(can) { var hide = can.ui.project.style.display == "none"
var width = 80, height = 480; var width = 80, height = 480;
can.page.Modify(can, can.ui.project, {style: {width: width, "max-height": height, display: hide? "": "none"}}) 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: [], Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { can._target.innerHTML = ""
init: function(can, msg, cb, output, action, option) {output.innerHTML = ""; var table = can.onappend.table(can, target, "table", msg)
var table = can.page.AppendTable(can, output, msg, msg.append);
table.onclick = function(event) {switch (event.target.tagName) { table.onclick = function(event) {switch (event.target.tagName) {
case "SPAN": case "SPAN":
case "TD": case "TD":
@ -125,5 +124,3 @@ Volcanos("ondetail", {help: "组件详情", list: ["开始", "完成", "取消"]
}) })
Volcanos("onexport", {help: "导出数据", list: []}) Volcanos("onexport", {help: "导出数据", list: []})