mirror of
https://shylinux.com/x/volcanos
synced 2025-04-25 16:58:06 +08:00
add can.core.ItemCB
This commit is contained in:
parent
2e6d8c318c
commit
1dfc749b6e
10
frame.js
10
frame.js
@ -9,9 +9,9 @@ Volcanos("onengine", {help: "搜索引擎", list: [], _init: function(can, meta,
|
|||||||
return (can.onengine[cmds[0]]||can.onengine._remote)(event, can, msg, panel, cmds, cb)
|
return (can.onengine[cmds[0]]||can.onengine._remote)(event, can, msg, panel, cmds, cb)
|
||||||
}, can[item.name] = panel, panel._root = can, panel._trans = panel.onaction._trans
|
}, can[item.name] = panel, panel._root = can, panel._trans = panel.onaction._trans
|
||||||
|
|
||||||
can.core.Item(panel.onaction, function(key, cb) { if (key.indexOf("on") == 0) {
|
can.core.ItemCB(panel.onaction, function(key, cb) {
|
||||||
can.onengine.listen(can, key, function(msg) { can.core.CallFunc(cb, {can: panel, msg: msg}) })
|
can.onengine.listen(can, key, function(msg) { can.core.CallFunc(cb, {can: panel, msg: msg}) })
|
||||||
} }), panel.onaction._init(panel, item, item.list, next, panel._target)
|
}), panel.onaction._init(panel, item, item.list, next, panel._target)
|
||||||
|
|
||||||
can.onmotion.float.auto(can, panel._output)
|
can.onmotion.float.auto(can, panel._output)
|
||||||
panel.onkeypop._build(panel)
|
panel.onkeypop._build(panel)
|
||||||
@ -145,9 +145,9 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
|
|||||||
return can.Update(event, can.Input(cmds, silent), cb, silent)
|
return can.Update(event, can.Input(cmds, silent), cb, silent)
|
||||||
}, can._inputs[item.name] = input, input.sup = can
|
}, can._inputs[item.name] = input, input.sup = can
|
||||||
|
|
||||||
can.core.Item(input.onaction, function(key, cb) { if (key.indexOf("on") == 0) {
|
can.core.ItemCB(input.onaction, function(key, cb) {
|
||||||
input._target[key] = function(event) { cb(event, input) }
|
input._target[key] = function(event) { cb(event, input) }
|
||||||
} }), can.core.CallFunc([input.onaction, "_init"], [input, item, [], next, input._target])
|
}), can.core.CallFunc([input.onaction, "_init"], [input, item, [], next, input._target])
|
||||||
|
|
||||||
can.onappend.figure(input, item, input._target)
|
can.onappend.figure(input, item, input._target)
|
||||||
})
|
})
|
||||||
@ -306,7 +306,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
|
|||||||
|
|
||||||
figure: function(can, meta, target, cb) { if ([html.BUTTON, html.SELECT].indexOf(meta.type) > -1) { return }
|
figure: function(can, meta, target, cb) { if ([html.BUTTON, html.SELECT].indexOf(meta.type) > -1) { return }
|
||||||
var input = meta.action||kit.MDB_KEY; input != "auto" && can.require(["/plugin/input/"+input+".js"], function(can) {
|
var input = meta.action||kit.MDB_KEY; input != "auto" && can.require(["/plugin/input/"+input+".js"], function(can) {
|
||||||
can.core.Item(can.onfigure[input], function(key, on) { if (key.indexOf("on") != 0) { return }
|
can.core.ItemCB(can.onfigure[input], function(key, on) {
|
||||||
target[key] = function(event) {
|
target[key] = function(event) {
|
||||||
can.onappend._init(can, {type: html.INPUT, name: input, pos: chat.FLOAT}, [], function(sub) { sub.Conf(meta)
|
can.onappend._init(can, {type: html.INPUT, name: input, pos: chat.FLOAT}, [], function(sub) { sub.Conf(meta)
|
||||||
sub.run = function(event, cmds, cb) { var msg = sub.request(event, can.Option());
|
sub.run = function(event, cmds, cb) { var msg = sub.request(event, can.Option());
|
||||||
|
@ -210,6 +210,7 @@ Volcanos("base", {help: "数据类型",
|
|||||||
isObject: function(arg) { return typeof arg == "object" },
|
isObject: function(arg) { return typeof arg == "object" },
|
||||||
isArray: function(arg) { return typeof arg == "object" && arg.length != undefined },
|
isArray: function(arg) { return typeof arg == "object" && arg.length != undefined },
|
||||||
isFunction: function(arg) { return typeof arg == "function" },
|
isFunction: function(arg) { return typeof arg == "function" },
|
||||||
|
isCallback: function(key, value) { return key.indexOf("on") == 0 && can.base.isFunc(value) },
|
||||||
isFunc: function(cb) { return typeof cb == "function" },
|
isFunc: function(cb) { return typeof cb == "function" },
|
||||||
isUndefined: function(arg) { return arg == undefined },
|
isUndefined: function(arg) { return arg == undefined },
|
||||||
isNull: function(arg) { return arg == null },
|
isNull: function(arg) { return arg == null },
|
||||||
|
@ -181,5 +181,13 @@ Volcanos("core", {help: "数据结构",
|
|||||||
}
|
}
|
||||||
return list
|
return list
|
||||||
}),
|
}),
|
||||||
|
ItemCB: shy("迭代器", function(obj, cb) { var list = []
|
||||||
|
for (var k in obj) {
|
||||||
|
if (k.indexOf("on") == 0 && typeof obj[k] == lang.FUNCTION) {
|
||||||
|
cb(k, obj[k])
|
||||||
|
list.push(k)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -14,8 +14,8 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
|||||||
can.page.Modify(can, can.ui.content, msg.Result()||can.onexport.content(can))
|
can.page.Modify(can, can.ui.content, msg.Result()||can.onexport.content(can))
|
||||||
can.page.Select(can, can.ui.content, "svg", function(svg) {
|
can.page.Select(can, can.ui.content, "svg", function(svg) {
|
||||||
can.svg = can.group = svg, can.onimport._group(can, svg).click()
|
can.svg = can.group = svg, can.onimport._group(can, svg).click()
|
||||||
can.core.Item(can.onimport, function(key, value) {
|
can.core.ItemCB(can.onimport, function(key, cb) {
|
||||||
key.indexOf("on") == 0 && (svg[key] = function(event) { value(event, can) })
|
svg[key] = function(event) { cb(event, can) }
|
||||||
})
|
})
|
||||||
can.page.Select(can, svg, "*", function(item, index) {
|
can.page.Select(can, svg, "*", function(item, index) {
|
||||||
item.tagName == "g"? can.onimport._group(can, item): can.onimport._block(can, item)
|
item.tagName == "g"? can.onimport._group(can, item): can.onimport._block(can, item)
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
|
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
|
||||||
can.onmotion.clear(can)
|
can.onmotion.clear(can), can.base.isFunc(cb) && cb(msg)
|
||||||
can.base.isFunc(cb) && cb(msg)
|
|
||||||
if (msg.Option("branch")) { return can.onappend.table(can, msg) }
|
if (msg.Option("branch")) { return can.onappend.table(can, msg) }
|
||||||
|
|
||||||
can.dir_root = msg.Option("dir_root")
|
can.dir_root = msg.Option("dir_root")
|
||||||
@ -9,7 +8,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
|||||||
can._tree[""].name = can.dir_root.split("/").pop()
|
can._tree[""].name = can.dir_root.split("/").pop()
|
||||||
|
|
||||||
can.size = 30, can.margin = 30
|
can.size = 30, can.margin = 30
|
||||||
can.onappend.plugin(can, {index: "web.wiki.draw", style: "output"}, function(sub) {
|
can.onappend.plugin(can, {index: "web.wiki.draw", style: chat.OUTPUT}, function(sub) {
|
||||||
sub.run = function(event, cmds, cb) { sub.Action("go", "run")
|
sub.run = function(event, cmds, cb) { sub.Action("go", "run")
|
||||||
can.base.isFunc(cb) && cb(sub.request())
|
can.base.isFunc(cb) && cb(sub.request())
|
||||||
|
|
||||||
@ -39,10 +38,9 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
|||||||
})
|
})
|
||||||
return node
|
return node
|
||||||
},
|
},
|
||||||
_height: function(can, tree) {
|
_height: function(can, tree) { if (!tree) { return 0 }
|
||||||
if (!tree) { return 0 }
|
|
||||||
if (tree.hide) { return tree.height = 1 }
|
|
||||||
if (tree.list.length == 0) { return tree.height = 1 }
|
if (tree.list.length == 0) { return tree.height = 1 }
|
||||||
|
if (tree.hide) { return tree.height = 1 }
|
||||||
|
|
||||||
var height = 0; can.core.List(tree.list, function(item) {
|
var height = 0; can.core.List(tree.list, function(item) {
|
||||||
height += can.onimport._height(can, item)
|
height += can.onimport._height(can, item)
|
||||||
@ -59,9 +57,9 @@ Volcanos("onaction", {help: "用户操作", list: ["编辑", ["view", "横向",
|
|||||||
can.onmotion.clear(can, can.draw.svg)
|
can.onmotion.clear(can, can.draw.svg)
|
||||||
|
|
||||||
can.onimport._height(can, can._tree[""])
|
can.onimport._height(can, can._tree[""])
|
||||||
can.draw.svg.Val("height", can._tree[""].height*can.size+2*can.margin)
|
can.draw.svg.Val(chat.HEIGHT, can._tree[""].height*can.size+2*can.margin)
|
||||||
can.width = 0, can.onaction._draw(can, can._tree[""], can.margin, can.margin)
|
can.width = 0, can.onaction._draw(can, can._tree[""], can.margin, can.margin)
|
||||||
can.draw.svg.Val("width", can.width+can.margin)
|
can.draw.svg.Val(chat.WIDTH, can.width+can.margin)
|
||||||
},
|
},
|
||||||
"纵向": function(event, can) {
|
"纵向": function(event, can) {
|
||||||
can.onmotion.clear(can, can.draw.svg)
|
can.onmotion.clear(can, can.draw.svg)
|
||||||
@ -81,10 +79,8 @@ Volcanos("onaction", {help: "用户操作", list: ["编辑", ["view", "横向",
|
|||||||
tree.width = tree.view.Val("textLength")
|
tree.width = tree.view.Val("textLength")
|
||||||
if (x+tree.width > can.width) { can.width = x+tree.width }
|
if (x+tree.width > can.width) { can.width = x+tree.width }
|
||||||
|
|
||||||
can.core.Item(can.ondetail, function(key, value) {
|
can.core.ItemCB(can.ondetail, function(key, cb) {
|
||||||
if (key.indexOf("on") == 0 && can.base.isFunc(value)) {
|
tree.view[key] = function(event) { cb(event, can, tree) }
|
||||||
tree.view[key] = function(event) { value(event, can, tree) }
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
if (tree.hide) { return }
|
if (tree.hide) { return }
|
||||||
@ -140,21 +136,19 @@ Volcanos("ondetail", {help: "用户交互", list: [],
|
|||||||
},
|
},
|
||||||
|
|
||||||
plugin: function(event, can, args) {
|
plugin: function(event, can, args) {
|
||||||
can.onappend.plugin(can, {type: "float", index: "web.code.inner", args: args, _action: ["关闭"]}, function(sub) {
|
can.onappend.plugin(can, {type: chat.FLOAT, index: "web.code.inner", args: args, _action: [cli.CLOSE]}, function(sub) {
|
||||||
sub.run = function(event, cmds, cb) {
|
sub.run = function(event, cmds, cb) {
|
||||||
can.run(event, can.misc.Concat([ctx.ACTION, "inner"], cmds), function(msg) {
|
can.run(event, can.misc.Concat([ctx.ACTION, "inner"], cmds), function(msg) {
|
||||||
msg.Option(ice.MSG_ACTION, "close")
|
msg.Option(ice.MSG_ACTION, cli.CLOSE)
|
||||||
can.search(event, ["Action.onexport.size"], function(msg, left, top, width, height) { left = left||0
|
can.search(event, ["Action.onexport.size"], function(msg, left, top, width, height) { left = left||0
|
||||||
var top = 120, margin = 20; if (can.user.isMobile) { margin = 0
|
var top = 120, margin = 20; if (can.user.isMobile) { margin = 0
|
||||||
if (can.user.isLandscape) {
|
if (can.user.isLandscape) {
|
||||||
sub.Conf("height", window.innerHeight+200)
|
sub.Conf(chat.HEIGHT, window.innerHeight+200), top = 24
|
||||||
top = 24
|
|
||||||
} else {
|
} else {
|
||||||
sub.Conf("height", window.innerHeight+140)
|
sub.Conf(chat.HEIGHT, window.innerHeight+140), top = 48
|
||||||
top = 48
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
sub.Conf("height", height+120)
|
sub.Conf(chat.HEIGHT, height+120)
|
||||||
}
|
}
|
||||||
|
|
||||||
var layout = {position: "fixed", left: left+margin, top: top}
|
var layout = {position: "fixed", left: left+margin, top: top}
|
||||||
|
@ -1,13 +1,12 @@
|
|||||||
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
|
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
|
||||||
can.onmotion.clear(can)
|
can.onmotion.clear(can), can.base.isFunc(cb) && cb(msg)
|
||||||
can.base.isFunc(cb) && cb(msg)
|
|
||||||
if (msg.Option("branch")) { return can.onappend.table(can, msg) }
|
if (msg.Option("branch")) { return can.onappend.table(can, msg) }
|
||||||
|
|
||||||
can.msg = msg, can.data = msg.Table(), can.onimport._sum(can)
|
can.msg = msg, can.data = msg.Table(), can.onimport._sum(can)
|
||||||
can.Action("height", msg.Option("height")||can.user.mod.isCmd? "max": can.user.isMobile&&can.user.isLandscape? "200": "400")
|
can.Action(chat.HEIGHT, msg.Option(chat.HEIGHT)||can.user.mod.isCmd? "max": can.user.isMobile&&can.user.isLandscape? "200": "400")
|
||||||
can.Action("speed", parseInt(msg.Option("speed")||"100"))
|
can.Action("speed", parseInt(msg.Option("speed")||"100"))
|
||||||
|
|
||||||
can.onappend.plugin(can, {index: "web.wiki.draw", style: "output"}, function(sub) {
|
can.onappend.plugin(can, {index: "web.wiki.draw", style: chat.OUTPUT}, function(sub) {
|
||||||
sub.run = function(event, cmds, cb) { sub.Action("go", "run")
|
sub.run = function(event, cmds, cb) { sub.Action("go", "run")
|
||||||
can.base.isFunc(cb) && cb(sub.request())
|
can.base.isFunc(cb) && cb(sub.request())
|
||||||
|
|
||||||
@ -49,17 +48,16 @@ Volcanos("onaction", {help: "组件菜单", list: ["编辑", ["view", "趋势图
|
|||||||
can.onmotion.toggle(can, can.draw._action)
|
can.onmotion.toggle(can, can.draw._action)
|
||||||
can.onmotion.toggle(can, can.draw._status)
|
can.onmotion.toggle(can, can.draw._status)
|
||||||
},
|
},
|
||||||
"趋势图": function(event, can) { var height = can.Action("height")
|
"趋势图": function(event, can) { var height = can.Action(chat.HEIGHT)
|
||||||
if (height == "max") { height = can.Conf("height") - chat.CMD_MARGIN }
|
if (height == "max") { height = can.Conf(chat.HEIGHT) - chat.CMD_MARGIN }
|
||||||
height = parseInt(height)
|
height = parseInt(height)
|
||||||
|
|
||||||
var space = 10
|
var space = 10, width = parseInt(can.Conf(chat.WIDTH))
|
||||||
var width = parseInt(can.Conf("width"))
|
|
||||||
var step = parseInt((width-2*space) / can.list.length)
|
var step = parseInt((width-2*space) / can.list.length)
|
||||||
|
|
||||||
can.onmotion.clear(can, can.draw.svg)
|
can.onmotion.clear(can, can.draw.svg)
|
||||||
can.draw.svg.Val("height", height)
|
can.draw.svg.Val(chat.HEIGHT, height)
|
||||||
can.draw.svg.Val("width", width)
|
can.draw.svg.Val(chat.WIDTH, width)
|
||||||
|
|
||||||
function scale(y) { return (y - can.min)/(can.max - can.min)*(height-2*space) }
|
function scale(y) { return (y - can.min)/(can.max - can.min)*(height-2*space) }
|
||||||
function order(index, x, y) { return {x: space+step*index+x, y: height-space-scale(y)} }
|
function order(index, x, y) { return {x: space+step*index+x, y: height-space-scale(y)} }
|
||||||
@ -69,7 +67,7 @@ Volcanos("onaction", {help: "组件菜单", list: ["编辑", ["view", "趋势图
|
|||||||
shape: "line", point: [
|
shape: "line", point: [
|
||||||
order(index, step/2, line.min), order(index, step/2, line.max),
|
order(index, step/2, line.min), order(index, step/2, line.max),
|
||||||
], style: {
|
], style: {
|
||||||
"stroke-width": 1, "stroke": line.begin < line.close? "white": "black",
|
"stroke-width": 1, "stroke": line.begin < line.close? chat.WHITE: chat.BLACK,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -77,15 +75,13 @@ Volcanos("onaction", {help: "组件菜单", list: ["编辑", ["view", "趋势图
|
|||||||
shape: "rect", point: [
|
shape: "rect", point: [
|
||||||
order(index, step/4, line.close), order(index, step/4*3, line.begin),
|
order(index, step/4, line.close), order(index, step/4*3, line.begin),
|
||||||
], style: can.base.Copy({"stroke-width": 1, "rx": 0, "ry": 0}, line.begin < line.close? {
|
], style: can.base.Copy({"stroke-width": 1, "rx": 0, "ry": 0}, line.begin < line.close? {
|
||||||
"stroke": "white", "fill": "white",
|
"stroke": chat.WHITE, "fill": chat.WHITE,
|
||||||
}: {
|
}: {
|
||||||
"stroke": "black", "fill": "black",
|
"stroke": chat.BLACK, "fill": chat.BLACK,
|
||||||
}),
|
}),
|
||||||
_init: function(view) {
|
_init: function(view) {
|
||||||
can.core.Item(can.ondetail, function(key, value) {
|
can.core.ItemCB(can.ondetail, function(key, cb) {
|
||||||
if (key.indexOf("on") == 0 && can.base.isFunc(value)) {
|
view[key] = function(event) { cb(event, can, line) }
|
||||||
view[key] = function(event) { value(event, can, line) }
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
@ -106,14 +102,13 @@ Volcanos("onaction", {help: "组件菜单", list: ["编辑", ["view", "趋势图
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
var space = 10
|
var height = parseInt(can.Action(chat.HEIGHT))
|
||||||
var width = parseInt(can.Conf("width"))
|
var space = 10, width = parseInt(can.Conf(chat.WIDTH))
|
||||||
var height = parseInt(can.Action("height"))
|
|
||||||
var step = parseInt((width-2*space) / can.list.length)
|
var step = parseInt((width-2*space) / can.list.length)
|
||||||
|
|
||||||
can.onmotion.clear(can, can.draw.svg)
|
can.onmotion.clear(can, can.draw.svg)
|
||||||
can.draw.svg.Val("height", height)
|
can.draw.svg.Val(chat.HEIGHT, height)
|
||||||
can.draw.svg.Val("width", width)
|
can.draw.svg.Val(chat.WIDTH, width)
|
||||||
|
|
||||||
function scale(key, y) { return (y - min[key])/(max[key] - min[key])*(height-2*space) }
|
function scale(key, y) { return (y - min[key])/(max[key] - min[key])*(height-2*space) }
|
||||||
function order(index, key, x, y) { return {x: space+step*index+x, y: space+scale(key, y)} }
|
function order(index, key, x, y) { return {x: space+step*index+x, y: space+scale(key, y)} }
|
||||||
@ -126,13 +121,11 @@ Volcanos("onaction", {help: "组件菜单", list: ["编辑", ["view", "趋势图
|
|||||||
shape: "rect", point: [
|
shape: "rect", point: [
|
||||||
order(index, key, width*which+2, 0), order(index, key, width*which+2+width, y),
|
order(index, key, width*which+2, 0), order(index, key, width*which+2+width, y),
|
||||||
], style: {
|
], style: {
|
||||||
"stroke-width": 1, "stroke": "white", "fill": "white", "rx": 0, "ry": 0,
|
"stroke-width": 1, "stroke": chat.WHITE, "fill": chat.WHITE, "rx": 0, "ry": 0,
|
||||||
},
|
},
|
||||||
_init: function(view) {
|
_init: function(view) {
|
||||||
can.core.Item(can.ondetail, function(key, value) {
|
can.core.ItemCB(can.ondetail, function(key, cb) {
|
||||||
if (key.indexOf("on") == 0 && can.base.isFunc(value)) {
|
view[key] = function(event) { cb(event, can, line) }
|
||||||
view[key] = function(event) { value(event, can, line) }
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
2
proto.js
2
proto.js
@ -96,7 +96,7 @@ const wiki = {
|
|||||||
FIELD: "field", SHELL: "shell", LOCAL: "local", PARSE: "parse",
|
FIELD: "field", SHELL: "shell", LOCAL: "local", PARSE: "parse",
|
||||||
}
|
}
|
||||||
const chat = {
|
const chat = {
|
||||||
LIB: "lib", PAGE: "page", PANEL: "panel", PLUGIN: "plugin",
|
LIB: "lib", PAGE: "page", PANEL: "panel", PLUGIN: "plugin", OUTPUT: "output",
|
||||||
STORY: "story", CARTE: "carte", INPUT: "input", FLOAT: "float",
|
STORY: "story", CARTE: "carte", INPUT: "input", FLOAT: "float",
|
||||||
HEAD: "head", AUTO: "auto", LEFT: "left", MAIN: "main", FOOT: "foot",
|
HEAD: "head", AUTO: "auto", LEFT: "left", MAIN: "main", FOOT: "foot",
|
||||||
SCROLL: "scroll", HEIGHT: "height", WIDTH: "width", LEFT: "left", TOP: "top",
|
SCROLL: "scroll", HEIGHT: "height", WIDTH: "width", LEFT: "left", TOP: "top",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user