dygraphs
Version:
dygraphs is a fast, flexible open source JavaScript charting library.
108 lines (101 loc) • 14.4 kB
JavaScript
"use strict";
/**
* @license
* Copyright 2015 Petr Shevtsov (petr.shevtsov@gmail.com)
* MIT-licenced: https://opensource.org/license/MIT
*/
/* loader wrapper to allow browser use and ES6 imports */
(function _extras_crosshair_wrapper() {
'use strict';
var Dygraph;
if (window.Dygraph) {
Dygraph = window.Dygraph;
} else if (typeof module !== 'undefined') {
Dygraph = require('../dygraph');
if (typeof Dygraph.NAME === 'undefined' && typeof Dygraph["default"] !== 'undefined') Dygraph = Dygraph["default"];
}
/* end of loader wrapper header */
Dygraph.Plugins.Crosshair = function _extras_crosshair_closure() {
'use strict';
/**
* Creates the crosshair
*
* @constructor
*/
var crosshair = function crosshair(opt_options) {
this.canvas_ = document.createElement("canvas");
opt_options = opt_options || {};
this.direction_ = opt_options.direction || null;
this.strokeStyle_ = opt_options.strokeStyle || "rgba(0, 0, 0, 0.3)";
};
crosshair.prototype.updateCanvasSize = function updateCanvasSize(width, height) {
if (width === this.canvas_.width && height === this.canvas_.height) return;
this.canvas_.width = width;
this.canvas_.height = height;
this.canvas_.style.width = width + 'px'; // for IE
this.canvas_.style.height = height + 'px'; // for IE
};
crosshair.prototype.toString = function toString() {
return "Crosshair Plugin";
};
/**
* @param {Dygraph} g Graph instance.
* @return {object.<string, function(ev)>} Mapping of event names to callbacks.
*/
crosshair.prototype.activate = function activate(g) {
this.updateCanvasSize(g.width_, g.height_);
g.graphDiv.appendChild(this.canvas_);
return {
select: this.select,
deselect: this.deselect
};
};
crosshair.prototype.select = function select(e) {
if (this.direction_ === null) {
return;
}
var width = e.dygraph.width_;
var height = e.dygraph.height_;
this.updateCanvasSize(width, height);
var ctx = this.canvas_.getContext("2d");
ctx.clearRect(0, 0, width, height);
ctx.strokeStyle = this.strokeStyle_;
ctx.beginPath();
if (this.direction_ === "both" || this.direction_ === "vertical") {
if (e.dygraph.selPoints_.length !== 0) {
var p = e.dygraph.selPoints_[0];
if (p.x >= 0 && p.x <= 1) {
var canvasx = Math.floor(p.canvasx) + 0.5; // crisper rendering
if (canvasx > width) canvasx = width - 0.5;
ctx.moveTo(canvasx, 0);
ctx.lineTo(canvasx, height);
}
}
}
if (this.direction_ === "both" || this.direction_ === "horizontal") {
for (var i = 0; i < e.dygraph.selPoints_.length; i++) {
var p = e.dygraph.selPoints_[i];
if (p.y >= 0 && p.y <= 1) {
var canvasy = Math.floor(p.canvasy) + 0.5; // crisper rendering
if (canvasy > height) canvasy = height - 0.5;
ctx.moveTo(0, canvasy);
ctx.lineTo(width, canvasy);
}
}
}
ctx.stroke();
ctx.closePath();
};
crosshair.prototype.deselect = function deselect(e) {
var ctx = this.canvas_.getContext("2d");
ctx.clearRect(0, 0, this.canvas_.width, this.canvas_.height);
};
crosshair.prototype.destroy = function destroy() {
this.canvas_ = null;
};
return crosshair;
}();
/* loader wrapper */
Dygraph._require.add('dygraphs/src/extras/crosshair.js', /* exports */{});
})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXh0cmFzX2Nyb3NzaGFpcl93cmFwcGVyIiwiRHlncmFwaCIsIndpbmRvdyIsIm1vZHVsZSIsInJlcXVpcmUiLCJOQU1FIiwiUGx1Z2lucyIsIkNyb3NzaGFpciIsIl9leHRyYXNfY3Jvc3NoYWlyX2Nsb3N1cmUiLCJjcm9zc2hhaXIiLCJvcHRfb3B0aW9ucyIsImNhbnZhc18iLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJkaXJlY3Rpb25fIiwiZGlyZWN0aW9uIiwic3Ryb2tlU3R5bGVfIiwic3Ryb2tlU3R5bGUiLCJwcm90b3R5cGUiLCJ1cGRhdGVDYW52YXNTaXplIiwid2lkdGgiLCJoZWlnaHQiLCJzdHlsZSIsInRvU3RyaW5nIiwiYWN0aXZhdGUiLCJnIiwid2lkdGhfIiwiaGVpZ2h0XyIsImdyYXBoRGl2IiwiYXBwZW5kQ2hpbGQiLCJzZWxlY3QiLCJkZXNlbGVjdCIsImUiLCJkeWdyYXBoIiwiY3R4IiwiZ2V0Q29udGV4dCIsImNsZWFyUmVjdCIsImJlZ2luUGF0aCIsInNlbFBvaW50c18iLCJsZW5ndGgiLCJwIiwieCIsImNhbnZhc3giLCJNYXRoIiwiZmxvb3IiLCJtb3ZlVG8iLCJsaW5lVG8iLCJpIiwieSIsImNhbnZhc3kiLCJzdHJva2UiLCJjbG9zZVBhdGgiLCJkZXN0cm95IiwiX3JlcXVpcmUiLCJhZGQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZXh0cmFzL2Nyb3NzaGFpci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxNSBQZXRyIFNoZXZ0c292IChwZXRyLnNoZXZ0c292QGdtYWlsLmNvbSlcbiAqIE1JVC1saWNlbmNlZDogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlL01JVFxuICovXG5cbi8qIGxvYWRlciB3cmFwcGVyIHRvIGFsbG93IGJyb3dzZXIgdXNlIGFuZCBFUzYgaW1wb3J0cyAqL1xuKGZ1bmN0aW9uIF9leHRyYXNfY3Jvc3NoYWlyX3dyYXBwZXIoKSB7XG4ndXNlIHN0cmljdCc7XG52YXIgRHlncmFwaDtcbmlmICh3aW5kb3cuRHlncmFwaCkge1xuICBEeWdyYXBoID0gd2luZG93LkR5Z3JhcGg7XG59IGVsc2UgaWYgKHR5cGVvZihtb2R1bGUpICE9PSAndW5kZWZpbmVkJykge1xuICBEeWdyYXBoID0gcmVxdWlyZSgnLi4vZHlncmFwaCcpO1xuICBpZiAodHlwZW9mKER5Z3JhcGguTkFNRSkgPT09ICd1bmRlZmluZWQnICYmIHR5cGVvZihEeWdyYXBoLmRlZmF1bHQpICE9PSAndW5kZWZpbmVkJylcbiAgICBEeWdyYXBoID0gRHlncmFwaC5kZWZhdWx0O1xufVxuLyogZW5kIG9mIGxvYWRlciB3cmFwcGVyIGhlYWRlciAqL1xuXG5EeWdyYXBoLlBsdWdpbnMuQ3Jvc3NoYWlyID0gKGZ1bmN0aW9uIF9leHRyYXNfY3Jvc3NoYWlyX2Nsb3N1cmUoKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgY3Jvc3NoYWlyXG4gICAqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKi9cblxuICB2YXIgY3Jvc3NoYWlyID0gZnVuY3Rpb24gY3Jvc3NoYWlyKG9wdF9vcHRpb25zKSB7XG4gICAgdGhpcy5jYW52YXNfID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICBvcHRfb3B0aW9ucyA9IG9wdF9vcHRpb25zIHx8IHt9O1xuICAgIHRoaXMuZGlyZWN0aW9uXyA9IG9wdF9vcHRpb25zLmRpcmVjdGlvbiB8fCBudWxsO1xuICAgIHRoaXMuc3Ryb2tlU3R5bGVfID0gb3B0X29wdGlvbnMuc3Ryb2tlU3R5bGUgfHwgXCJyZ2JhKDAsIDAsIDAsIDAuMylcIjtcbiAgfTtcblxuICBjcm9zc2hhaXIucHJvdG90eXBlLnVwZGF0ZUNhbnZhc1NpemUgPSBmdW5jdGlvbiB1cGRhdGVDYW52YXNTaXplKHdpZHRoLCBoZWlnaHQpIHtcbiAgICBpZiAod2lkdGggPT09IHRoaXMuY2FudmFzXy53aWR0aCAmJiBoZWlnaHQgPT09IHRoaXMuY2FudmFzXy5oZWlnaHQpXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5jYW52YXNfLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5jYW52YXNfLmhlaWdodCA9IGhlaWdodDtcbiAgICB0aGlzLmNhbnZhc18uc3R5bGUud2lkdGggPSB3aWR0aCArICdweCc7ICAgIC8vIGZvciBJRVxuICAgIHRoaXMuY2FudmFzXy5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAncHgnOyAgLy8gZm9yIElFXG4gIH07XG5cbiAgY3Jvc3NoYWlyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBcIkNyb3NzaGFpciBQbHVnaW5cIjtcbiAgfTtcblxuICAvKipcbiAgICogQHBhcmFtIHtEeWdyYXBofSBnIEdyYXBoIGluc3RhbmNlLlxuICAgKiBAcmV0dXJuIHtvYmplY3QuPHN0cmluZywgZnVuY3Rpb24oZXYpPn0gTWFwcGluZyBvZiBldmVudCBuYW1lcyB0byBjYWxsYmFja3MuXG4gICAqL1xuICBjcm9zc2hhaXIucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24gYWN0aXZhdGUoZykge1xuICAgIHRoaXMudXBkYXRlQ2FudmFzU2l6ZShnLndpZHRoXywgZy5oZWlnaHRfKTtcbiAgICBnLmdyYXBoRGl2LmFwcGVuZENoaWxkKHRoaXMuY2FudmFzXyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2VsZWN0OiB0aGlzLnNlbGVjdCxcbiAgICAgIGRlc2VsZWN0OiB0aGlzLmRlc2VsZWN0XG4gICAgfTtcbiAgfTtcblxuICBjcm9zc2hhaXIucHJvdG90eXBlLnNlbGVjdCA9IGZ1bmN0aW9uIHNlbGVjdChlKSB7XG4gICAgaWYgKHRoaXMuZGlyZWN0aW9uXyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB3aWR0aCA9IGUuZHlncmFwaC53aWR0aF87XG4gICAgdmFyIGhlaWdodCA9IGUuZHlncmFwaC5oZWlnaHRfO1xuICAgIHRoaXMudXBkYXRlQ2FudmFzU2l6ZSh3aWR0aCwgaGVpZ2h0KTtcblxuICAgIHZhciBjdHggPSB0aGlzLmNhbnZhc18uZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgY3R4LnN0cm9rZVN0eWxlID0gdGhpcy5zdHJva2VTdHlsZV87XG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuXG4gICAgaWYgKHRoaXMuZGlyZWN0aW9uXyA9PT0gXCJib3RoXCIgfHwgdGhpcy5kaXJlY3Rpb25fID09PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgIGlmIChlLmR5Z3JhcGguc2VsUG9pbnRzXy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgdmFyIHAgPSBlLmR5Z3JhcGguc2VsUG9pbnRzX1swXTtcbiAgICAgICAgaWYgKHAueCA+PSAwICYmIHAueCA8PSAxKSB7XG4gICAgICAgICAgdmFyIGNhbnZhc3ggPSBNYXRoLmZsb29yKHAuY2FudmFzeCkgKyAwLjU7IC8vIGNyaXNwZXIgcmVuZGVyaW5nXG4gICAgICAgICAgaWYgKGNhbnZhc3ggPiB3aWR0aClcbiAgICAgICAgICAgIGNhbnZhc3ggPSB3aWR0aCAtIDAuNTtcblxuICAgICAgICAgIGN0eC5tb3ZlVG8oY2FudmFzeCwgMCk7XG4gICAgICAgICAgY3R4LmxpbmVUbyhjYW52YXN4LCBoZWlnaHQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGlyZWN0aW9uXyA9PT0gXCJib3RoXCIgfHwgdGhpcy5kaXJlY3Rpb25fID09PSBcImhvcml6b250YWxcIikge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlLmR5Z3JhcGguc2VsUG9pbnRzXy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcCA9IGUuZHlncmFwaC5zZWxQb2ludHNfW2ldO1xuICAgICAgICBpZiAocC55ID49IDAgJiYgcC55IDw9IDEpIHtcbiAgICAgICAgICB2YXIgY2FudmFzeSA9IE1hdGguZmxvb3IocC5jYW52YXN5KSArIDAuNTsgLy8gY3Jpc3BlciByZW5kZXJpbmdcbiAgICAgICAgICBpZiAoY2FudmFzeSA+IGhlaWdodClcbiAgICAgICAgICAgIGNhbnZhc3kgPSBoZWlnaHQgLSAwLjU7XG5cbiAgICAgICAgICBjdHgubW92ZVRvKDAsIGNhbnZhc3kpO1xuICAgICAgICAgIGN0eC5saW5lVG8od2lkdGgsIGNhbnZhc3kpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY3R4LnN0cm9rZSgpO1xuICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgfTtcblxuICBjcm9zc2hhaXIucHJvdG90eXBlLmRlc2VsZWN0ID0gZnVuY3Rpb24gZGVzZWxlY3QoZSkge1xuICAgIHZhciBjdHggPSB0aGlzLmNhbnZhc18uZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgdGhpcy5jYW52YXNfLndpZHRoLCB0aGlzLmNhbnZhc18uaGVpZ2h0KTtcbiAgfTtcblxuICBjcm9zc2hhaXIucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHRoaXMuY2FudmFzXyA9IG51bGw7XG4gIH07XG5cbiAgcmV0dXJuIGNyb3NzaGFpcjtcbn0pKCk7XG5cbi8qIGxvYWRlciB3cmFwcGVyICovXG5EeWdyYXBoLl9yZXF1aXJlLmFkZCgnZHlncmFwaHMvc3JjL2V4dHJhcy9jcm9zc2hhaXIuanMnLCAvKiBleHBvcnRzICovIHt9KTtcbn0pKCk7XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUMsU0FBU0EseUJBQXlCQSxDQUFBLEVBQUc7RUFDdEMsWUFBWTs7RUFDWixJQUFJQyxPQUFPO0VBQ1gsSUFBSUMsTUFBTSxDQUFDRCxPQUFPLEVBQUU7SUFDbEJBLE9BQU8sR0FBR0MsTUFBTSxDQUFDRCxPQUFPO0VBQzFCLENBQUMsTUFBTSxJQUFJLE9BQU9FLE1BQU8sS0FBSyxXQUFXLEVBQUU7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