X-Git-Url: https://adrianiainlam.tk/git/?a=blobdiff_plain;f=dygraph-canvas.js;h=11affc22e426a9eaa64a5b7bcc465f821fc47253;hb=68f9bed30349ea126921490f2631dc30a404d092;hp=452be0a65ecb07df0a289885194601e3991a75ca;hpb=f474c2a348651a43addaf796d31aab16e5851b74;p=dygraphs.git diff --git a/dygraph-canvas.js b/dygraph-canvas.js index 452be0a..11affc2 100644 --- a/dygraph-canvas.js +++ b/dygraph-canvas.js @@ -17,7 +17,7 @@ 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(); }; @@ -146,7 +146,7 @@ DygraphLayout.prototype.removeAllDatasets = function() { * @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: @@ -179,23 +179,12 @@ DygraphCanvasRenderer = function(dygraph, element, layout, options) { "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; @@ -256,7 +245,7 @@ DygraphCanvasRenderer.prototype.clear = function() { DygraphCanvasRenderer.isSupported = function(canvasName) { var canvas = null; try { - if (MochiKit.Base.isUndefinedOrNull(canvasName)) + if (typeof(canvasName) == 'undefined' || canvasName == null) canvas = document.createElement("canvas"); else canvas = canvasName; @@ -445,11 +434,11 @@ DygraphCanvasRenderer.prototype._renderLineChart = function() { var context = this.element.getContext("2d"); var colorCount = this.options.colorScheme.length; var colorScheme = this.options.colorScheme; - var setNames = MochiKit.Base.keys(this.layout.datasets); var errorBars = this.layout.options.errorBars; + + var setNames = []; + for (var name in this.layout.datasets) setNames.push(name); var setCount = setNames.length; - var bind = MochiKit.Base.bind; - var partial = MochiKit.Base.partial; //Update Points for (var i = 0; i < this.layout.points.length; i++) { @@ -460,65 +449,17 @@ DygraphCanvasRenderer.prototype._renderLineChart = function() { // 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; @@ -534,7 +475,7 @@ DygraphCanvasRenderer.prototype._renderLineChart = function() { 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 ]; @@ -554,10 +495,56 @@ DygraphCanvasRenderer.prototype._renderLineChart = function() { } 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(); };