New file |
0,0 → 1,130 |
/* |
Copyright (c) 2004-2006, The Dojo Foundation |
All Rights Reserved. |
|
Licensed under the Academic Free License version 2.1 or above OR the |
modified BSD license. For more information on Dojo licensing, see: |
|
http://dojotoolkit.org/community/licensing.shtml |
*/ |
|
dojo.provide("dojo.charting.Axis"); |
dojo.require("dojo.lang.common"); |
dojo.charting.Axis = function (label, scale, labels) { |
var id = "dojo-charting-axis-" + dojo.charting.Axis.count++; |
this.getId = function () { |
return id; |
}; |
this.setId = function (key) { |
id = key; |
}; |
this.scale = scale || "linear"; |
this.label = label || ""; |
this.showLabel = true; |
this.showLabels = true; |
this.showLines = false; |
this.showTicks = false; |
this.range = {upper:100, lower:0}; |
this.origin = "min"; |
this._origin = null; |
this.labels = labels || []; |
this._labels = []; |
this.nodes = {main:null, axis:null, label:null, labels:null, lines:null, ticks:null}; |
this._rerender = false; |
}; |
dojo.charting.Axis.count = 0; |
dojo.extend(dojo.charting.Axis, {getCoord:function (val, plotArea, plot) { |
val = parseFloat(val, 10); |
var area = plotArea.getArea(); |
if (plot.axisX == this) { |
var offset = 0 - this.range.lower; |
var min = this.range.lower + offset; |
var max = this.range.upper + offset; |
val += offset; |
return (val * ((area.right - area.left) / max)) + area.left; |
} else { |
var max = this.range.upper; |
var min = this.range.lower; |
var offset = 0; |
if (min < 0) { |
offset += Math.abs(min); |
} |
max += offset; |
min += offset; |
val += offset; |
var pmin = area.bottom; |
var pmax = area.top; |
return (((pmin - pmax) / (max - min)) * (max - val)) + pmax; |
} |
}, initializeOrigin:function (drawAgainst, plane) { |
if (this._origin == null) { |
this._origin = this.origin; |
} |
if (isNaN(this._origin)) { |
if (this._origin.toLowerCase() == "max") { |
this.origin = drawAgainst.range[(plane == "y") ? "upper" : "lower"]; |
} else { |
if (this._origin.toLowerCase() == "min") { |
this.origin = drawAgainst.range[(plane == "y") ? "lower" : "upper"]; |
} else { |
this.origin = 0; |
} |
} |
} |
}, initializeLabels:function () { |
this._labels = []; |
if (this.labels.length == 0) { |
this.showLabels = false; |
this.showLines = false; |
this.showTicks = false; |
} else { |
if (this.labels[0].label && this.labels[0].value != null) { |
for (var i = 0; i < this.labels.length; i++) { |
this._labels.push(this.labels[i]); |
} |
} else { |
if (!isNaN(this.labels[0])) { |
for (var i = 0; i < this.labels.length; i++) { |
this._labels.push({label:this.labels[i], value:this.labels[i]}); |
} |
} else { |
var a = []; |
for (var i = 0; i < this.labels.length; i++) { |
a.push(this.labels[i]); |
} |
var s = a.shift(); |
this._labels.push({label:s, value:this.range.lower}); |
if (a.length > 0) { |
var s = a.pop(); |
this._labels.push({label:s, value:this.range.upper}); |
} |
if (a.length > 0) { |
var range = this.range.upper - this.range.lower; |
var step = range / (this.labels.length - 1); |
for (var i = 1; i <= a.length; i++) { |
this._labels.push({label:a[i - 1], value:this.range.lower + (step * i)}); |
} |
} |
} |
} |
} |
}, initialize:function (plotArea, plot, drawAgainst, plane) { |
this.destroy(); |
this.initializeOrigin(drawAgainst, plane); |
this.initializeLabels(); |
var node = this.render(plotArea, plot, drawAgainst, plane); |
return node; |
}, destroy:function () { |
for (var p in this.nodes) { |
while (this.nodes[p] && this.nodes[p].childNodes.length > 0) { |
this.nodes[p].removeChild(this.nodes[p].childNodes[0]); |
} |
if (this.nodes[p] && this.nodes[p].parentNode) { |
this.nodes[p].parentNode.removeChild(this.nodes[p]); |
} |
this.nodes[p] = null; |
} |
}}); |
dojo.requireIf(dojo.render.svg.capable, "dojo.charting.svg.Axis"); |
dojo.requireIf(dojo.render.vml.capable, "dojo.charting.vml.Axis"); |
|