import {distance} from "./util"; export function getChartMouseLocation(chartSelector, event){ let chartVizSelector = chartSelector + " .chart-viz", chartVizNode = document.querySelector(chartVizSelector), chartVizGroupNode = document.querySelector(chartVizSelector + " .chart-viz-group"), boundingRect = chartVizGroupNode.getBoundingClientRect(), x = event.clientX - boundingRect.left, y = event.clientY - boundingRect.top; x = x - chartVizNode.scrollLeft; y = y - chartVizNode.scrollTop; return {x: x, y: y}; } export function xClosestDataPoint(p1, data){ let i, d, d1, dist, y, yDist, yDist1, iClose, minDistance; for(i = 0; i < data.dataArray.length; i++){ d = data.dataArray[i]; dist = Math.abs(p1.x - d.x); if(minDistance === undefined){ iClose = i; minDistance = dist; } else if(dist < minDistance){ iClose = i; minDistance = dist; } else if(dist === minDistance){ yDist = Math.abs(p1.y - d.y); d1 = data.dataArray[iClose]; yDist1 = Math.abs(p1.y - d1.y); if(yDist < yDist1) { iClose = i; } } } return { i: iClose, d: data.dataArray[iClose] }; } export function closestDataPoint(p1, data, isStack = false){ let i, d, dist, p2 = {x: 0, y: 0}, iClose, y, minDistance; for(i = 0; i < data.dataArray.length; i++){ d = data.dataArray[i]; p2.x = d.x; y = (!isStack) ? d.y : d.y0; p2.y = y; dist = distance(p1, p2); if(minDistance === undefined){ iClose = i; minDistance = dist; } else if(dist < minDistance){ iClose = i; minDistance = dist; } } return { i: iClose, d: data.dataArray[iClose] }; }