mirror of
https://shylinux.com/x/volcanos
synced 2025-04-25 16:58:06 +08:00
add pie.js
This commit is contained in:
parent
ed46a3e89b
commit
d33fa59499
2
frame.js
2
frame.js
@ -205,7 +205,7 @@ Volcanos("onappend", {help: "渲染引擎", list: [], _init: function(can, meta,
|
|||||||
|
|
||||||
table.onimport && table.onimport._init && table.onimport._init(table, msg, msg.result||[], function(msg) {
|
table.onimport && table.onimport._init && table.onimport._init(table, msg, msg.result||[], function(msg) {
|
||||||
can.page.Modify(can, can._action, ""), can.page.Modify(can, can._status, "")
|
can.page.Modify(can, can._action, ""), can.page.Modify(can, can._status, "")
|
||||||
table.onaction && table.onappend._action(table, can.base.Obj(msg.Option(ice.MSG_ACTION), table.onaction.list))
|
table.onaction && table.onappend._action(table, can.base.Obj(msg.Option(ice.MSG_ACTION)||can.Conf(ice.MSG_ACTION), table.onaction.list))
|
||||||
table.onexport && table.onappend._status(table, can.base.Obj(msg.Option(ice.MSG_STATUS), table.onexport.list))
|
table.onexport && table.onappend._status(table, can.base.Obj(msg.Option(ice.MSG_STATUS), table.onexport.list))
|
||||||
}, can._output)
|
}, can._output)
|
||||||
})
|
})
|
||||||
|
@ -5,7 +5,7 @@ Volcanos("base", {help: "数据类型",
|
|||||||
Obj: function(value, def) {
|
Obj: function(value, def) {
|
||||||
try {
|
try {
|
||||||
value = typeof value == lang.STRING && value != ""? JSON.parse(value): value
|
value = typeof value == lang.STRING && value != ""? JSON.parse(value): value
|
||||||
if (def && def.length > 0 && value.length == 0) { return def }
|
if (value && value.length == 0 && def && def.length > 0) { return def }
|
||||||
return value||def
|
return value||def
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
return [value]
|
return [value]
|
||||||
|
@ -64,7 +64,7 @@ Volcanos({name: "chat", panels: [
|
|||||||
}},
|
}},
|
||||||
project: {name: "研发群", storm: {
|
project: {name: "研发群", storm: {
|
||||||
studio: {name: "研发 studio", action: [
|
studio: {name: "研发 studio", action: [
|
||||||
{name: "vimer", help: "编辑器", index: "web.code.vimer", args: ["src/", "main.go"]},
|
{name: "vimer", help: "编辑器", index: "web.code.vimer", args: ["src/", "main.go"], _action: ["autogen", "compile", "binpack"]},
|
||||||
{name: "repos", help: "代码库", index: "web.code.git.status"},
|
{name: "repos", help: "代码库", index: "web.code.git.status"},
|
||||||
{name: "plan", help: "任务表", index: "web.team.plan"},
|
{name: "plan", help: "任务表", index: "web.team.plan"},
|
||||||
{name: "ctx", help: "上下文", index: "web.wiki.word", args: ["src/main.shy"]},
|
{name: "ctx", help: "上下文", index: "web.wiki.word", args: ["src/main.shy"]},
|
||||||
|
@ -83,6 +83,7 @@ Volcanos("onengine", {help: "解析引擎", list: [], _engine: function(event, p
|
|||||||
msg.Push("feature", JSON.stringify(value.feature))
|
msg.Push("feature", JSON.stringify(value.feature))
|
||||||
msg.Push("index", value.index||"")
|
msg.Push("index", value.index||"")
|
||||||
msg.Push("args", value.args||"[]")
|
msg.Push("args", value.args||"[]")
|
||||||
|
msg.Push("_action", value._action||"")
|
||||||
}), can.base.isFunc(cb) && cb(msg)
|
}), can.base.isFunc(cb) && cb(msg)
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
|
@ -3,7 +3,7 @@ Volcanos("onaction", {help: "交互操作", list: [], _init: function(can, msg,
|
|||||||
can.onmotion.float.auto(can, window, chat.CARTE)
|
can.onmotion.float.auto(can, window, chat.CARTE)
|
||||||
can.base.isFunc(cb) && cb()
|
can.base.isFunc(cb) && cb()
|
||||||
},
|
},
|
||||||
onmain: function(can) { can._names = location.pathname
|
onlogin: function(can) { can._names = location.pathname
|
||||||
var msg = can.request({})
|
var msg = can.request({})
|
||||||
can.Conf(chat.TOOL)? can.core.Next(can.Conf(chat.TOOL), function(item, next) {
|
can.Conf(chat.TOOL)? can.core.Next(can.Conf(chat.TOOL), function(item, next) {
|
||||||
can.core.Timer(500, function() {
|
can.core.Timer(500, function() {
|
||||||
|
@ -3,7 +3,7 @@ Volcanos("onimport", {help: "导入数据", _init: function(can, msg, list, cb,
|
|||||||
can.ui = can.onlayout.profile(can)
|
can.ui = can.onlayout.profile(can)
|
||||||
can.onimport._content(can, target)
|
can.onimport._content(can, target)
|
||||||
can.onimport._output(can, target)
|
can.onimport._output(can, target)
|
||||||
can.onimport._favor(can, target)
|
// can.onimport._favor(can, target)
|
||||||
// can.onimport._search(can, target)
|
// can.onimport._search(can, target)
|
||||||
|
|
||||||
can.history = can.history||[]
|
can.history = can.history||[]
|
||||||
|
@ -297,7 +297,7 @@ Volcanos("onkeymap", {help: "键盘交互", list: ["command", "normal", "insert"
|
|||||||
can.onaction.rerankLine(can)
|
can.onaction.rerankLine(can)
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
Volcanos("onaction", {help: "控件交互", list: ["autogen", "compile", "binpack"],
|
Volcanos("onaction", {help: "控件交互", list: ["run"],
|
||||||
save: function(event, can) { var msg = can.request(event, {content: can.onexport.content(can)})
|
save: function(event, can) { var msg = can.request(event, {content: can.onexport.content(can)})
|
||||||
can.run(event, [ctx.ACTION, "save", can.parse, can.Option("file"), can.Option("path")], function(msg) {
|
can.run(event, [ctx.ACTION, "save", can.parse, can.Option("file"), can.Option("path")], function(msg) {
|
||||||
can.user.toast(can, "保存成功")
|
can.user.toast(can, "保存成功")
|
||||||
|
@ -81,7 +81,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
|||||||
} },
|
} },
|
||||||
ondblclick: function(event) { can.onmotion.modify(can, event.target, function(ev, value, old) {
|
ondblclick: function(event) { can.onmotion.modify(can, event.target, function(ev, value, old) {
|
||||||
can.onaction.modifyTask(event, can, task, key, value)
|
can.onaction.modifyTask(event, can, task, key, value)
|
||||||
}) },
|
}, {name: key, action: key.indexOf("time") > 0? "date": "key"}) },
|
||||||
}]) }), can.onimport._display(can, task)
|
}]) }), can.onimport._display(can, task)
|
||||||
},
|
},
|
||||||
_display: function(can, task) { if (!task["extra.cmd"]) { return }
|
_display: function(can, task) { if (!task["extra.cmd"]) { return }
|
||||||
|
@ -2,14 +2,19 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
|||||||
can.onmotion.clear(can)
|
can.onmotion.clear(can)
|
||||||
can.onkeypop._build(can)
|
can.onkeypop._build(can)
|
||||||
can.onmotion.hidden(can, can._action)
|
can.onmotion.hidden(can, can._action)
|
||||||
can.ui = can.onlayout.profile(can)
|
|
||||||
can.base.isFunc(cb) && cb(msg)
|
can.base.isFunc(cb) && cb(msg)
|
||||||
|
|
||||||
// 交互数据
|
// 交互数据
|
||||||
can.svg = null, can.group = null
|
can.svg = null, can.group = null
|
||||||
can.point = [], can.temp = null , can.current = null
|
can.temp = null , can.current = null
|
||||||
can.keylist = []
|
can.keylist = []
|
||||||
|
|
||||||
|
can.onimport._show(can, msg)
|
||||||
|
},
|
||||||
|
_show: function(can, msg) {
|
||||||
|
can.ui = can.onlayout.profile(can)
|
||||||
|
can.point = []
|
||||||
|
|
||||||
// 加载绘图
|
// 加载绘图
|
||||||
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) {
|
||||||
@ -94,6 +99,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
|||||||
var data = figure.draw(event, can, value.point, value.style)
|
var data = figure.draw(event, can, value.point, value.style)
|
||||||
can.core.Item(value.style, function(key, value) { data[key] = value })
|
can.core.Item(value.style, function(key, value) { data[key] = value })
|
||||||
var item = can.onfigure._push(can, data, value.shape, can.group||can.svg)
|
var item = can.onfigure._push(can, data, value.shape, can.group||can.svg)
|
||||||
|
can.core.ItemCB(value, function(key, cb) { item[key] = cb })
|
||||||
value._init && value._init(item)
|
value._init && value._init(item)
|
||||||
return item
|
return item
|
||||||
},
|
},
|
||||||
@ -600,7 +606,7 @@ Volcanos("onexport", {help: "导出数据", list: ["分组", "图形", "坐标"]
|
|||||||
"stroke-width", "stroke", "fill", "font-size",
|
"stroke-width", "stroke", "fill", "font-size",
|
||||||
], function(item) {
|
], function(item) {
|
||||||
return svg.Value(item)? ' ' + item + '="' + svg.Value(item) + '"': ""
|
return svg.Value(item)? ' ' + item + '="' + svg.Value(item) + '"': ""
|
||||||
}): [" width=600 height=200 "]).concat(['>', svg? svg.innerHTML: "", "</svg>"]).join("")
|
}): [" width="+(can.Conf(chat.WIDTH)||600)+" height="+((can.Conf(chat.HEIGHT)||440)-40)]).concat(['>', svg? svg.innerHTML: "", "</svg>"]).join("")
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -94,7 +94,8 @@ Volcanos("onaction", {help: "交互操作", list: [
|
|||||||
"生成链接": function(event, can) { var meta = can.Conf()
|
"生成链接": function(event, can) { var meta = can.Conf()
|
||||||
var pre = "/chat/cmd/"; if (can.user.mod.isPod) { pre = "/chat/pod/"+can.user.Search(can, ice.POD)+"/cmd/" }
|
var pre = "/chat/cmd/"; if (can.user.mod.isPod) { pre = "/chat/pod/"+can.user.Search(can, ice.POD)+"/cmd/" }
|
||||||
var args = can.Option(); args._path = pre+(meta.index||can.core.Keys(meta.ctx, meta.cmd))
|
var args = can.Option(); args._path = pre+(meta.index||can.core.Keys(meta.ctx, meta.cmd))
|
||||||
args._path.indexOf("/cmd/web.wiki.word") > -1 && (args._path = pre+args.path)
|
args._path.indexOf("/cmd/web.wiki.word") > -1 && (args = {_path: pre+args.path})
|
||||||
|
|
||||||
var msg = can.request(event, {link: can.user.MergeURL(can, args)})
|
var msg = can.request(event, {link: can.user.MergeURL(can, args)})
|
||||||
can.search(event, ["Header.onaction.share"])
|
can.search(event, ["Header.onaction.share"])
|
||||||
},
|
},
|
||||||
|
40
plugin/story/pie.js
Normal file
40
plugin/story/pie.js
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg, list, cb, target) {
|
||||||
|
can.require(["/plugin/local/wiki/draw.js", "/plugin/local/wiki/draw/path.js"], function() {
|
||||||
|
can.onmotion.clear(can), can.onimport._show(can, msg)
|
||||||
|
var r = 200, margin = 20; can.svg.Val(chat.WIDTH, 2*(r+margin)), can.svg.Val(chat.HEIGHT, 2*(r+margin))
|
||||||
|
can.onimport._draw(can, msg, "value", r+margin, r+margin, r, margin, 0)
|
||||||
|
can.onmotion.clear(can, can.ui.project), can.onappend.table(can, msg, null, can.ui.project)
|
||||||
|
can.page.Modify(can, can.ui.project, {style: {"max-width": 480}})
|
||||||
|
can.page.Select(can, can.ui.project, html.TR, function(tr, index) {
|
||||||
|
can.page.Modify(can, tr, {onmouseenter: function(event) {
|
||||||
|
can.onmotion.clear(can, can.svg), can.onimport._draw(can, msg, "value", r+margin, r+margin, r, margin, index-1)
|
||||||
|
}})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
_draw: function(can, msg, field, x, y, r, margin, which) {
|
||||||
|
function join(list) {
|
||||||
|
for (var i = 0; i < list.length; i++) { list[i] = list[i].join(ice.SP) }
|
||||||
|
return list.join(ice.FS)
|
||||||
|
}
|
||||||
|
function pos(x, y, r, angle) { angle -= 90
|
||||||
|
return [x + r * Math.cos(angle * Math.PI / 180), y + r * Math.sin(angle * Math.PI / 180)]
|
||||||
|
}
|
||||||
|
function pie(x, y, r, begin, span, color, cb) { can.onimport.draw({}, can, {shape: "path", style: {
|
||||||
|
"stroke-width": 1, stroke: color, fill: color, d: join([
|
||||||
|
["M", x, y], ["L"].concat(pos(x, y, r, begin)), ["A", r, r, "0 0 1"].concat(pos(x, y, r, begin+span)), ["Z"]
|
||||||
|
]),
|
||||||
|
}, onmouseenter: function(event) { can.base.isFunc(cb) && cb(event)} }) }
|
||||||
|
|
||||||
|
var total = 0; msg.Table(function(value) { total += parseInt(value[field]) })
|
||||||
|
var color = [cli.RED, cli.YELLOW, cli.GREEN, cli.CYAN, cli.BLUE, cli.MAGENTA, cli.WHITE, cli.BLACK]
|
||||||
|
var begin = 0; msg["color"] = [], msg["weight"] = [], msg.Table(function(value, index) { var span = parseInt(value[field])/total*360
|
||||||
|
var p = index==which? pos(x, y, margin, begin+span/2): [x, y]; index == which && can.Status(value)
|
||||||
|
var c = color[index%color.length]; pie(p[0], p[1], r, begin, span, c, function(event) {
|
||||||
|
can.onmotion.clear(can, can.svg), can.onimport._draw(can, msg, field, x, y, r, margin, index)
|
||||||
|
}), begin += span, msg.Push("color", '<span style="background-color:'+c+'"> </span>')
|
||||||
|
msg.Push("weight", parseInt(parseInt(value[field])*10000/total)/100)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
@ -8,19 +8,10 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
|||||||
can._tree[""].name = can.dir_root.split(ice.PS).slice(-2)[0]
|
can._tree[""].name = can.dir_root.split(ice.PS).slice(-2)[0]
|
||||||
|
|
||||||
can.size = 30, can.margin = 30
|
can.size = 30, can.margin = 30
|
||||||
can.onappend.plugin(can, {type: chat.OUTPUT, index: "web.wiki.draw"}, function(sub) {
|
can.require(["/plugin/local/wiki/draw.js", "/plugin/local/wiki/draw/path.js"], function() {
|
||||||
sub.run = function(event, cmds, cb) { sub.Action("go", "run")
|
can.onimport._show(can, msg), can.onmotion.hidden(can, can.ui.project)
|
||||||
can.base.isFunc(cb) && cb(sub.request())
|
var p = can.Action("view", can.sup.view||can.Action("view"))
|
||||||
|
can.onaction[p](event, can, p)
|
||||||
can.core.Timer300ms(function() { can.draw = sub._outputs[0]
|
|
||||||
can.draw.onmotion.hidden(can.draw, can.draw.ui.project)
|
|
||||||
can.draw.require(["/plugin/local/wiki/draw/path.js"], function() {
|
|
||||||
var p = can.sup.view||can.Action("view");
|
|
||||||
can.Action("view", p)
|
|
||||||
can.onaction[p](event, can, p)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -50,7 +41,7 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
|||||||
},
|
},
|
||||||
_width: function(can, tree) { if (!tree) { return 0 }
|
_width: function(can, tree) { if (!tree) { return 0 }
|
||||||
if (tree.list.length == 0 || tree.hide) {
|
if (tree.list.length == 0 || tree.hide) {
|
||||||
tree.view = can.draw.onimport.draw({}, can.draw, {
|
tree.view = can.onimport.draw({}, can, {
|
||||||
shape: "text", point: [{x: 0, y: 0}], style: {
|
shape: "text", point: [{x: 0, y: 0}], style: {
|
||||||
"stroke-width": 1, "text-anchor": "middle", inner: tree.name,
|
"stroke-width": 1, "text-anchor": "middle", inner: tree.name,
|
||||||
},
|
},
|
||||||
@ -66,31 +57,31 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
|||||||
}, [""])
|
}, [""])
|
||||||
Volcanos("onaction", {help: "用户操作", list: ["编辑", ["view", "横向", "纵向"]],
|
Volcanos("onaction", {help: "用户操作", list: ["编辑", ["view", "横向", "纵向"]],
|
||||||
"编辑": function(event, can) {
|
"编辑": function(event, can) {
|
||||||
can.onmotion.toggle(can, can.draw._action)
|
can.onmotion.toggle(can, can._action)
|
||||||
can.onmotion.toggle(can, can.draw._status)
|
can.onmotion.toggle(can, can._status)
|
||||||
},
|
},
|
||||||
"横向": function(event, can, button) {
|
"横向": function(event, can, button) {
|
||||||
can.sup.view = button
|
can.sup.view = button
|
||||||
can.onmotion.clear(can, can.draw.svg)
|
can.onmotion.clear(can, can.svg)
|
||||||
can.onimport._height(can, can._tree[""])
|
can.onimport._height(can, can._tree[""])
|
||||||
|
|
||||||
can.draw.svg.Val(chat.HEIGHT, can._tree[""].height*can.size+2*can.margin)
|
can.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(chat.WIDTH, can.width+can.margin)
|
can.svg.Val(chat.WIDTH, can.width+can.margin)
|
||||||
},
|
},
|
||||||
"纵向": function(event, can, button) {
|
"纵向": function(event, can, button) {
|
||||||
can.sup.view = button
|
can.sup.view = button
|
||||||
can.onimport._width(can, can._tree[""])
|
can.onimport._width(can, can._tree[""])
|
||||||
can.onmotion.clear(can, can.draw.svg)
|
can.onmotion.clear(can, can.svg)
|
||||||
|
|
||||||
can.draw.svg.Val(chat.WIDTH, can._tree[""].width+2*can.margin)
|
can.svg.Val(chat.WIDTH, can._tree[""].width+2*can.margin)
|
||||||
can.draw.svg.Value("font-family", "monospace")
|
can.svg.Value("font-family", "monospace")
|
||||||
can.height = 0, can.onaction._draw_vertical(can, can._tree[""], can.margin, can.margin+can.size)
|
can.height = 0, can.onaction._draw_vertical(can, can._tree[""], can.margin, can.margin+can.size)
|
||||||
can.draw.svg.Val(chat.HEIGHT, can.height+can.margin)
|
can.svg.Val(chat.HEIGHT, can.height+can.margin)
|
||||||
},
|
},
|
||||||
_draw_vertical: function(can, tree, x, y) { tree.x = x, tree.y = y
|
_draw_vertical: function(can, tree, x, y) { tree.x = x, tree.y = y
|
||||||
var color = tree.meta&&tree.meta.color||cli.YELLOW
|
var color = tree.meta&&tree.meta.color||cli.YELLOW
|
||||||
tree.view = can.draw.onimport.draw({}, can.draw, {
|
tree.view = can.onimport.draw({}, can, {
|
||||||
shape: "text", point: [
|
shape: "text", point: [
|
||||||
{x: x+tree.width/2, y: y}
|
{x: x+tree.width/2, y: y}
|
||||||
], style: {
|
], style: {
|
||||||
@ -111,7 +102,7 @@ Volcanos("onaction", {help: "用户操作", list: ["编辑", ["view", "横向",
|
|||||||
}
|
}
|
||||||
|
|
||||||
var offset = 0; can.core.List(tree.list, function(item) {
|
var offset = 0; can.core.List(tree.list, function(item) {
|
||||||
can.draw.onimport.draw({}, can.draw, {
|
can.onimport.draw({}, can, {
|
||||||
shape: "path", point: [], style: {
|
shape: "path", point: [], style: {
|
||||||
"stroke-width": 1, "stroke": cli.CYAN, "fill": html.NONE, d: line(
|
"stroke-width": 1, "stroke": cli.CYAN, "fill": html.NONE, d: line(
|
||||||
{x: x+tree.width/2, y: y+tree.height-can.margin/2},
|
{x: x+tree.width/2, y: y+tree.height-can.margin/2},
|
||||||
@ -127,7 +118,7 @@ Volcanos("onaction", {help: "用户操作", list: ["编辑", ["view", "横向",
|
|||||||
|
|
||||||
_draw: function(can, tree, x, y) { tree.x = x, tree.y = y
|
_draw: function(can, tree, x, y) { tree.x = x, tree.y = y
|
||||||
var color = tree.meta&&tree.meta.color||cli.YELLOW
|
var color = tree.meta&&tree.meta.color||cli.YELLOW
|
||||||
tree.view = can.draw.onimport.draw({}, can.draw, {
|
tree.view = can.onimport.draw({}, can, {
|
||||||
shape: "text", point: [
|
shape: "text", point: [
|
||||||
{x: x, y: y+tree.height*can.size/2}
|
{x: x, y: y+tree.height*can.size/2}
|
||||||
], style: {
|
], style: {
|
||||||
@ -149,7 +140,7 @@ Volcanos("onaction", {help: "用户操作", list: ["编辑", ["view", "横向",
|
|||||||
}
|
}
|
||||||
|
|
||||||
var offset = 0; can.core.List(tree.list, function(item) {
|
var offset = 0; can.core.List(tree.list, function(item) {
|
||||||
can.draw.onimport.draw({}, can.draw, {
|
can.onimport.draw({}, can, {
|
||||||
shape: "path", point: [], style: {
|
shape: "path", point: [], style: {
|
||||||
"stroke-width": 1, "stroke": cli.CYAN, "fill": html.NONE, d: line(
|
"stroke-width": 1, "stroke": cli.CYAN, "fill": html.NONE, d: line(
|
||||||
{x: x+tree.width+can.margin/8, y: y+tree.height*can.size/2},
|
{x: x+tree.width+can.margin/8, y: y+tree.height*can.size/2},
|
||||||
@ -165,7 +156,7 @@ Volcanos("onaction", {help: "用户操作", list: ["编辑", ["view", "横向",
|
|||||||
})
|
})
|
||||||
Volcanos("ondetail", {help: "用户交互", list: [],
|
Volcanos("ondetail", {help: "用户交互", list: [],
|
||||||
onmouseenter: function(event, can, tree) { var y = tree.y+tree.height*can.size/2
|
onmouseenter: function(event, can, tree) { var y = tree.y+tree.height*can.size/2
|
||||||
can.page.Remove(can, can.pos), can.pos = can.draw.onimport.draw({}, can.draw, {
|
can.page.Remove(can, can.pos), can.pos = can.onimport.draw({}, can, {
|
||||||
shape: "rect", point: [
|
shape: "rect", point: [
|
||||||
{x: tree.x-can.margin/4, y: y-can.size/2},
|
{x: tree.x-can.margin/4, y: y-can.size/2},
|
||||||
{x: tree.x+tree.width+can.margin/8, y: y+can.size/2},
|
{x: tree.x+tree.width+can.margin/8, y: y+can.size/2},
|
||||||
|
@ -7,15 +7,9 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
|||||||
can.Action(chat.HEIGHT, msg.Option(chat.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, {type: chat.OUTPUT, index: "web.wiki.draw"}, function(sub) {
|
can.require(["/plugin/local/wiki/draw.js", "/plugin/local/wiki/draw/path.js"], function() {
|
||||||
sub.run = function(event, cmds, cb) { sub.Action("go", "run")
|
can.onimport._show(can, msg), can.onmotion.hidden(can, can.ui.project)
|
||||||
can.base.isFunc(cb) && cb(sub.request())
|
can.onaction[can.Action("view")](event, can)
|
||||||
|
|
||||||
can.core.Timer300ms(function() { can.draw = sub._outputs[0]
|
|
||||||
can.draw.onmotion.hidden(can.draw, can.draw.ui.project)
|
|
||||||
can.onaction[can.Action("view")](event, can)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
_sum: function(can) {
|
_sum: function(can) {
|
||||||
@ -46,8 +40,8 @@ Volcanos("onimport", {help: "导入数据", list: [], _init: function(can, msg,
|
|||||||
})
|
})
|
||||||
Volcanos("onaction", {help: "组件菜单", list: ["编辑", ["view", "趋势图", "柱状图", "数据源"], ["height", "100", "200", "400", "600", "800", "max"], ["speed", "10", "20", "50", "100"]],
|
Volcanos("onaction", {help: "组件菜单", list: ["编辑", ["view", "趋势图", "柱状图", "数据源"], ["height", "100", "200", "400", "600", "800", "max"], ["speed", "10", "20", "50", "100"]],
|
||||||
"编辑": function(event, can) {
|
"编辑": function(event, can) {
|
||||||
can.onmotion.toggle(can, can.draw._action)
|
can.onmotion.toggle(can, can._action)
|
||||||
can.onmotion.toggle(can, can.draw._status)
|
can.onmotion.toggle(can, can._status)
|
||||||
},
|
},
|
||||||
"趋势图": function(event, can) { var height = can.Action(chat.HEIGHT)
|
"趋势图": function(event, can) { var height = can.Action(chat.HEIGHT)
|
||||||
if (height == "max") { height = can.Conf(chat.HEIGHT) - chat.CMD_MARGIN }
|
if (height == "max") { height = can.Conf(chat.HEIGHT) - chat.CMD_MARGIN }
|
||||||
@ -56,15 +50,15 @@ Volcanos("onaction", {help: "组件菜单", list: ["编辑", ["view", "趋势图
|
|||||||
var space = 10, width = parseInt(can.Conf(chat.WIDTH))
|
var space = 10, width = parseInt(can.Conf(chat.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.svg)
|
||||||
can.draw.svg.Val(chat.HEIGHT, height)
|
can.svg.Val(chat.HEIGHT, height)
|
||||||
can.draw.svg.Val(chat.WIDTH, width)
|
can.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)} }
|
||||||
|
|
||||||
can.core.Next(can.list, function(line, next, index) { can.Status(line, ["date", "text", "add", "del"])
|
can.core.Next(can.list, function(line, next, index) { can.Status(line, ["date", "text", "add", "del"])
|
||||||
can.draw.onimport.draw({}, can.draw, {
|
can.onimport.draw({}, can, {
|
||||||
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: {
|
||||||
@ -72,7 +66,7 @@ Volcanos("onaction", {help: "组件菜单", list: ["编辑", ["view", "趋势图
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
can.draw.onimport.draw({}, can.draw, {
|
can.onimport.draw({}, can, {
|
||||||
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? {
|
||||||
@ -107,9 +101,9 @@ Volcanos("onaction", {help: "组件菜单", list: ["编辑", ["view", "趋势图
|
|||||||
var space = 10, width = parseInt(can.Conf(chat.WIDTH))
|
var space = 10, width = parseInt(can.Conf(chat.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.svg)
|
||||||
can.draw.svg.Val(chat.HEIGHT, height)
|
can.svg.Val(chat.HEIGHT, height)
|
||||||
can.draw.svg.Val(chat.WIDTH, width)
|
can.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)} }
|
||||||
@ -118,7 +112,7 @@ Volcanos("onaction", {help: "组件菜单", list: ["编辑", ["view", "趋势图
|
|||||||
can.core.List(can.msg.append, function(key, which) {
|
can.core.List(can.msg.append, function(key, which) {
|
||||||
max[key] != min[key] && can.core.Next(can.data, function(line, next, index) {
|
max[key] != min[key] && can.core.Next(can.data, function(line, next, index) {
|
||||||
var y = scale(key, parseFloat(line[key]))
|
var y = scale(key, parseFloat(line[key]))
|
||||||
y && can.draw.onimport.draw({}, can.draw, {
|
y && can.onimport.draw({}, can, {
|
||||||
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: {
|
||||||
@ -136,9 +130,9 @@ Volcanos("onaction", {help: "组件菜单", list: ["编辑", ["view", "趋势图
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
"数据源": function(event, can) {
|
"数据源": function(event, can) {
|
||||||
can.onmotion.clear(can, can.draw.ui.display)
|
can.onmotion.clear(can, can.ui.display)
|
||||||
can.onappend.table(can, can.msg, null, can.draw.ui.display)
|
can.onappend.table(can, can.msg, null, can.ui.display)
|
||||||
can.onmotion.show(can, can.draw.ui.display)
|
can.onmotion.show(can, can.ui.display)
|
||||||
},
|
},
|
||||||
|
|
||||||
height: function(event, can) {
|
height: function(event, can) {
|
||||||
|
5
proto.js
5
proto.js
@ -58,8 +58,9 @@ var cli = {
|
|||||||
START: "start", STOP: "stop",
|
START: "start", STOP: "stop",
|
||||||
CLEAR: "clear", REFRESH: "refresh",
|
CLEAR: "clear", REFRESH: "refresh",
|
||||||
|
|
||||||
YELLOW: "yellow", CYAN: "cyan",
|
RED: "red", GREEN: "green", BLUE: "blue",
|
||||||
RED: "red",
|
YELLOW: "yellow", CYAN: "cyan", MAGENTA: "magenta",
|
||||||
|
WHITE: "white", BLACK: "black",
|
||||||
}
|
}
|
||||||
var web = {
|
var web = {
|
||||||
SHARE: "share",
|
SHARE: "share",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user