@netdata/charts
Version:
Netdata frontend SDK and chart utilities
44 lines • 1.71 kB
JavaScript
import Dygraph from "dygraphs";
import { dragGetY_ } from "dygraphs/src/dygraph-utils";
export default (function (chartUI) {
var startY;
var endY;
var mousedown = function mousedown(event, g, context) {
chartUI.sdk.trigger("highlightVerticalStart", chartUI.chart);
context.initializeMouseDown(event, g, context);
Dygraph.startZoom(event, g, context);
startY = context.dragStartY;
endY = -1;
chartUI.on("mousemove", mousemove).on("mouseup", _mouseup);
};
var mousemove = function mousemove(event, g, context) {
if (!context.isZooming) return;
var ctx = g.canvas_ctx_,
canvas = g.canvas_;
var rect = canvas.getBoundingClientRect();
if (event.pageY < rect.top || event.pageY > rect.bottom) return;
context.zoomMoved = true;
context.dragEndY = dragGetY_(event, context);
var dragStartY = context.dragStartY,
dragEndY = context.dragEndY;
var area = g.getArea();
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = "rgba(128,128,128,0.3)";
ctx.fillRect(area.x, Math.min(dragStartY, dragEndY), area.w, Math.abs(dragEndY - dragStartY));
context.prevEndY = dragEndY;
endY = dragEndY;
};
var _mouseup = function mouseup(event, g, context) {
if (context.isZooming) {
g.clearZoomRect_();
context.destroy();
var range = endY === -1 || Math.abs(startY - endY) < 5 ? null : [g.toDataYCoord(startY), g.toDataYCoord(endY)].sort(function (a, b) {
return a - b;
});
chartUI.sdk.trigger("highlightVerticalEnd", chartUI.chart, range);
}
chartUI.off("mousemove", mousemove);
chartUI.off("mouseup", _mouseup);
};
return chartUI.on("mousedown", mousedown);
});