1
0
mirror of https://shylinux.com/x/volcanos synced 2025-04-25 16:58:06 +08:00

opt engine

This commit is contained in:
shaoying 2020-06-03 22:24:05 +08:00
parent b94f768d74
commit a8485b8ecd
10 changed files with 92 additions and 30 deletions

View File

@ -1,8 +1,11 @@
Volcanos("onaction", { _init: function(can, meta, list, cb, target) {
// volcanos: 前端 火山架 我看不行
// FMS: a fieldset manager system
Volcanos("onengine", { _init: function(can, meta, list, cb, target) {
can.core.Next(meta.panes, function(item, next) {
can.onappend._init(can, item, meta.libs.concat(item.list), function(pane) {
pane.Conf(item), pane.run = function(event, cmds, cb) {
(can.onaction[cmds[0]]||can.onaction[meta.main.engine])(event, can, pane.request(event), pane, cmds, cb);
(can.onengine[cmds[0]]||can.onengine[meta.main.engine])(event, can, pane.request(event), pane, cmds, cb);
}, can[item.name] = pane, next();
}, can._target);
}, function() { can.onlayout._init(can, meta, list, function() {
@ -27,10 +30,13 @@ Volcanos("onaction", { _init: function(can, meta, list, cb, target) {
// 应用入口
can.user.title(can.user.Search(can, "title"))
var pane = can[meta.main.name], msg = can.request({});
pane.onaction._init(pane, msg, msg.option||[], cb, target);
pane.onaction && pane.onaction._init(pane, msg, msg.option||[], cb, target);
})
}, target) });
},
_merge: function(can, sub) { can.core.Item(sub, function(key, value) {
if (sub.hasOwnProperty(key)) { can.onengine[key] = value }
}); return true },
search: function(event, can, msg, pane, cmds, cb) { var chain = cmds[1]
var sub, mod = can, key, fun = can; can.core.List(chain.split("."), function(value, index, array) {
fun && (sub = mod, mod = fun, key = value, fun = mod[value])
@ -85,13 +91,14 @@ Volcanos("onaction", { _init: function(can, meta, list, cb, target) {
return false;
},
remote: function(event, can, msg, pane, cmds, cb) {
if (can.onaction.engine(event, can, msg, pane, cmds, cb)) { return }
if (can.onengine.engine(event, can, msg, pane, cmds, cb)) { return }
if (location.protocol == "file:") { typeof cb == "function" && cb(msg); return }
can.misc.Run(event, can, {names: pane._name}, cmds, cb)
},
})
Volcanos("onappend", { _init: function(can, meta, list, cb, target, field) {
field = field || can.onappend.field(can, target, meta.type||"plugin", meta);
var legend = can.page.Select(can, field, "legend")[0];
var option = can.page.Select(can, field, "form.option")[0];
var action = can.page.Select(can, field, "div.action")[0];
var output = can.page.Select(can, field, "div.output")[0];
@ -99,10 +106,22 @@ Volcanos("onappend", { _init: function(can, meta, list, cb, target, field) {
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)
})
// 添加插件
var sub = Volcanos(meta.name, { _help: meta.name, _target: field,
_option: option, _action: action, _output: output,
_follow: can._follow+"."+meta.name, _history: [],
_inputs: {}, _outputs: [],
Option: function(key, value) {
if (key == undefined) { value = {}
sub.page.Select(sub, option, "select.args,input.args", function(item) {
@ -138,7 +157,7 @@ Volcanos("onappend", { _init: function(can, meta, list, cb, target, field) {
// 添加控件
var args = can.base.Obj(meta.args, [])
can.core.Next(can.base.Obj(meta.inputs, []), function(item, next, index) {
sub[item.name] = Volcanos(item.name, { _help: item.name,
sub._inputs[item.name] = Volcanos(item.name, { _help: item.name,
_target: can.onappend.input(sub, option, item.type, item, args[index]),
_option: option, _action: action, _output: output,
_follow: can._follow+"."+meta.name+"."+item.name,
@ -168,8 +187,11 @@ Volcanos("onappend", { _init: function(can, meta, list, cb, target, field) {
if (!cmds[i]) { cmds.pop() } else { break }
}
var msg = sub.request(event); msg.Option("_action", item.name);
cmds[0] != "action" && sub._history.push(cmds);
var msg = sub.request(event); msg.Option("_action", item.name)
var last = sub._history[sub._history.length-1]
!can.core.Eq(last, cmds) && cmds[0] != "action" && sub._history.push(cmds)
run(event, cmds, cb, silent)
}
@ -187,26 +209,28 @@ Volcanos("onappend", { _init: function(can, meta, list, cb, target, field) {
})
})
var count = 0
function run(event, cmds, cb, silent) { sub.run(event, cmds, function(msg) {
sub.Status("ncmd", sub._history.length+"/"+count++)
if (silent) { typeof cb == "function" && cb(msg); return }
// 添加组件
var display = (msg.Option("_display")||feature.display||"table.js")
display.indexOf("/") == 0 || (display = "/plugin/"+display)
sub[display] = Volcanos(display, { _help: display, _target: output,
var table = Volcanos(display, { _help: display, _target: output,
_option: option, _action: action, _output: output,
_follow: can._follow+"."+meta.name+"."+display,
Option: sub.Option, Action: sub.Action, Status: sub.Status,
}, Volcanos.meta.libs.concat(["/frame.js", display]), function(table) { table.Conf(sub.Conf())
table.onimport && table.onimport._init && table.onimport._init(table, msg, msg.result||[], function() {}, output)
table.run = function(event, cmds, cb, silent) { cmds = cmds || []
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) {
@ -225,8 +249,9 @@ Volcanos("onappend", { _init: function(can, meta, list, cb, target, field) {
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)
})
var table = sub[display];
sub._outputs.push(table)
}, silent) }
}); cb(sub);

View File

@ -10,6 +10,10 @@ fieldset {
legend {
margin-left:10px;
}
legend:hover {
cursor:pointer;
background:red;
}
div.hidden {
display:none;
}

View File

@ -120,4 +120,27 @@ Volcanos("core", {help: "核心模块",
if (begin < list.length) { res.push(list.slice(begin)) }
return res
}),
Eq: function(obj, other) { var self = arguments.callee
// undefined null
// string number boolen
// object function
if (typeof obj != typeof other) {
return false
}
if (typeof obj == "object") {
for (var i = 0; i < obj.length; i++) {
if (!self(obj[i], other[i])) {
return false
}
}
for (var k in obj) {
if (!self(obj[k], other[k])) {
return false
}
}
return true
}
return obj === other
}
})

View File

@ -52,7 +52,7 @@ Volcanos("misc", {help: "工具模块",
}
msg._xhr = xhr
}),
Run: shy("请求后端", {order: 0}, function(event, can, dataset, cmd, cb) {
Run: shy("请求后端", {order: 0}, function(event, can, dataset, cmd, cb) { event = event || {}
var msg = (can.request||can.Event)(event);
// 解析参数

View File

@ -37,9 +37,10 @@ Volcanos("onexport", {help: "导出数据", list: [], _init: function(can, msg,
value.width = can._target.offsetWidth
value.height = can._target.offsetHeight
can.onappend._init(can, value, Volcanos.meta.libs.concat(["/plugin/state.js"]), function(sub) {
sub.run = function(event, cmds, cb, silent) { var msg = can.request(event, event._msg||{_msg: sup});
sub.run = function(event, cmds, cb, silent) { var msg = can.request(event)
can.Conf("active", sub.Option())
can.Conf("action", value.name)
// console.log(event, sub, msg)
// 插件回调
can.run(event, [river, storm, index].concat(cmds), function(msg) {
can.run(msg._event, ["search", "Footer.onaction.ncmd"]);

View File

@ -31,11 +31,11 @@ Volcanos("onaction", {help: "交互数据", list: [], _init: function(can, msg,
})
},
title: function(event, can, key) { var msg = can.request(event)
can.core.List(["River", "Storm", "Action"], function(item) {
can.run(event, ["search", item+".onexport.key"])
can.core.List(["share", "pod"], function(key) { var value = can.user.Search(can, key)
value != undefined && msg.Option(key, can.user.Search(key))
})
var args = {}; can.core.List(msg.option, function(key) { args[key] = msg.Option(key) })
location.href = can.user.Share(can, args)
location.href = can.user.Share(can, args, true)
},
username: function(event, can, key) {
if (can.user.confirm("logout?")) {

View File

@ -1,3 +1,6 @@
fieldset.editor>div.action {
clear:none;
}
fieldset.editor>div.action>div.file {
border:solid 2px red;
padding:2px;
@ -11,6 +14,7 @@ fieldset.editor>div.action>div.file:hover {
fieldset.editor>div.action>div.file.select {
background-color:green;
}
fieldset.editor>div.output {
min-height:300px;
}

View File

@ -32,6 +32,9 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb,
})
}, onblur: function(event) {
can.onaction.modifyLine(can, can.current, can.editor.value)
}, onclick: function(event) {
}, ondblclick: function(event) {
can.onkeymap._mode(can, "insert")
}},
])
@ -110,7 +113,7 @@ Volcanos("onsyntax", {help: "语法高亮", list: ["keyword", "prefix", "line"],
// plugin
function init() {
can.onkeymap._remote(event, can, "运行")
can.onkeymap._remote(null, can, "运行")
typeof p.display == "object" && (
p.display.height && can.page.Modify(can, can.ui.display, {style: {
"max-height": p.display.height,
@ -164,6 +167,7 @@ Volcanos("onsyntax", {help: "语法高亮", list: ["keyword", "prefix", "line"],
"do": "keyword",
"done": "keyword",
"local": "keyword",
"echo": "keyword",
"kill": "keyword",
"let": "keyword",
@ -171,18 +175,22 @@ Volcanos("onsyntax", {help: "语法高亮", list: ["keyword", "prefix", "line"],
"xargs": "function",
"date": "function",
"find": "function",
"grep": "function",
"sed": "function",
"awk": "function",
"pwd": "function",
"ps": "function",
"ls": "function",
"rm": "function",
"go": "function",
"export": "keyword",
"source": "keyword",
"require": "keyword",
},
prefix: {"#": "comment"},
suffix: {"&": "comment"},
suffix: {"{": "comment"},
line: function(can, line) { return line },
},
vim: {
@ -553,7 +561,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
},
@ -605,6 +613,7 @@ Volcanos("onaction", {help: "控件交互", list: ["项目", "上传", "保存",
"提交": 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) { can.onkeymap._remote(event, can, "日志") },
"记录": function(event, can, msg) {
var sub = can.request(event)
can.core.Item(can.Option(), sub.Option)
@ -652,10 +661,7 @@ Volcanos("onlayout", {help: "页面布局", list: [], _init: function(can) {
can.page.Modify(can, can.ui.editor, style)
},
})
Volcanos("ondaemon", {help: "数据刷新", list: [], _init: function(can) {
},
})
Volcanos("onexport", {help: "导出数据", list: ["输入法", "输入值", "文件名", "解析器", "当前行"],
Volcanos("onexport", {help: "导出数据", list: ["输入法", "输入值", "文件名", "解析器", "当前行", "ncmd"],
content: function(can) {
return can.page.Select(can, can._output, "div.content>pre.item", function(item) {
return can.current == item? can.editor.value: item.innerText

View File

@ -1,5 +1,4 @@
Volcanos("onimport", {help: "导入数据", list: [],
_init: function(can, msg, list, cb, target) { can._output.innerHTML = "";
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) { can._output.innerHTML = "";
can.onappend.table(can, target, "table", msg)
// if (msg.Option("_display") == "table") {
@ -20,7 +19,7 @@ Volcanos("onimport", {help: "导入数据", list: [],
var meta = JSON.parse(data.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, ["field", "action", "story", data.type, data.name, data.text].concat(cmds), cb, silent)
can.run(event, ["action", "story", data.type, data.name, data.text].concat(cmds), cb, true)
}
}, can._output, item)
})

View File

@ -1,6 +1,3 @@
// volcanos: 前端 火山架 我看不行
// FMS: a fieldset manager system
function shy(help, meta, list, cb) {
var index = -1, value = "", type = "string", args = arguments; function next(check) {
if (++index >= args.length) {return false}
@ -29,7 +26,7 @@ var Volcanos = shy("火山架", {cache: {}, index: 1, order: 1, debug: {
_head: document.head, _body: document.body,
_width: window.innerWidth, _height: window.innerHeight,
}, libs = Preload.concat(Config.volcano), cb = function(can) {
can.onaction._init(can, can.Conf(Config), [], function(msg) {
can.onengine._init(can, can.Conf(Config), [], function(msg) {
}, can._target)
}
}
@ -43,7 +40,9 @@ var Volcanos = shy("火山架", {cache: {}, index: 1, order: 1, debug: {
}
for (var i = 0; i < cache.length; i++) {
typeof cb == "function" && cb(can, name, cache[i]) || (can[cache[i]._name] = cache[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]
// 加载索引
}
meta.cache[name] = cache;
@ -209,3 +208,4 @@ var Volcanos = shy("火山架", {cache: {}, index: 1, order: 1, debug: {
return can.require(libs, cb), can
})