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

opt callfunc

This commit is contained in:
shaoying 2021-01-17 07:37:12 +08:00
parent 61d2dc2cde
commit 48284b2235
19 changed files with 95 additions and 82 deletions

View File

@ -293,8 +293,8 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
can.run(event, cmds, function(msg) {
var sub = can.core.Value(can, "_outputs.-1")
if (can.core.CallFunc("onimport._process", [sub, msg, cmds, cb], sub)) { return }
if (can.core.CallFunc("onimport._process", [can, msg, cmds, cb], can)) { return }
if (can.core.CallFunc([sub, "onimport._process"], [sub, msg, cmds, cb])) { return }
if (can.core.CallFunc([can, "onimport._process"], [can, msg, cmds, cb])) { return }
typeof cb == "function" && cb(msg)
}, silent)
return true
@ -304,8 +304,8 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
return can.run(event, cmds||[], function(msg) {
var sub = can.core.Value(can, "_outputs.-1")
if (can.core.CallFunc("onimport._process", [sub, msg, cmds, cb], sub)) { return }
if (can.core.CallFunc("onimport._process", [can, msg, cmds, cb], can)) { return }
if (can.core.CallFunc([sub, "onimport._process"], [sub, msg, cmds, cb])) { return }
if (can.core.CallFunc([can, "onimport._process"], [can, msg, cmds, cb])) { return }
typeof cb == "function" && cb(msg)
if (silent) { return }
@ -381,21 +381,6 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
item.action == "auto" && (input.dataset.action = "auto")
switch (item.type = item.type||item._input||"text") {
case "upfile": item.type = "file"; break
case "button":
item.value = item.value||item.name||"查看";
break
case "select": input.type = "select"
item.values = typeof item.values == "string"? item.values.split(" "): item.values
if (!item.values && item.value) {
item.values = item.value.split("|") , item.value = item.values[0]
if (item.values[0] == "day") { item.value = item.values[1] }
}
item.value = value || item.value, input.list = item.values.map(function(value) {
return {type: "option", value: value, inner: value}
}), item.className || can.page.ClassList.add(can, item, "args")
break
case "textarea": input.type = "textarea"
item.style.width = item.style.width || can.Conf(["feature", "textarea", item.name, "width"].join(".")) || can.Conf(["feature", "textarea", "width"].join(".")) || 400
item.style.height = item.style.height || can.Conf(["feature", "textarea", item.name, "height"].join(".")) || can.Conf(["feature", "textarea", "height"].join(".")) || 30
@ -403,31 +388,42 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
case "password":
// no break
case "text":
item.autocomplete = "off"
item.value = value || item.value || ""
item.className || can.page.ClassList.add(can, item, "args")
item.autocomplete = "off"
break
case "select": input.type = "select"
item.values = typeof item.values == "string"? can.core.Split(item.values): item.values
if (!item.values && item.value) {
item.values = can.core.Split(item.value), item.value = item.values[0]
if (item.values[0] == "day") { item.value = item.values[1] }
}
item.value = value||item.value, input.list = item.values.map(function(value) {
return {type: "option", value: value, inner: value}
}), item.className || can.page.ClassList.add(can, item, "args")
break
case "button": item.value = value||item.value||item.name||"查看"; break
case "upfile": item.type = "file"; break
}
return can.page.Append(can, target, [{view: ["item "+item.type], list: [{text: [name, "label"]}, {text: [": ", "label"]}, input]}])[item.name]
return can.page.Append(can, target, [{view: ["item "+item.type], list: [input]}])[item.name]
},
table: function(can, type, msg, cb, target) {
table: function(can, msg, cb, target) {
var table = can.page.AppendTable(can, msg, target||can._output, msg.append, cb||function(value) {
return {text: [value, "td"]}
})
table && can.page.Modify(can, table, {className: type||"content"})
}); table && can.page.Modify(can, table, {className: "content"})
return table
},
board: function(can, type, text, target) { text = can.page.Display(text || "")
return text && can.page.Append(can, target, [{view: ["code "+(type||""), "div", text]}]).code
board: function(can, text, target) { text = can.page.Display(text || "")
return text && can.page.Append(can, target, [{view: ["code", "div", text]}]).code
},
figure: function(can, meta, key, target) {
if (key.indexOf("@") != 0) { return }
var list = can.core.Split(key, "@=", "@=", {simple: true})
var list = can.core.Split(key, "@=", "@=")
var pkey = list[0], pval = list[1]||""
can.page.Modify(can, target, {autocomplete: "off"})
target.type != "button" && target.value.startsWith("@") && (target.value = pval||"")
pkey && can.require(["/plugin/input/"+pkey+".js"], function(can) {
@ -442,24 +438,24 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
} })
})
},
_plugin: function(can, msg, meta, cb, target) {
meta.feature = can.base.Obj(msg.meta&&msg.meta[0] || "{}", {})
meta.inputs = can.base.Obj(msg.list&&msg.list[0] || "[]", [])
_plugin: function(can, value, meta, cb, target) {
meta.feature = can.base.Obj(value.meta||"{}", {})
meta.inputs = can.base.Obj(value.list||"[]", [])
meta.name = meta.name || msg.name&&msg.name[0] || "story"
meta.help = meta.help || msg.help&&msg.help[0] || "story"
meta.width = meta.width || can.Conf("width")
meta.type = "story"
meta.name = meta.name||value.name||"story"
meta.help = meta.help||value.help||"story"
meta.width = meta.width||can.Conf("width")
meta.type = meta.type||"story"
can.onappend._init(can, meta, ["/plugin/state.js"], function(sub) {
typeof cb == "function" && cb(sub, meta)
sub.page.Remove(sub, sub._legend)
}, target || can._output)
}, target||can._output)
},
plugin: function(can, meta, cb, target) { meta = meta || {}
can.run({}, ["action", "command", meta.index], function(msg) {
can.onappend._plugin(can, msg, meta, cb, target)
}, true)
can.run({}, ["action", "command", meta.index], function(msg) { msg.Table(function(value) {
can.onappend._plugin(can, value, meta, cb, target)
}) }, true)
},
plugins: function(can, meta, cb, target) {
can.onappend.plugin(can, meta, function(sub) {
@ -493,7 +489,7 @@ Volcanos("onlayout", {help: "页面布局", list: [], _init: function(can, targe
can.page.Select(can, target, ["fieldset.main>div.output"], function(output) {
can.page.Modify(can, output, {style: {height: height}})
})
can.onengine.signal(can, "resize", can.request(event, {width: width, height: height}))
can.onengine.signal(can, "resize", can.request({}, {width: width, height: height}))
},
topic: function(can, topic) { topic && (can._topic = topic)
can.user.topic(can, can._topic || can.user.Search(can, "topic") || ((can.user.Search(can, "pod")||can.base.isNight())? "black": "white"))

View File

@ -55,6 +55,19 @@ Volcanos("core", {help: "核心模块",
next(obj, cb, 0)
}),
Keys: function() { var list = []
for (var i = 0; i < arguments.length; i++) { var v = arguments[i]
switch (typeof v) {
case "number": list.push(v+""); break
case "string": list.push(v); break
case "object": list.push(arguments.callee.apply(this, v)); break
case "function": list.push(v()); break
default: list.push(v+"")
}
}
return list.join(".")
},
Value: function(data, key, value) {
if (data == undefined) { return }
if (key == undefined) { return data }
@ -70,24 +83,26 @@ Volcanos("core", {help: "核心模块",
p = p[ls[0]], ls = ls.slice(1)
}; return p
},
CallFunc: shy("调用器", function(func, args, mod) {
func = typeof func == "string"? this.Value(mod, func): func
CallFunc: shy("调用器", function(func, args, mod) { args = args||{}
var can = args["can"]||args[0], msg = args["msg"]||args[1]
func = typeof func == "function"? func: typeof func == "string"? this.Value(mod||can, func):
typeof func == "object" && func.slice? this.Value(func, this.Keys(func.slice(1))): null
if (typeof func != "function") { return }
var ls = func.toString(); ls = ls.split(")")[0], ls = ls.split("(")[1]
var msg = args["msg"], can = args["can"], echo = false
var list = []; this.List(ls.split(","), function(item, index) { item = item.trim()
list.push(args[index] || args[item] || msg&&msg.Option(item) || can&&can.Conf(item))
var cb = args["cb"]
var ls = func.toString().split(")")[0].split("(")[1].split(",")
var list = [], echo = false; this.List(ls, function(item, index) { item = item.trim()
list.push(args[item] || msg&&msg.Option&&msg.Option(item) || args[index] || can&&can.Conf&&can.Conf(item) || null)
if (item == "cb") { echo = true }
})
var res = typeof func == "function" && func.apply(mod||this, list)
if (!echo && typeof args.cb == "function") { res && args.msg.Echo(res), args.cb(args.msg) }
var res = func.apply(mod||can, list)
if (!echo && typeof cb == "function") { res && msg.Echo(res), cb(msg) }
return res
}),
Split: shy("分词器", function(str) { if (!str || !str.length) { return [] }
var opt = {simple: false}, arg = []; for (var i = 1; i < arguments.length; i++) {
var opt = {detail: false}, arg = []; for (var i = 1; i < arguments.length; i++) {
typeof arguments[i] == "object"? opt = arguments[i]: arg.push(arguments[i])
}
@ -109,7 +124,7 @@ Volcanos("core", {help: "核心模块",
if (!space) {
res.push(list.slice(begin, i))
}
opt.simple || res.push({text: list.slice(i, i+1), type: "space", left: left})
opt.detail && res.push({text: list.slice(i, i+1), type: "space", left: left})
space = true, begin = i+1
}
} else if (subs[list[i]]) {

View File

@ -13,7 +13,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
typeof cb == "function" && cb(msg)
},
_table: function(can, msg, fields) { can.onmotion.clear(can, can.ui.content)
var table = can.onappend.table(can, "content", msg, function(value, key, index, line) {
var table = can.onappend.table(can, msg, function(value, key, index, line) {
can.Status("count", index+1)
return {text: [key == "text" && typeof line.text == "function" && line.text.help || value, "td"], onclick: function(event) {
if (event.shiftKey) { var msg = can.request(event, line)

View File

@ -39,9 +39,10 @@ Volcanos("onaction", {help: "控件交互", list: [], _init: function(can, meta,
onkeydown: function(event, can) { var target = event.target
can.onkeypop.input(event, can, target); switch (event.key) {
case "Enter":
if (can.Conf("type") == "text") { event.target.setSelectionRange(0, -1), can.run(event) }
if (can.Conf("type") == "textarea") { if (event.ctrlKey) { break } can.run(event) }
event.stopPropagation(), event.preventDefault(); break
switch (can.Conf("type")) {
case "textarea": if (!event.ctrlKey) { return }
case "text": event.target.setSelectionRange(0, -1); break
}; can.run(event), event.stopPropagation(), event.preventDefault(); break
case "b": if (event.ctrlKey) { can.CloneInput() } break
case "m": if (event.ctrlKey) { can.CloneField() } break
}

View File

@ -8,7 +8,7 @@ Volcanos("onfigure", {help: "控件详情", list: [], key: {onclick: function(ev
{button: ["关闭", function(event) { can.page.Remove(can, figure.fieldset) }]},
], figure.action)
can.onappend.table(can, "content", msg, function(value, key, index, line) {
can.onappend.table(can, msg, function(value, key, index, line) {
return {type: "td", inner: value, onclick: function() {
target.value = value, msg.Option("_refresh") && run()
can.page.Remove(can, figure.fieldset)

View File

@ -2,7 +2,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
can.ui = can.onlayout.display(can, target)
can.ui.canvas = can.page.Append(can, can.ui.display, [{type: "canvas", width: 320, height: 240, style: {display: "none"}}]).first
can.onappend.table(can, "content", msg, function(value, key, index, line, array) {
can.onappend.table(can, msg, function(value, key, index, line, array) {
return {text: [value, "td"], onclick: function(event) {
can.sup.onaction.change(event, can.sup, key, value, function(msg) {
can.run(event)
@ -10,7 +10,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
}}
}, can.ui.content)
can.onappend.board(can, "content", msg.Result(), can.ui.display)
can.onappend.board(can, msg.Result(), can.ui.display)
typeof cb == "function" && cb(msg)
},
})

View File

@ -118,7 +118,7 @@ Volcanos("onsyntax", {help: "语法高亮", list: ["keyword", "prefix", "line"],
p = can.onsyntax[p.link] || p
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 || "{[(|)]}", {detail: true}), function(item, index, array) {
item = typeof item == "object"? item: {text: item}, p.word && (item = p.word(item, index, array))
var text = item.text; var key = item.keyword||p.keyword[text]
@ -269,7 +269,7 @@ Volcanos("onaction", {help: "控件交互", list: [],
toast.Close()
can.ui.tags.innerHTML = ""
can.onappend.table(can, "content", msg, function(value, key, index, line) { can.Status("标签数", index+1)
can.onappend.table(can, msg, function(value, key, index, line) { can.Status("标签数", index+1)
value = value.replace("<", "&lt;").replace(">", "&gt;"), value = value.replace("./", "")
return {text: ["", "td"], list: [{text: [value, "div"]}], onclick: function(event) {
line.line && can.onimport.tabview(can, can.Option("path"), line.file.replace("./", ""), parseInt(line.line), function() {

View File

@ -98,10 +98,10 @@ Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert"
toast.Close()
can.ui.output.innerHTML = ""
can.onappend.table(can, "content", msg, function(value, key, index) {
can.onappend.table(can, msg, function(value, key, index) {
return {text: [value, "td"]}
}, can.ui.output)
can.onappend.board(can, "content", msg.Result(), can.ui.output)
can.onappend.board(can, msg.Result(), can.ui.output)
}, true)
},
_engine: {
@ -142,7 +142,7 @@ Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert"
can.page.Modify(can, can.ui.command, {style: {display: "none"}, value: ""})
can.onkeymap._normal(can)
},
Enter: function(event, can) { var line = can.ui.command.value || can.ui.cmd.value ; var ls = can.core.Split(line, " ", ",", {simple: true})
Enter: function(event, can) { var line = can.ui.command.value || can.ui.cmd.value ; var ls = can.core.Split(line, " ", ",")
var cb = can.onkeymap._engine[ls[0]]; typeof cb == "function"? cb(event, can, line, ls):
can.onkeymap._remote(event, can, line, ["action", "command"].concat(ls))

View File

@ -1,7 +1,7 @@
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb) {
can.ui = can.page.Appends(can, can._target, [{view: "content"}, {view: "display"}])
can.table = can.onappend.table(can, "content", msg, function(value, key, index, line) {
can.table = can.onappend.table(can, msg, function(value, key, index, line) {
return {text: [value, "td"], oncontextmenu: function(event) {
can.user.carte(event, can, can.ondetail, can.ondetail.list, function(ev, cmd, meta) {
var cb = meta[cmd]; cb && cb(event, can, cmd, value, key, index, line)

View File

@ -598,8 +598,8 @@ Volcanos("onaction", {help: "组件菜单", list: [
_mode: {
run: function(event, can) { var target = event.target
event.type == "click" && target.Value("type") && can.run(event, ["action", "run", target.Value("zone"), target.Value("type"), target.Value("name"), target.Value("text")], function(msg) {
can.onappend.table(can, "content", msg, function() {}, can.ui.display)
can.onappend.board(can, "content", msg.Result(), can.ui.display)
can.onappend.table(can, msg, function() {}, can.ui.display)
can.onappend.board(can, msg.Result(), can.ui.display)
}, true)
},
translate: function(event, can, point) {

View File

@ -5,7 +5,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
})
can.ui = can.onlayout.display(can, target)
can.onappend.table(can, "content", can.path, function(value, key) {
can.onappend.table(can, can.path, function(value, key) {
return {type: "td", inner: value, onclick: function(event) {
can.sup.onaction.change(event, can.sup, key, value, function(msg) {
can.onimport._init(can, msg, list, cb, target)

View File

@ -7,7 +7,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
can.page.Modify(can, can._target, {style: {"max-width": can.Conf("width")}})
if (msg.Option("_display") == "table") {
return can.onappend.table(can, "content", msg, function(value, key) {
return can.onappend.table(can, msg, function(value, key) {
return {text: [value, "td"], onclick: function(event) {
can.sup.onaction.change(event, can.sup, key, value, function(msg) {
can.run(event)

View File

@ -1,8 +1,7 @@
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, conf, list, cb, target) {
},
_process: function(can, msg, cmds, cb, silent) {
var action = can.onimport[msg.Option("_process") || can.Conf("feature._process")]
return typeof action == "function" && action(can, msg, cmds, cb, silent)
return can.core.CallFunc([can.onimport, msg.Option("_process")], [can, msg, cmds, cb, silent])
},
_progress: function(can, msg, cmds, cb, silent) {
var size = msg.Append("size") || msg.Append("count")

View File

@ -151,7 +151,7 @@ Volcanos("onaction", {help: "组件菜单", list: ["编辑", "清空", ["view",
},
"数据源": function(event, can) {
can.onmotion.clear(can, can.sub.ui.display)
can.onappend.table(can, "content", can.msg, null, can.sub.ui.display)
can.onappend.table(can, can.msg, null, can.sub.ui.display)
},
})
Volcanos("onexport", {help: "导出数据", list: ["from", "commit", "total", "date", "begin", "add", "del", "close", "note"]})

View File

@ -7,11 +7,11 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
typeof cb == "function" && cb(msg)
can.page.Append(can, can.ui.content, [can.onimport._control(can, msg)])
can.onappend.table(can, "content", msg, function(value, key, index, line, array) {
can.onappend.table(can, msg, function(value, key, index, line, array) {
return can.onimport._table(can, value, key, index, line, array)
}, can.ui.content)
can.onappend.board(can, "content", msg.Result(), can.ui.display)
can.onappend.board(can, msg.Result(), can.ui.display)
can.onimport._board(can, msg)
},
_table: function(can, value, key, index, line, array) {
@ -72,11 +72,11 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
return true
},
_inner: function(can, msg) {
can.onappend.table(can, "content", msg, function(value, key, index, line, array) {
can.onappend.table(can, msg, function(value, key, index, line, array) {
return can.onimport._table(can, value, key, index, line, array)
}, can.ui.display)
can.onappend.board(can, "content", msg.Result(), can.ui.display)
can.onappend.board(can, msg.Result(), can.ui.display)
can.onimport._board(can, msg)
return true
},
@ -112,7 +112,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
can.run(event)
}]},
{select: [["cache.field"].concat(msg["append"]||can.core.Split(msg.Option("fields"), {simple: true})), function(event) {
{select: [["cache.field"].concat(msg["append"]||can.core.Split(msg.Option("fields"))), function(event) {
can.run(event)
}], _init: function(item) {
item.value = msg.Option("cache.field") || item.value

View File

@ -17,7 +17,7 @@ var Volcanos = shy("火山架", {libs: [], cache: {}}, [], function(name, can, l
meta.libs = Config.libs, meta.volcano = Config.volcano
// 预加载
var Preload = []; Config.panes.forEach(function(pane) {
var Preload = [Config.volcano]; Config.panes.forEach(function(pane) {
Preload = Preload.concat(pane.list = pane.list || ["/pane/"+pane.name+".css", "/pane/"+pane.name+".js"])
}); Preload = Preload.concat(Config.plugin)
@ -32,7 +32,7 @@ var Volcanos = shy("火山架", {libs: [], cache: {}}, [], function(name, can, l
}
}
list.push(can = can || {}), can.__proto__ = {__proto__: Volcanos.meta, _name: name, _load: function(name, cb) {
can = can || {}, can.__proto__ = {__proto__: Volcanos.meta, _name: name, _load: function(name, cb) {
// 加载缓存
var cache = meta.cache[name] || []; for (list.reverse(); list.length > 0; list) {
var sub = list.pop(); sub != can && cache.push(sub)
@ -72,6 +72,8 @@ var Volcanos = shy("火山架", {libs: [], cache: {}}, [], function(name, can, l
if (_can_name) {
meta.cache[_can_name] = meta.cache[_can_name] || []
meta.cache[_can_name].push(can)
} else {
list.push(can)
}
return can.require(libs, cb), can
})

View File

@ -49,7 +49,7 @@ Volcanos("chrome", {
})},
can.misc.WSS(can, {type: "chrome", name: "chrome"}, function(event, msg, cmd, arg) {
can.core.CallFunc(can.core.Value(can, cmd), {can: can, msg: msg, cmds: arg, cb: function() {
can.core.CallFunc([can, cmd], {can: can, msg: msg, cmds: arg, cb: function() {
msg.Reply()
}})
})

View File

@ -31,7 +31,7 @@ Volcanos("chrome", {
}, [], function(can) { can._load("chrome")
chrome.extension.onMessage.addListener(function(req, sender, cb) {
var msg = can.request(); can.core.List(req.option, function(key) { msg.Option(key, req[key][0]) })
can.core.CallFunc(can.core.Value(can, req.detail[3]||"spide"), {can: can, msg: msg, cmds: req.detail.slice(4), cb: cb})
can.core.CallFunc([can, req.detail[3]||"spide"], {can: can, msg: msg, cmds: req.detail.slice(4), cb: cb})
})
})

View File

@ -2,8 +2,8 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
can.ui = can.page.Append(can, can._target, [
{view: ["content", "div"]}, {view: ["display", "pre"]},
])
can.onappend.table(can, "content", msg, null, can.ui.content)
can.onappend.board(can, "content", msg.Result(), can.ui.display)
can.onappend.table(can, msg, null, can.ui.content)
can.onappend.board(can, msg.Result(), can.ui.display)
var refresh = msg.Option("_refresh") || can.Conf("feature")["_refresh"]
refresh && can.core.Timer(refresh, function() {
can.run({})