DygraphLayout = function(dygraph, options) {
this.dygraph_ = dygraph;
this.options = {}; // TODO(danvk): remove, use attr_ instead.
- MochiKit.Base.update(this.options, options ? options : {});
+ Dygraph.update(this.options, options ? options : {});
this.datasets = new Array();
};
* @param {Object} new_options an associative array of new properties
*/
DygraphLayout.prototype.updateOptions = function(new_options) {
- MochiKit.Base.update(this.options, new_options ? new_options : {});
+ Dygraph.update(this.options, new_options ? new_options : {});
};
// Subclass PlotKit.CanvasRenderer to add:
"drawXGrid": true,
"gridLineColor": "rgb(128,128,128)"
};
- MochiKit.Base.update(this.options, options);
+ Dygraph.update(this.options, options);
this.layout = layout;
this.element = element;
this.container = this.element.parentNode;
- // Stuff relating to Canvas on IE support
- this.isIE = (/MSIE/.test(navigator.userAgent) && !window.opera);
-
- if (this.isIE && !isNil(G_vmlCanvasManager)) {
- this.IEDelay = 0.5;
- this.maxTries = 5;
- this.renderDelay = null;
- this.clearDelay = null;
- this.element = G_vmlCanvasManager.initElement(this.element);
- }
-
this.height = this.element.height;
this.width = this.element.width;
var colorCount = this.options.colorScheme.length;
var colorScheme = this.options.colorScheme;
var errorBars = this.layout.options.errorBars;
- var bind = MochiKit.Base.bind;
var setNames = [];
for (var name in this.layout.datasets) setNames.push(name);
// create paths
var isOK = function(x) { return x && !isNaN(x); };
- var makePath = function(ctx) {
- for (var i = 0; i < setCount; i++) {
- var setName = setNames[i];
- var color = colorScheme[i%colorCount];
-
- // setup graphics context
- context.save();
- var point = this.layout.points[0];
- var pointSize = this.dygraph_.attr_("pointSize");
- var prevX = null, prevY = null;
- var drawPoints = this.dygraph_.attr_("drawPoints");
- var points = this.layout.points;
- for (var j = 0; j < points.length; j++) {
- var point = points[j];
- if (point.name == setName) {
- if (!isOK(point.canvasy)) {
- // this will make us move to the next point, not draw a line to it.
- prevX = prevY = null;
- } else {
- // A point is "isolated" if it is non-null but both the previous
- // and next points are null.
- var isIsolated = (!prevX && (j == points.length - 1 ||
- !isOK(points[j+1].canvasy)));
-
- if (!prevX) {
- prevX = point.canvasx;
- prevY = point.canvasy;
- } else {
- ctx.beginPath();
- ctx.strokeStyle = color;
- ctx.lineWidth = this.options.strokeWidth;
- ctx.moveTo(prevX, prevY);
- prevX = point.canvasx;
- prevY = point.canvasy;
- ctx.lineTo(prevX, prevY);
- ctx.stroke();
- }
-
- if (drawPoints || isIsolated) {
- ctx.beginPath();
- ctx.fillStyle = color;
- ctx.arc(point.canvasx, point.canvasy, pointSize, 0, 360, false);
- ctx.fill();
- }
- }
- }
- }
- }
- };
- var makeErrorBars = function(ctx) {
+ var ctx = context;
+ if (errorBars) {
for (var i = 0; i < setCount; i++) {
var setName = setNames[i];
var color = colorScheme[i % colorCount];
// setup graphics context
- context.save();
- context.strokeStyle = color;
- context.lineWidth = this.options.strokeWidth;
+ ctx.save();
+ ctx.strokeStyle = color;
+ ctx.lineWidth = this.options.strokeWidth;
var prevX = -1;
var prevYs = [-1, -1];
var count = 0;
if (point.name == setName) {
if (!point.y || isNaN(point.y)) {
prevX = -1;
- return;
+ continue;
}
var newYs = [ point.y - point.errorPlus * yscale,
point.y + point.errorMinus * yscale ];
}
ctx.fill();
}
- };
+ }
+
+ for (var i = 0; i < setCount; i++) {
+ var setName = setNames[i];
+ var color = colorScheme[i%colorCount];
+
+ // setup graphics context
+ context.save();
+ var point = this.layout.points[0];
+ var pointSize = this.dygraph_.attr_("pointSize");
+ var prevX = null, prevY = null;
+ var drawPoints = this.dygraph_.attr_("drawPoints");
+ var points = this.layout.points;
+ for (var j = 0; j < points.length; j++) {
+ var point = points[j];
+ if (point.name == setName) {
+ if (!isOK(point.canvasy)) {
+ // this will make us move to the next point, not draw a line to it.
+ prevX = prevY = null;
+ } else {
+ // A point is "isolated" if it is non-null but both the previous
+ // and next points are null.
+ var isIsolated = (!prevX && (j == points.length - 1 ||
+ !isOK(points[j+1].canvasy)));
+
+ if (!prevX) {
+ prevX = point.canvasx;
+ prevY = point.canvasy;
+ } else {
+ ctx.beginPath();
+ ctx.strokeStyle = color;
+ ctx.lineWidth = this.options.strokeWidth;
+ ctx.moveTo(prevX, prevY);
+ prevX = point.canvasx;
+ prevY = point.canvasy;
+ ctx.lineTo(prevX, prevY);
+ ctx.stroke();
+ }
+
+ if (drawPoints || isIsolated) {
+ ctx.beginPath();
+ ctx.fillStyle = color;
+ ctx.arc(point.canvasx, point.canvasy, pointSize,
+ 0, 2 * Math.PI, false);
+ ctx.fill();
+ }
+ }
+ }
+ }
+ }
- if (errorBars)
- bind(makeErrorBars, this)(context);
- bind(makePath, this)(context);
context.restore();
};