X-Git-Url: https://adrianiainlam.tk/git/?a=blobdiff_plain;f=dygraph.js;h=e7cb8f8483215d4b39d2fcc8fa51ef6795909ed5;hb=37567cceaeaee48596653c1b59adb12fca8dbc26;hp=483cf7e0bde13040483f90cded4f6a520d9bf21d;hpb=9922a600c3cc88246729cb13cbd198e4729b77da;p=dygraphs.git diff --git a/dygraph.js b/dygraph.js index 483cf7e..e7cb8f8 100644 --- a/dygraph.js +++ b/dygraph.js @@ -182,6 +182,11 @@ Dygraph.prototype.__init__ = function(div, file, attrs) { this.is_initial_draw_ = true; this.annotations_ = []; + // Zoomed indicators - These indicate when the graph has been zoomed and on what axis. + this.zoomed = false; + this.zoomedX = false; + this.zoomedY = false; + // Clear the div. This ensure that, if multiple dygraphs are passed the same // div, then only one will be drawn. div.innerHTML = ""; @@ -843,7 +848,14 @@ Dygraph.prototype.createDragInterface_ = function() { // Track the beginning of drag events Dygraph.addEvent(this.mouseEventElement_, 'mousedown', function(event) { - event.preventDefault(); // prevents mouse drags from selecting page text. + // prevents mouse drags from selecting page text. + if (event.preventDefault) { + event.preventDefault(); // Firefox, Chrome, etc. + } else { + event.returnValue = false; // IE + event.cancelBubble = true; + } + px = Dygraph.findPosX(self.canvas_); py = Dygraph.findPosY(self.canvas_); dragStartX = getX(event); @@ -1067,6 +1079,8 @@ Dygraph.prototype.doZoomX_ = function(lowX, highX) { */ Dygraph.prototype.doZoomXDates_ = function(minDate, maxDate) { this.dateWindow_ = [minDate, maxDate]; + this.zoomed = true; + this.zoomedX = true; this.drawGraph_(); if (this.attr_("zoomCallback")) { var yRange = this.yAxisRange(); @@ -1095,10 +1109,13 @@ Dygraph.prototype.doZoomY_ = function(lowY, highY) { valueRanges.push([low[1], hi[1]]); } + this.zoomed = true; + this.zoomedY = true; this.drawGraph_(); if (this.attr_("zoomCallback")) { var xRange = this.xAxisRange(); - this.attr_("zoomCallback")(xRange[0], xRange[1], this.yAxisRanges()); + var yRange = this.yAxisRange(); + this.attr_("zoomCallback")(xRange[0], xRange[1], yRange[0], yRange[1]); } }; @@ -1125,6 +1142,9 @@ Dygraph.prototype.doUnzoom_ = function() { if (dirty) { // Putting the drawing operation before the callback because it resets // yAxisRange. + this.zoomed = false; + this.zoomedX = false; + this.zoomedY = false; this.drawGraph_(); if (this.attr_("zoomCallback")) { var minDate = this.rawData_[0][0]; @@ -1963,6 +1983,15 @@ Dygraph.prototype.drawGraph_ = function() { * indices are into the axes_ array. */ Dygraph.prototype.computeYAxes_ = function() { + var valueWindow; + if (this.axes_ != undefined) { + // Preserve valueWindow settings. + valueWindow = []; + for (var index = 0; index < this.axes_.length; index++) { + valueWindow.push(this.axes_[index].valueWindow); + } + } + this.axes_ = [{}]; // always have at least one y-axis. this.seriesToAxisMap_ = {}; @@ -2035,6 +2064,13 @@ Dygraph.prototype.computeYAxes_ = function() { if (vis[i - 1]) seriesToAxisFiltered[s] = this.seriesToAxisMap_[s]; } this.seriesToAxisMap_ = seriesToAxisFiltered; + + if (valueWindow != undefined) { + // Restore valueWindow settings. + for (var index = 0; index < valueWindow.length; index++) { + this.axes_[index].valueWindow = valueWindow[index]; + } + } }; /** @@ -2915,7 +2951,14 @@ Dygraph.GVizChart = function(container) { } Dygraph.GVizChart.prototype.draw = function(data, options) { + // Clear out any existing dygraph. + // TODO(danvk): would it make more sense to simply redraw using the current + // date_graph object? this.container.innerHTML = ''; + if (typeof(this.date_graph) != 'undefined') { + this.date_graph.destroy(); + } + this.date_graph = new Dygraph(this.container, data, options); }