projects
/
dygraphs.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge pull request #171 from kberg/master
[dygraphs.git]
/
dygraph.js
diff --git
a/dygraph.js
b/dygraph.js
index
bb74cdc
..
9d58201
100644
(file)
--- a/
dygraph.js
+++ b/
dygraph.js
@@
-408,6
+408,12
@@
Dygraph.prototype.__init__ = function(div, file, attrs) {
// TODO(nikhilk): Add any other stackedGraph checks here.
}
// TODO(nikhilk): Add any other stackedGraph checks here.
}
+ // These two options have a bad interaction. See issue 359.
+ if (attrs.showRangeSelector && attrs.animatedZooms) {
+ this.warn('You should not set animatedZooms=true when using the range selector.');
+ attrs.animatedZooms = false;
+ }
+
// Dygraphs has many options, some of which interact with one another.
// To keep track of everything, we maintain two sets of options:
//
// Dygraphs has many options, some of which interact with one another.
// To keep track of everything, we maintain two sets of options:
//
@@
-437,8
+443,8
@@
Dygraph.prototype.__init__ = function(div, file, attrs) {
// Activate plugins.
this.plugins_ = [];
for (var i = 0; i < Dygraph.PLUGINS.length; i++) {
// Activate plugins.
this.plugins_ = [];
for (var i = 0; i < Dygraph.PLUGINS.length; i++) {
- var
p
lugin = Dygraph.PLUGINS[i];
- var pluginInstance = new
p
lugin();
+ var
P
lugin = Dygraph.PLUGINS[i];
+ var pluginInstance = new
P
lugin();
var pluginDict = {
plugin: pluginInstance,
events: {},
var pluginDict = {
plugin: pluginInstance,
events: {},
@@
-482,7
+488,7
@@
Dygraph.prototype.__init__ = function(div, file, attrs) {
* @private
*/
Dygraph.prototype.cascadeEvents_ = function(name, extra_props) {
* @private
*/
Dygraph.prototype.cascadeEvents_ = function(name, extra_props) {
- if (!
name in this.eventListeners_
) return true;
+ if (!
(name in this.eventListeners_)
) return true;
// QUESTION: can we use objects & prototypes to speed this up?
var e = {
// QUESTION: can we use objects & prototypes to speed this up?
var e = {
@@
-518,11
+524,13
@@
Dygraph.prototype.cascadeEvents_ = function(name, extra_props) {
* Axis is an optional parameter. Can be set to 'x' or 'y'.
*
* The zoomed status for an axis is set whenever a user zooms using the mouse
* Axis is an optional parameter. Can be set to 'x' or 'y'.
*
* The zoomed status for an axis is set whenever a user zooms using the mouse
- * or when the dateWindow or valueRange are updated (unless the
isZoomedIgnoreProgrammaticZoom
- * option is also specified).
+ * or when the dateWindow or valueRange are updated (unless the
+ *
isZoomedIgnoreProgrammaticZoom
option is also specified).
*/
Dygraph.prototype.isZoomed = function(axis) {
*/
Dygraph.prototype.isZoomed = function(axis) {
- if (axis == null) return this.zoomed_x_ || this.zoomed_y_;
+ if (axis === null || axis === undefined) {
+ return this.zoomed_x_ || this.zoomed_y_;
+ }
if (axis === 'x') return this.zoomed_x_;
if (axis === 'y') return this.zoomed_y_;
throw "axis parameter is [" + axis + "] must be null, 'x' or 'y'.";
if (axis === 'x') return this.zoomed_x_;
if (axis === 'y') return this.zoomed_y_;
throw "axis parameter is [" + axis + "] must be null, 'x' or 'y'.";
@@
-570,7
+578,7
@@
Dygraph.prototype.attr_ = function(name, seriesName) {
}
if (seriesName === this.highlightSet_ &&
this.user_attrs_.hasOwnProperty('highlightSeriesOpts')) {
}
if (seriesName === this.highlightSet_ &&
this.user_attrs_.hasOwnProperty('highlightSeriesOpts')) {
- sources.push(this.user_attrs_
['highlightSeriesOpts']
);
+ sources.push(this.user_attrs_
.highlightSeriesOpts
);
}
}
}
}
}
}
@@
-1245,6
+1253,10
@@
Dygraph.prototype.createDragInterface_ = function() {
boundedDates: null, // [minDate, maxDate]
boundedValues: null, // [[minValue, maxValue] ...]
boundedDates: null, // [minDate, maxDate]
boundedValues: null, // [[minValue, maxValue] ...]
+ // We cover iframes during mouse interactions. See comments in
+ // dygraph-utils.js for more info on why this is a good idea.
+ tarp: new Dygraph.IFrameTarp(),
+
// contextB is the same thing as this context object but renamed.
initializeMouseDown: function(event, g, contextB) {
// prevents mouse drags from selecting page text.
// contextB is the same thing as this context object but renamed.
initializeMouseDown: function(event, g, contextB) {
// prevents mouse drags from selecting page text.
@@
-1260,6
+1272,7
@@
Dygraph.prototype.createDragInterface_ = function() {
contextB.dragStartX = g.dragGetX_(event, contextB);
contextB.dragStartY = g.dragGetY_(event, contextB);
contextB.cancelNextDblclick = false;
contextB.dragStartX = g.dragGetX_(event, contextB);
contextB.dragStartY = g.dragGetY_(event, contextB);
contextB.cancelNextDblclick = false;
+ contextB.tarp.cover();
}
};
}
};
@@
-1299,6
+1312,8
@@
Dygraph.prototype.createDragInterface_ = function() {
delete self.axes_[i].dragValueRange;
}
}
delete self.axes_[i].dragValueRange;
}
}
+
+ context.tarp.uncover();
};
this.addEvent(document, 'mouseup', this.mouseUpHandler_);
};
this.addEvent(document, 'mouseup', this.mouseUpHandler_);
@@
-1521,7
+1536,9
@@
Dygraph.prototype.doUnzoom_ = function() {
newValueRanges = [];
for (i = 0; i < this.axes_.length; i++) {
var axis = this.axes_[i];
newValueRanges = [];
for (i = 0; i < this.axes_.length; i++) {
var axis = this.axes_[i];
- newValueRanges.push(axis.valueRange != null ? axis.valueRange : axis.extremeRange);
+ newValueRanges.push((axis.valueRange !== null &&
+ axis.valueRange !== undefined) ?
+ axis.valueRange : axis.extremeRange);
}
}
}
}
@@
-1653,7
+1670,7
@@
Dygraph.prototype.findClosestPoint = function(domX, domY) {
var minDist = Infinity;
var idx = -1;
var dist, dx, dy, point, closestPoint, closestSeries;
var minDist = Infinity;
var idx = -1;
var dist, dx, dy, point, closestPoint, closestSeries;
- for (
var setIdx = 0; setIdx < this.layout_.datasets.length; ++setIdx
) {
+ for (
var setIdx = this.layout_.datasets.length - 1 ; setIdx >= 0 ; --setIdx
) {
var points = this.layout_.points[setIdx];
for (var i = 0; i < points.length; ++i) {
var point = points[i];
var points = this.layout_.points[setIdx];
for (var i = 0; i < points.length; ++i) {
var point = points[i];
@@
-1723,7
+1740,7
@@
Dygraph.prototype.findStackedPoint = function(domX, domY) {
}
}
// Stop if the point (domX, py) is above this series' upper edge
}
}
// Stop if the point (domX, py) is above this series' upper edge
- if (setIdx == 0 || py < domY) {
+ if (setIdx ==
=
0 || py < domY) {
closestPoint = p1;
closestSeries = setIdx;
}
closestPoint = p1;
closestSeries = setIdx;
}
@@
-1952,7
+1969,7
@@
Dygraph.prototype.setSelection = function(row, opt_seriesName, opt_locked) {
point = this.layout_.unstackPointAtIndex(setIdx, row);
}
point = this.layout_.unstackPointAtIndex(setIdx, row);
}
- if (
!(point.yval === null)
) this.selPoints_.push(point);
+ if (
point.yval !== null
) this.selPoints_.push(point);
}
}
} else {
}
}
} else {
@@
-2096,7
+2113,7
@@
Dygraph.prototype.extremeValues_ = function(series) {
// With custom bars, maxY is the max of the high values.
for (j = 0; j < series.length; j++) {
y = series[j][1][0];
// With custom bars, maxY is the max of the high values.
for (j = 0; j < series.length; j++) {
y = series[j][1][0];
- if (
!y
) continue;
+ if (
y === null || isNaN(y)
) continue;
var low = y - series[j][1][1];
var high = y + series[j][1][2];
if (low > y) low = y; // this can happen with custom bars,
var low = y - series[j][1][1];
var high = y + series[j][1][2];
if (low > y) low = y; // this can happen with custom bars,
@@
-2384,7
+2401,7
@@
Dygraph.prototype.renderGraph_ = function(is_initial_draw) {
var e = {
canvas: this.hidden_,
var e = {
canvas: this.hidden_,
- drawingContext: this.hidden_ctx_
,
+ drawingContext: this.hidden_ctx_
};
this.cascadeEvents_('willDrawChart', e);
this.plotter_.render();
};
this.cascadeEvents_('willDrawChart', e);
this.plotter_.render();
@@
-2920,7
+2937,8
@@
Dygraph.prototype.parseFloat_ = function(x, opt_line_no, opt_line) {
*/
Dygraph.prototype.parseCSV_ = function(data) {
var ret = [];
*/
Dygraph.prototype.parseCSV_ = function(data) {
var ret = [];
- var lines = data.split("\n");
+ var line_delimiter = Dygraph.detectLineDelimiter(data);
+ var lines = data.split(line_delimiter || "\n");
var vals, j;
// Use the default delimiter or fall back to a tab if that makes sense.
var vals, j;
// Use the default delimiter or fall back to a tab if that makes sense.
@@
-3134,7
+3152,7
@@
Dygraph.prototype.parseDataTable_ = function(data) {
num = Math.floor((num - 1) / 26);
}
return shortText;
num = Math.floor((num - 1) / 26);
}
return shortText;
- }
+ }
;
var cols = data.getNumberOfColumns();
var rows = data.getNumberOfRows();
var cols = data.getNumberOfColumns();
var rows = data.getNumberOfRows();
@@
-3276,7
+3294,8
@@
Dygraph.prototype.start_ = function() {
this.predraw_();
} else if (typeof data == 'string') {
// Heuristic: a newline means it's CSV data. Otherwise it's an URL.
this.predraw_();
} else if (typeof data == 'string') {
// Heuristic: a newline means it's CSV data. Otherwise it's an URL.
- if (data.indexOf('\n') >= 0) {
+ var line_delimiter = Dygraph.detectLineDelimiter(data);
+ if (line_delimiter) {
this.loadedEvent_(data);
} else {
var req = new XMLHttpRequest();
this.loadedEvent_(data);
} else {
var req = new XMLHttpRequest();