mirror of
https://shylinux.com/x/volcanos
synced 2025-04-25 08:48:06 +08:00
opt engine
This commit is contained in:
parent
b94f768d74
commit
a8485b8ecd
45
frame.js
45
frame.js
@ -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);
|
||||
|
@ -10,6 +10,10 @@ fieldset {
|
||||
legend {
|
||||
margin-left:10px;
|
||||
}
|
||||
legend:hover {
|
||||
cursor:pointer;
|
||||
background:red;
|
||||
}
|
||||
div.hidden {
|
||||
display:none;
|
||||
}
|
||||
|
23
lib/core.js
23
lib/core.js
@ -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
|
||||
}
|
||||
})
|
||||
|
@ -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);
|
||||
|
||||
// 解析参数
|
||||
|
@ -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"]);
|
||||
|
@ -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?")) {
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
})
|
||||
|
10
proto.js
10
proto.js
@ -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
|
||||
})
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user