@fusioncharts/charts
Version:
JavaScript Data Visualisation Library
1 lines • 36.6 kB
JavaScript
;var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule=true;exports.default=void 0;var _inheritsLoose2=_interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));var _scatter=_interopRequireDefault(require("../scatter"));var _kdtree=_interopRequireDefault(require("../_internal/kdtree"));var _schedular=require("@fusioncharts/core/src/schedular");var _lib=require("@fusioncharts/core/src/lib");var _linearRegression=_interopRequireDefault(require("@fusioncharts/features/src/regression-extension/linear-regression"));var UNDEF,win=window,hideFn=function hideFn(){this.hide()},POINTER="pointer",pi=Math.PI,DEFAULT_CURSOR=_lib.preDefStr.DEFAULT,pi2=2*pi,COLOR_WHITE="#FFFFFF",sameSign=function sameSign(a,b){return a*b>=0},lineIntersect=function intersect(x1,y1,x2,y2,x3,y3,x4,y4){var a1,a2,b1,b2,c1,c2,r1,r2,r3,r4,denom;a1=y2-y1;b1=x1-x2;c1=x2*y1-x1*y2;r3=a1*x3+b1*y3+c1;r4=a1*x4+b1*y4+c1;if(r3!==0&&r4!==0&&sameSign(r3,r4)){return 0}a2=y4-y3;b2=x3-x4;c2=x4*y3-x3*y4;r1=a2*x1+b2*y1+c2;r2=a2*x2+b2*y2+c2;if(r1!==0&&r2!==0&&sameSign(r1,r2)){return 0}denom=a1*b2-a2*b1;if(denom===0){return 1}return 1},lineIntersectsGrid=function lineIntersectsGrid(a,b,grid){if(isNaN(a.x)||isNaN(a.y)||isNaN(b.x)||isNaN(b.y)){return}return lineIntersect(a.x,a.y,b.x,b.y,grid.xMinWPad,grid.yMaxWPad,grid.xMaxWPad,grid.yMaxWPad)||lineIntersect(a.x,a.y,b.x,b.y,grid.xMaxWPad,grid.yMaxWPad,grid.xMaxWPad,grid.yMinWPad)||lineIntersect(a.x,a.y,b.x,b.y,grid.xMaxWPad,grid.yMinWPad,grid.xMinWPad,grid.yMinWPad)},getVisibilityRatio=function getVisibilityRatio(axis){var res=(axis.config.axisRange.max-axis.config.axisRange.min)/(axis.getVisibleConfig().maxValue-axis.getVisibleConfig().minValue);res=Math.round(res*1e3)/1e3;return res},numberNeighbours=function numberNeighbours(n){return[n-1,n,n+1]},inRange=function inRange(a,b,c){return a>=b&&a<=c},inRangeMod=function inRangeMod(a,b,c){return inRange(a,b,c)||inRange(a,c,b)},getFillColor=function getFillColor(clr,opcty){var opacity=opcty,color=clr;opacity=parseFloat(opacity/100);if(opacity<0){opacity=0}else if(opacity>1){opacity=1}if(!color){color=COLOR_WHITE}if(_lib.isIE&&!_lib.hasSVG){return opacity?color:"transparent"}color=color.replace(/^#?([a-f0-9]+)/gi,"$1");color=(0,_lib.HEXtoRGB)(color);color[3]=opacity.toString();return"rgba("+color.join(",")+")"},getVisibleGridsIndex=function getVisibleGridsIndex(axis){var resArr=[],visibleConfig=axis.getVisibleConfig(),visibleRangeDiff=visibleConfig.maxValue-visibleConfig.minValue,visibleRangeMid=visibleConfig.minValue+visibleRangeDiff/2,focus,axisConfig=axis.config,axisRange=axisConfig.axisRange,focusedGrid;focus=Math.abs((visibleRangeMid-(axisConfig.isReverse?axisRange.max:axisRange.min))/visibleRangeDiff);focusedGrid=resArr.focusedGrid=Math.floor(focus);resArr.push(focusedGrid);if(focus%1>.5){resArr.push(focusedGrid+1)}else if(focus%1<.5){resArr.unshift(focusedGrid-1)}return resArr};var ZoomScatter=function(_Scatter){function ZoomScatter(){return _Scatter.apply(this,arguments)||this}(0,_inheritsLoose2.default)(ZoomScatter,_Scatter);var _proto=ZoomScatter.prototype;_proto.getType=function getType(){return"dataset"};_proto.getName=function getName(){return"zoomScatter"};_proto.configureAttributes=function configureAttributes(datasetJSON){_Scatter.prototype.configureAttributes.call(this,datasetJSON);var plotFillHoverColor,plotFillHoverAlpha,borderHoverColor,borderHoverThickness,borderHoverAlpha,showHoverEffect,staticRadius,dataset=this,conf=dataset.config,chart=dataset.getFromEnv("chart"),chartConfig=chart.config,chartAttr=chart.getFromEnv("dataSource").chart,userGivenBorderColor=(0,_lib.pluck)(datasetJSON.anchorbordercolor,chartAttr.anchorbordercolor),seriesAnchorBorderColor=(0,_lib.getFirstColor)((0,_lib.pluck)(userGivenBorderColor,conf.plotBorderColor)),seriesAnchorBorderThickness=(0,_lib.pluckNumber)(datasetJSON.anchorborderthickness,chartAttr.anchorborderthickness,userGivenBorderColor?1:0),seriesAnchorBgColor=(0,_lib.getFirstColor)((0,_lib.pluck)(datasetJSON.anchorbgcolor,datasetJSON.color,chartAttr.anchorbgcolor,conf.plotColor)),seriesAnchorAlpha=(0,_lib.pluck)(datasetJSON.anchoralpha,datasetJSON.alpha,chartAttr.anchoralpha,_lib.HUNDREDSTRING),seriesAnchorBgAlpha=(0,_lib.pluck)(datasetJSON.anchorbgalpha,datasetJSON.alpha,chartAttr.anchorbgalpha,_lib.HUNDREDSTRING),lineColorObj={color:conf.lineColor,alpha:conf.lineAlpha};conf.plotCosmetics={fillStyle:getFillColor(seriesAnchorBgColor,seriesAnchorAlpha*seriesAnchorBgAlpha/100),strokeStyle:getFillColor(seriesAnchorBorderColor,seriesAnchorAlpha),borderWidth:seriesAnchorBorderThickness,lineWidth:conf.lineThickness,lineStrokeStyle:(0,_lib.toRaphaelColor)(lineColorObj)};dataset.config.JSONData=datasetJSON;conf.anchorBorderThickness=(0,_lib.pluckNumber)(datasetJSON.anchorborderthickness,chartAttr.anchorborderthickness,userGivenBorderColor?1:0);conf.chunkSize=Math.floor(Math.min((datasetJSON.data||[]).length/5,5e4));staticRadius=conf.staticRadius=(0,_lib.pluckNumber)(chartAttr.staticradius,0);conf.radius=(0,_lib.pluckNumber)(datasetJSON.radius,datasetJSON.anchorradius,chartAttr.radius,chartAttr.anchorradius,staticRadius?3:.5);showHoverEffect=conf.showHoverEffect;plotFillHoverColor=(0,_lib.getFirstColor)((0,_lib.pluck)(datasetJSON.plotfillhovercolor,datasetJSON.hovercolor,chartAttr.plotfillhovercolor,chartAttr.hovercolor,conf.anchorbgcolor));plotFillHoverAlpha=(0,_lib.pluck)(datasetJSON.plotfillhoveralpha,datasetJSON.hoveralpha,chartAttr.plotfillhoveralpha,chartAttr.hoveralpha,_lib.HUNDREDSTRING);borderHoverColor=(0,_lib.getFirstColor)((0,_lib.pluck)(datasetJSON.plotfillhovercolor,datasetJSON.hovercolor,chartAttr.plotfillhovercolor,chartAttr.hovercolor,plotFillHoverColor));borderHoverAlpha=(0,_lib.pluck)(datasetJSON.plotfillhoveralpha,datasetJSON.hoveralpha,chartAttr.plotfillhoveralpha,chartAttr.hoveralpha,_lib.HUNDREDSTRING);borderHoverThickness=(0,_lib.pluckNumber)(datasetJSON.borderhoverthickness,chartAttr.borderhoverthickness,1);conf.hoverCosmetics={showHoverEffect:showHoverEffect,fill:getFillColor(plotFillHoverColor,plotFillHoverAlpha),borderColor:getFillColor(borderHoverColor,borderHoverAlpha),borderThickness:borderHoverThickness,plotFillHoverColor:plotFillHoverColor,plotFillHoverAlpha:plotFillHoverAlpha,borderHoverColor:borderHoverColor,borderHoverAlpha:borderHoverAlpha};conf.tooltip={toolTipVisible:chartConfig.showtooltip,seriesNameInToolTip:chartConfig.seriesnameintooltip,toolTipSepChar:chartConfig.tooltipsepchar};conf.lastViewPort={};this.disableScrollBars();this.setState("dirty",true)};_proto.hasDrawingRefChanged=function hasDrawingRefChanged(){var dataset=this,xAxis=dataset.getFromEnv("xAxis"),yAxis=dataset.getFromEnv("yAxis"),dsConfig=dataset.config,axisConfig=dsConfig.axisConfig=dsConfig.axisConfig||{},res=false,currVizRatioX=getVisibilityRatio(xAxis),chartConfig=dataset.getFromEnv("chartConfig"),currVizRatioY=getVisibilityRatio(yAxis);res=axisConfig.xZoomScale!==currVizRatioX||axisConfig.yZoomScale!==currVizRatioY||dsConfig.prevCanvasHeight!==chartConfig.canvasHeight||dsConfig.prevCanvasWidth!==chartConfig.canvasWidth;axisConfig.xZoomScale=currVizRatioX;axisConfig.yZoomScale=currVizRatioY;dsConfig.prevCanvasHeight=chartConfig.canvasHeight;dsConfig.prevCanvasWidth=chartConfig.canvasWidth;return res};_proto.saveScrollPos=function saveScrollPos(){var dataset=this,xAxis=dataset.getFromEnv("xAxis"),yAxis=dataset.getFromEnv("yAxis"),dsConfig=dataset.config,axisConfig=dsConfig.axisConfig=dsConfig.axisConfig||{};axisConfig.xScrollPos=xAxis.config.apparentScrollPos;axisConfig.yScrollPos=yAxis.config.apparentScrollPos};_proto.disableScrollBars=function disableScrollBars(){var dataset=this,chart=dataset.getFromEnv("chart"),scrollBar=chart.getChildren()&&chart.getChildren().scrollBar&&chart.getChildren().scrollBar[0];scrollBar&&chart.setScrollType("none")};_proto.calculateZoomedRadius=function calculateZoomedRadius(){var dataset=this,dsConfig=dataset.config,chartConfig=dataset.getFromEnv("chart").config,axisConfig=dsConfig.axisConfig;dsConfig.zoomedRadius=Math.min(dsConfig.staticRadius?dsConfig.radius:dsConfig.radius*Math.min(axisConfig.xZoomScale,axisConfig.yZoomScale),chartConfig.canvasWidth/2,chartConfig.canvasHeight/2)};_proto.setupKdTree=function setupKdTree(){var dataset=this,data,datastore=dataset.components.data,ii=datastore.length,i,setVal,searchDataArr=[];for(i=0;i<ii;++i){data=datastore[i];setVal=data.config.setValue;if(isNaN(setVal.x)||isNaN(setVal.y)){continue}setVal.index=i;searchDataArr.push({x:setVal.x,y:setVal.y,index:i,data:data,r:1})}dataset.addJob("kdtree",(function(){dataset.dataTree=(new _kdtree.default).buildKdTree(searchDataArr)}),_schedular.priorityList.kdTree)};_proto._getHoveredPlot=function _getHoveredPlot(x,y){var res,dataset=this,xAxis=dataset.getFromEnv("xAxis"),yAxis=dataset.getFromEnv("yAxis"),xVal,yVal;xVal=xAxis.getValue(x+xAxis.getTranslation());yVal=yAxis.getValue(y+yAxis.getTranslation());res=dataset.dataTree&&dataset.dataTree.getNeighbour({x:xVal,y:yVal,options:dataset.zoomRadiusOb},true);if(res){res.data.x=res.x;res.data.y=res.y;return{pointIndex:res.index||res.i,hovered:true,pointObj:res.data}}};_proto._decideTooltipType=function _decideTooltipType(plotIndex,e){var dataset=this,toolTipController=dataset.getFromEnv("toolTipController"),currentToolTip=dataset.config.currentToolTip,components=dataset.components,dataStore=components.data,data=dataStore[plotIndex],toolText=data&&(data.config.finalTooltext||data.config.toolText),originalEvent=e.originalEvent;if(toolText){if(currentToolTip){toolTipController.draw(originalEvent,toolText,currentToolTip)}else{currentToolTip=dataset.config.currentToolTip=toolTipController.draw(originalEvent,toolText)}}};_proto._firePlotEvent=function _firePlotEvent(eventType,plotIndex,e){var dataset=this,chart=dataset.getFromEnv("chart"),linkClick=dataset.getFromEnv("linkClickFN"),components=dataset.components,toolTipController=dataset.getFromEnv("toolTipController"),dataStore=components.data,data=dataStore[plotIndex],style=dataset.getFromEnv("paper").canvas.style,config,setLink;if(data){config=data.config;setLink=config.setLink;switch(eventType){case"fc-mouseover":dataset._decideTooltipType(plotIndex,e);dataset.highlightPoint(dataset.config.showHoverEffect,data);chart.plotEventHandler(dataset.getGraphicalElement("tracker"),e,"dataplotRollover");setLink&&(style.cursor="pointer");break;case"fc-mouseout":toolTipController.hide(dataset.config.currentToolTip);setLink&&(style.cursor=DEFAULT_CURSOR);dataset.highlightPoint(false);chart.plotEventHandler(dataset.getGraphicalElement("tracker"),e,"dataplotRollout");break;case"fc-click":chart.plotEventHandler(dataset.getGraphicalElement("tracker"),e,"dataplotClick");this.link=setLink;linkClick.call(this,false);break;case"fc-mousemove":dataset._decideTooltipType(plotIndex,e)}}};_proto.highlightPoint=function highlightPoint(showHover,point){var dataset=this,chart=dataset.getFromEnv("chart"),chartConfig=chart.config,animationManager=dataset.getFromEnv("animationManager"),trackerCheck=dataset.getGraphicalElement("tracker"),tracker,xAxis=dataset.getFromEnv("xAxis"),yAxis=dataset.getFromEnv("yAxis"),datasetConfig=dataset&&dataset.config,radius=datasetConfig&&datasetConfig.zoomedRadius||0,hoverCosmetics=datasetConfig&&datasetConfig.hoverCosmetics,fill=hoverCosmetics&&hoverCosmetics.fill,hoverEffects=point&&point.config.hoverEffects,anchorProps=point&&point.config.anchorProps,borderColor=hoverCosmetics&&hoverCosmetics.borderColor,borderThickness=hoverCosmetics&&hoverCosmetics.borderThickness,attrObj={},setLink=point&&point.link;if(showHover){attrObj={r:radius,fill:fill,stroke:borderColor,"stroke-width":borderThickness,cx:xAxis.getPixel(point.x),cy:yAxis.getPixel(point.y)}}animationManager.setAnimationState(showHover?"mouseover":"mouseout");tracker=animationManager.setAnimation({el:trackerCheck||"circle",attr:showHover&&attrObj,container:dataset.getContainer("plotGroup"),component:dataset,doNotRemove:true,callback:!showHover&&hideFn});showHover&&tracker.show();if(!trackerCheck){dataset.addGraphicalElement("tracker",tracker)}point&&tracker.data("eventArgs",{x:point.x,y:point.y,tooltip:point.config.toolText,link:setLink,showValue:point.config.showValue,hoverColor:point.config.hoverEffects.enabled===true?hoverCosmetics.plotFillHoverColor:UNDEF,hoverAlpha:point.config.hoverEffects.enabled===true?hoverCosmetics.plotFillHoverAlpha:UNDEF,anchorBgColor:anchorProps.bgColor,anchorBgAlpha:anchorProps.anchorBgAlpha,anchorAlpha:anchorProps.anchorAlpha,anchorBorderColor:anchorProps.borderColor,anchorBorderThickness:point.config.hoverEffects.enabled===true?borderThickness:anchorProps.borderThickness,anchorRadius:anchorProps.radius,anchorSides:anchorProps.sides,anchorStartAngle:anchorProps.startAngle,anchorHoverSides:hoverEffects.anchorSides});chartConfig.lastHoveredPoint=point;attrObj.cursor=setLink?POINTER:""};_proto.drawCommonElements=function drawCommonElements(){};_proto.animateCommonElements=function animateCommonElements(){};_proto.remove=function remove(){_Scatter.prototype.remove.call(this);this._deleteGridImages()};_proto.drawPlots=function drawPlots(){var dataset=this,animationManager=dataset.getFromEnv("animationManager"),xAxis=dataset.getFromEnv("xAxis"),yAxis=dataset.getFromEnv("yAxis"),scaleX,scaleY,dsConfig=dataset.config,plotGroup=dataset.getContainer("plotGroup"),zoomedRadius,containerLine,containerPlot,prevContainerLine=dataset.getContainer("containerLine"),prevContainerPlot=dataset.getContainer("containerPlot"),quickRenderVisibleGrids=false,borderThickness=dataset.config.anchorBorderThickness;dataset.saveScrollPos();containerLine=animationManager.setAnimation({el:prevContainerLine||"group",attr:{name:"lineGroup"},container:plotGroup,component:dataset,label:"group"});containerPlot=animationManager.setAnimation({el:prevContainerPlot||"group",attr:{name:"plotGroup"},container:plotGroup,component:dataset,label:"group"});if(!dataset.getState("visible")){containerLine.hide();containerPlot.hide()}else{containerLine.show();containerPlot.show()}!prevContainerLine&&dataset.addContainer("containerLine",containerLine);!prevContainerPlot&&dataset.addContainer("containerPlot",containerPlot);if(dataset.hasDrawingRefChanged()||dataset.wasLastDrawPixelated||dataset.getState("dirty")){dataset.wasLastDrawPixelated=false;dataset.calculateZoomedRadius();scaleX=getVisibilityRatio(xAxis);scaleY=getVisibilityRatio(yAxis);zoomedRadius=dsConfig.radius*Math.min(scaleX,scaleY);dataset.zoomRadiusOb={rx:xAxis.getValue(zoomedRadius+borderThickness)-xAxis.getValue(0),ry:yAxis.getValue(0)-yAxis.getValue(zoomedRadius+borderThickness)};dataset._deleteGridImages();dataset._graphics._grid={};quickRenderVisibleGrids=true}dataset._gridDraw(quickRenderVisibleGrids);dataset.setState("dirty",false)};_proto._deleteGridImages=function _deleteGridImages(){var imageElem,lineImage,lineCanvas,canvasElem,gridElem,rowIndex,colIndex,row,dataset=this,datasetConfig=dataset.config,datasetGraphics=dataset._graphics,imagePool=datasetGraphics._imagePool||(datasetGraphics._imagePool=[]),canvasPool=datasetGraphics._canvasPool||(datasetGraphics._canvasPool=[]),lineImagePool=datasetGraphics._lineImagePool||(datasetGraphics._lineImagePool=[]),lineCanvasPool=datasetGraphics._lineCanvasPool||(datasetGraphics._lineCanvasPool=[]),grid=datasetGraphics._grid||[],batchDrawTimers=datasetConfig._batchDrawTimers;if(batchDrawTimers&&batchDrawTimers.length){while(batchDrawTimers.length){dataset.removeJob(batchDrawTimers.shift())}}for(rowIndex in grid){row=grid[rowIndex];if(row){for(colIndex in row){gridElem=row[colIndex];if(gridElem&&gridElem.drawState){imageElem=gridElem.image;imageElem.attr({src:"",width:0,height:0});imagePool.push(imageElem);delete gridElem.image;canvasElem=gridElem.canvas;canvasPool.push(canvasElem);delete gridElem.canvas;delete gridElem.ctx;if(lineImage=gridElem.lineImage){lineImage.attr({src:"",width:0,height:0});lineImagePool.push(lineImage);delete gridElem.lineImage;lineCanvas=gridElem.lineCanvas;lineCanvasPool.push(lineCanvas);delete gridElem.lineCanvas;delete gridElem.lineCtx}}}}}delete datasetGraphics._grid};_proto._gridDraw=function _gridDraw(quickRenderVisibleGrids){var dataset=this,datasetConfig=dataset.config;clearTimeout(datasetConfig.timer);if(quickRenderVisibleGrids){dataset._gridManager()}else{datasetConfig.timer=dataset.addJob("_gridManagerId",(function(){dataset._gridManager()}),_schedular.priorityList.label)}};_proto.getAllGrids=function getAllGrids(){var dataset=this,dsConfig=dataset.config,chartConfig=dataset.getFromEnv("chart").config,xAxis=dataset.getFromEnv("xAxis"),yAxis=dataset.getFromEnv("yAxis"),visibleXGrids=getVisibleGridsIndex(xAxis),visibleYGrids=getVisibleGridsIndex(yAxis),nineGridsXIndices=numberNeighbours(visibleXGrids.focusedGrid),nineGridsYIndices=numberNeighbours(visibleYGrids.focusedGrid),visibleArr=[],nearByArr=[],i=0,j=0,datasetGraphics=dataset._graphics,grids=datasetGraphics._grid,row={},element,scaleX=getVisibilityRatio(xAxis),scaleY=getVisibilityRatio(yAxis),noRow=Math.ceil(scaleY),noCol=Math.ceil(scaleX),startRow=Math.max(visibleYGrids.focusedGrid-1,0),endRow=Math.min(visibleYGrids.focusedGrid+1,noRow-1),startCol=Math.max(visibleXGrids.focusedGrid-1,0),endCol=Math.min(visibleXGrids.focusedGrid+1,noCol-1),cellWidth=xAxis.getAxisConfig("axisDimention").axisLength||chartConfig.canvasWidth,cellHeight=yAxis.getAxisConfig("axisDimention").axisLength||chartConfig.canvasHeight,xAxisConfig=xAxis.config,yAxisConfig=yAxis.config,xMin=xAxisConfig.axisRange.min,xMax=xAxisConfig.axisRange.max,yMin=yAxisConfig.axisRange.min,yMax=yAxisConfig.axisRange.max,radius=dsConfig.radius*Math.min(scaleX,scaleY),borderWidth=dsConfig.plotCosmetics.borderWidth,padPx=radius+borderWidth,xRadiusPad=Math.abs(padPx/(cellWidth*scaleX/(xAxis.config.axisRange.max-xAxis.config.axisRange.min))),yRadiusPad=Math.abs(padPx/(cellHeight*scaleY/(yAxis.config.axisRange.max-yAxis.config.axisRange.min))),xRightValue,xLeftValue,yTopValue,yBottomValue,appliedLeftXPad,appliedRightXPad,gridY,gridX,yRefPx=yAxis.getPixel(yAxis.config.axisRange.max),xRefPx=xAxis.getPixel(xAxis.config.axisRange.min);if(!grids){dataset.config.grids=grids={}}for(i=startRow;i<=endRow;++i){grids[i]=row=grids[i]||{};gridY=yRefPx+i*cellHeight;yTopValue=yAxis.getValue(gridY);yBottomValue=yAxis.getValue(gridY+cellHeight);for(j=startCol;j<=endCol;++j){appliedLeftXPad=j===0?padPx:0;appliedRightXPad=j===noCol-1?padPx:0;gridX=xRefPx+j*cellWidth-appliedLeftXPad;xLeftValue=xAxis.getValue(gridX);xRightValue=xAxis.getValue(gridX+cellWidth+appliedLeftXPad+appliedRightXPad);row[j]=element=row[j]||{xPixel:gridX,width:Math.abs(xAxis.getPixel(xRightValue)-gridX),yPixel:gridY,height:yAxis.getPixel(yBottomValue)-gridY,xLeftValue:xLeftValue,yTopValue:yTopValue,xRightValue:xRightValue,yBottomValue:yBottomValue,drawState:0,xMinWPad:Math.max(Math.min(xLeftValue,xRightValue)-xRadiusPad,xMin),yMinWPad:Math.max(Math.min(yTopValue,yBottomValue)-yRadiusPad,yMin),xMaxWPad:Math.min(Math.max(xLeftValue,xRightValue)+xRadiusPad,xMax),yMaxWPad:Math.min(Math.max(yTopValue,yBottomValue)+yRadiusPad,yMax),i:i,j:j};if(!element.drawState){if(~visibleXGrids.indexOf(j)&&~visibleYGrids.indexOf(i)){visibleArr.push(element)}else if(~nineGridsXIndices.indexOf(j)&&~nineGridsYIndices.indexOf(i)){nearByArr.push(element)}}}}return{focused:visibleArr,nearBy:nearByArr}};_proto.allocatePosition=function allocatePosition(){var dataset=this,datasetConfig=dataset.config,dsStore=dataset.components.data,dsStoreLength=dsStore.length,xAxis=dataset.getFromEnv("xAxis"),yAxis=dataset.getFromEnv("yAxis"),cx,cy,i,element,config,radius=datasetConfig.zoomedRadius;for(i=0;i<dsStoreLength;i++){config=dsStore[i].config;element=config.setValue;cx=xAxis.getPixel(element.x);cy=yAxis.getPixel(element.y);config.props={element:{attr:{polypath:[0,cx,cy,radius||config.anchorProps.radius]}},label:{attr:{}}}}};_proto._gridManager=function _gridManager(){var dataset=this,gridsOb={},callback;gridsOb=dataset.getAllGrids();dataset.config._drawGrid=gridsOb.focused;if(gridsOb.focused.length||gridsOb.nearBy.length){dataset.config._drawGrid=gridsOb.focused;callback=function callback(){dataset.config._drawGrid=gridsOb.nearBy;dataset._drawGridArr()};dataset._drawGridArr(callback)}};_proto._drawGridArr=function _drawGridArr(callBack){var gridElem,canvasElem,lineCanvasElem,ctx,lineCtx,dataset=this,datasetConfig=dataset.config,drawLine=datasetConfig.drawLine,gridIndexArr=datasetConfig._drawGrid,gridSubArr=[],animationManager=dataset.getFromEnv("animationManager"),containerLine=dataset.getContainer("containerLine"),containerPlot=dataset.getContainer("containerPlot"),xAxis=dataset.getFromEnv("xAxis"),yAxis=dataset.getFromEnv("yAxis"),width,height,scaleX=getVisibilityRatio(xAxis),scaleY=getVisibilityRatio(yAxis),imagePool=dataset._graphics._imagePool||[],canvasPool=dataset._graphics._canvasPool||[],lineImagePool=dataset._graphics._lineImagePool||[],lineCanvasPool=dataset._graphics._lineCanvasPool||[],plotCosmetics=datasetConfig.plotCosmetics,radius=datasetConfig.radius*Math.min(scaleX,scaleY),gridX,gridY;if(gridIndexArr.length){while(gridIndexArr.length){gridElem=gridIndexArr.shift();gridX=gridElem.xPixel;gridY=gridElem.yPixel;width=gridElem.width;height=gridElem.height;if(gridElem.drawState===2){continue}gridElem.drawState=2;if(drawLine){if(lineImagePool.length){gridElem.lineImage=lineImagePool.shift()}gridElem.lineImage=animationManager.setAnimation({el:gridElem.lineImage||"image",attr:{x:gridX,y:gridY,width:width,height:height},container:containerLine,component:dataset,label:"image"});if(lineCanvasPool.length){gridElem.lineCanvas=lineCanvasElem=lineCanvasPool.shift()}else{gridElem.lineCanvas=lineCanvasElem=win.document.createElement("canvas")}lineCanvasElem.setAttribute("width",width);lineCanvasElem.setAttribute("height",height);lineCtx=gridElem.lineCtx=lineCanvasElem.getContext("2d");lineCtx.fillStyle=plotCosmetics.fillStyle;lineCtx.strokeStyle=plotCosmetics.lineStrokeStyle;lineCtx.lineWidth=plotCosmetics.lineWidth}if(imagePool.length){gridElem.image=imagePool.shift()}gridElem.image=animationManager.setAnimation({el:gridElem.image||"image",attr:{x:gridX,y:gridY,width:width,height:height},container:containerPlot,component:dataset,label:"image"});if(canvasPool.length){gridElem.canvas=canvasElem=canvasPool.shift()}else{gridElem.canvas=canvasElem=win.document.createElement("canvas")}canvasElem.setAttribute("width",width);canvasElem.setAttribute("height",height);ctx=gridElem.ctx=canvasElem.getContext("2d");if(radius<1){ctx.strokeStyle=plotCosmetics.fillStyle;ctx.lineWidth=.5}else{ctx.fillStyle=plotCosmetics.fillStyle;ctx.strokeStyle=plotCosmetics.strokeStyle;ctx.lineWidth=plotCosmetics.borderWidth}gridSubArr.push(gridElem)}datasetConfig._batchDrawindex=dataset.config.JSONData.data&&dataset.config.JSONData.data.length-1||0;dataset._drawGridArrBatch(gridSubArr,callBack,!datasetConfig.animation.enabled)}else{callBack&&callBack()}};_proto._drawGridArrBatch=function _drawGridArrBatch(gridArr,callBack,doNotUpdateImage){var cx,cy,cx1,cx2,cy1,cy2,storeX,j,gridElem,ctx,lineCtx,element,leftElement,rightElement,lineImage,lineCanvas,image,canvas,regresionPoints,dataset=this,datasetConfig=dataset.config,drawLine=datasetConfig.drawLine,plotCosmetics=datasetConfig.plotCosmetics,i=datasetConfig._batchDrawindex,arr=dataset.components.data,chunkSize=datasetConfig.chunkSize,endIndex=i-chunkSize,xAxis=dataset.getFromEnv("xAxis"),yAxis=dataset.getFromEnv("yAxis"),chart=dataset.getFromEnv("chart"),animationManager=dataset.getFromEnv("animationManager"),dataSource=chart.getFromEnv("dataSource"),JSONData=datasetConfig.JSONData,radius=datasetConfig.zoomedRadius,regressionStatus=(0,_lib.pluckNumber)(JSONData.showregressionline,chart.config.showregressionline,0),regressionLineColor,regressionLineThickness,regressionLineAlpha,_store=datasetConfig._store||[],doStroke=plotCosmetics.lineWidth||radius<1,leftElCx,leftElCy;if(regressionStatus){regressionLineColor=(0,_lib.toRaphaelColor)((0,_lib.pluck)(JSONData.regressionlinecolor,dataSource.chart.regressionlinecolor,datasetConfig.anchorbordercolor,datasetConfig.lineColor,"fff000"));regressionLineThickness=(0,_lib.pluckNumber)(JSONData.regressionlinethickness,dataSource.chart.regressionlinethickness,1);regressionLineAlpha=(0,_lib.pluckNumber)(JSONData.regressionlinealpha,dataSource.chart.regressionlinealpha,100)/100}for(j=0;j<gridArr.length;j+=1){gridArr[j].ctx.beginPath();if(drawLine){gridArr[j].lineCtx.beginPath()}}endIndex=endIndex<=0?0:endIndex;for(;i>=endIndex;i-=1){element=arr[i]&&arr[i].config.setValue;if(!element||isNaN(element.x)||isNaN(element.y)){continue}for(j=0;j<gridArr.length;j+=1){gridElem=gridArr[j];if(!inRangeMod(element.x,gridElem.xMinWPad,gridElem.xMaxWPad)||!inRangeMod(element.y,gridElem.yMinWPad,gridElem.yMaxWPad)){if(drawLine&&i&&lineIntersectsGrid(element,arr[i-1].config.setValue,gridElem)){leftElement=arr[i-1].config.setValue;leftElCx=xAxis.getPixel(leftElement.x)-gridElem.xPixel;leftElCy=yAxis.getPixel(leftElement.y)-gridElem.yPixel;cx=xAxis.getPixel(element.x)-gridElem.xPixel;cy=yAxis.getPixel(element.y)-gridElem.yPixel;lineCtx=gridElem.lineCtx;lineCtx.moveTo(Math.round(leftElCx),Math.round(leftElCy));lineCtx.lineTo(cx,cy)}continue}ctx=gridElem.ctx;lineCtx=gridElem.lineCtx;cx=xAxis.getPixel(element.x)-gridElem.xPixel;cy=yAxis.getPixel(element.y)-gridElem.yPixel;storeX=_store[cx];if(!storeX){storeX=_store[cx]={}}if(!storeX[cy]){storeX[cy]=true;if(drawLine){leftElement=i&&arr[i-1].config.setValue;rightElement=i<arr.length-1&&arr[i+1].config.setValue;if(leftElement&&!isNaN(leftElement.x)&&!isNaN(leftElement.y)){leftElCx=xAxis.getPixel(leftElement.x)-gridElem.xPixel;leftElCy=yAxis.getPixel(leftElement.y)-gridElem.yPixel;lineCtx.moveTo(Math.round(leftElCx),Math.round(leftElCy));lineCtx.lineTo(cx,cy);if((!inRangeMod(rightElement.x,gridElem.xMinWPad,gridElem.xMaxWPad)||!inRangeMod(rightElement.y,gridElem.yMinWPad,gridElem.yMaxWPad))&&!isNaN(rightElement.x)&&!isNaN(rightElement.y)){lineCtx.lineTo(xAxis.getPixel(rightElement.x)-gridElem.xPixel,yAxis.getPixel(rightElement.y)-gridElem.yPixel)}}}if(radius<1){ctx.moveTo(cx,cy);ctx.lineTo(cx+1,cy)}else{ctx.moveTo(cx+radius,cy);ctx.arc(cx,cy,radius,0,pi2)}}}}for(j=0;j<gridArr.length;j+=1){gridElem=gridArr[j];ctx=gridElem.ctx;ctx.fill();doStroke&&ctx.stroke();ctx.closePath();if(drawLine){lineCtx=gridElem.lineCtx;doStroke&&lineCtx.stroke();lineCtx.closePath()}}datasetConfig._batchDrawindex=i;if(i>=0){if(!doNotUpdateImage){for(j=0;j<gridArr.length;j+=1){image=gridArr[j].image;canvas=gridArr[j].canvas;animationManager.setAnimation({el:image,attr:{src:canvas.toDataURL("image/png")},component:dataset});if(datasetConfig.drawLine){lineImage=gridArr[j].lineImage;lineCanvas=gridArr[j].lineCanvas;animationManager.setAnimation({el:lineImage,src:canvas.toDataURL("image/png"),component:dataset})}}}(datasetConfig._batchDrawTimers||(datasetConfig._batchDrawTimers=[])).push(dataset.addJob("_drawGridArrBatchID",(function(){dataset.getFromEnv("chart")&&dataset._drawGridArrBatch(gridArr,callBack,doNotUpdateImage)}),_schedular.priorityList.draw))}else{dataset.setupKdTree();delete datasetConfig._store;if(regressionStatus){regresionPoints=datasetConfig.regressionPoints;for(j=0;j<gridArr.length;j+=1){gridElem=gridArr[j];image=gridElem.image;canvas=gridElem.canvas;ctx=gridElem.ctx;if(!regresionPoints.length){continue}cx1=xAxis.getPixel(regresionPoints[0].x)-gridElem.xPixel;cy1=yAxis.getPixel(regresionPoints[0].y)-gridElem.yPixel;cx2=xAxis.getPixel(regresionPoints[1].x)-gridElem.xPixel;cy2=yAxis.getPixel(regresionPoints[1].y)-gridElem.yPixel;ctx.beginPath();ctx.strokeStyle=regressionLineColor;ctx.lineWidth=regressionLineThickness;ctx.globalAlpha=regressionLineAlpha;ctx.moveTo(cx1,cy1);ctx.lineTo(cx2,cy2);ctx.stroke();ctx.closePath()}}for(j=0;j<gridArr.length;j+=1){gridElem=gridArr[j];image=gridElem.image;canvas=gridElem.canvas;gridElem.drawState=1;animationManager.setAnimation({el:image,attr:{src:canvas.toDataURL("image/png")},component:dataset});if(drawLine){lineImage=gridElem.lineImage;lineCanvas=gridElem.lineCanvas;animationManager.setAnimation({el:lineImage,attr:{src:lineCanvas.toDataURL("image/png")},component:dataset})}}callBack&&callBack()}};_proto.getRegressionPoints=function getRegressionPoints(){var dataset=this,regressionPoints=dataset.config.regressionPoints,xMax=-Infinity,xMin=Infinity,yMax=-Infinity,yMin=Infinity,i,regPointsLength;if(!regressionPoints||!regressionPoints.length){return}regPointsLength=regressionPoints.length;for(i=0;i<regPointsLength;i++){xMax=Math.max(xMax,regressionPoints[i].x);xMin=Math.min(xMin,regressionPoints[i].x);yMax=Math.max(yMax,regressionPoints[i].y);yMin=Math.min(yMin,regressionPoints[i].y)}return{max:yMax,min:yMin,xMax:xMax,xMin:xMin}};_proto.show=function show(){var dataSet=this,lineGroup=dataSet.getContainer("containerLine"),plotGroup=dataSet.getContainer("containerPlot"),legend=dataSet.getFromEnv("legend");if(legend&&legend.getItem(dataSet.config.legendItemId)){legend.getItem(dataSet.config.legendItemId).removeLegendState("hidden")}dataSet.setState("visible",true);lineGroup.show();plotGroup.show();dataSet.setState("dirty",true)};_proto.setContainerVisibility=function setContainerVisibility(){};_proto.draw=function draw(){var dataSet=this,conf=dataSet.config,xAxis=dataSet.getFromEnv("xAxis"),xAxisZeroPos=xAxis.getPixel(0),xAxisFirstPos=xAxis.getPixel(1),groupMaxWidth=dataSet.getFromEnv("groupMaxWidth"),drawn=conf.drawn,scrollMinValForLabel,scrollMaxValForLabel,skipInfo=dataSet.getSkippingInfo&&dataSet.getSkippingInfo()||{},skippingApplied=skipInfo.skippingApplied;if(!groupMaxWidth){groupMaxWidth=Math.abs(xAxisFirstPos-xAxisZeroPos);dataSet.addToEnv("groupMaxWidth",groupMaxWidth)}!drawn&&dataSet.createContainer();dataSet.setContainerVisibility(true);if(skippingApplied){dataSet.hidePlots()}dataSet.drawPlots();dataSet.drawCommonElements&&!dataSet.config.skipCommonElements&&dataSet.drawCommonElements();conf.drawn?dataSet.drawLabel(scrollMinValForLabel,scrollMaxValForLabel):dataSet.addJob("labelDrawID",(function(){dataSet.drawLabel(scrollMinValForLabel,scrollMaxValForLabel)}),_schedular.priorityList.label);conf.drawn=true;dataSet.removePlots()};_proto.hide=function hide(){var dataSet=this,lineGroup=dataSet.getContainer("containerLine"),plotGroup=dataSet.getContainer("containerPlot"),legend=dataSet.getFromEnv("legend");if(legend&&legend.getItem(dataSet.config.legendItemId)){legend.getItem(dataSet.config.legendItemId).setLegendState("hidden")}lineGroup.hide();plotGroup.hide();dataSet.setState("dirty",true);dataSet.setState("visible",false)};_proto._addLegend=function _addLegend(){var dataset=this,chart=dataset.getFromEnv("chart"),chartAttr=chart.getFromEnv("dataSource").chart,legend=chart.getFromEnv("legend"),conf=dataset.config,legendItem,config,JSONData=dataset.config.JSONData,userGivenBorderColor=(0,_lib.pluck)(JSONData.anchorbordercolor,chartAttr.anchorbordercolor),seriesAnchorBorderColor=(0,_lib.getFirstColor)((0,_lib.pluck)(userGivenBorderColor,conf.plotBorderColor)),seriesAnchorBgColor=(0,_lib.getFirstColor)((0,_lib.pluck)(JSONData.anchorbgcolor,JSONData.color,chartAttr.anchorbgcolor,conf.plotColor)),seriesAnchorAlpha=(0,_lib.pluck)(JSONData.anchoralpha,JSONData.alpha,chartAttr.anchoralpha,_lib.HUNDREDSTRING),seriesAnchorBgAlpha=(0,_lib.pluck)(JSONData.anchorbgalpha,JSONData.alpha,chartAttr.anchorbgalpha,_lib.HUNDREDSTRING),fillColor=getFillColor(seriesAnchorBgColor,seriesAnchorAlpha*seriesAnchorBgAlpha/100),strokeColor=getFillColor(seriesAnchorBorderColor,seriesAnchorAlpha);config={enabled:conf.includeInLegend,type:dataset.type,anchorSide:2,label:(0,_lib.getFirstValue)(dataset.config.JSONData.seriesname),legendIconAlpha:(0,_lib.pluckNumber)(JSONData.legendiconalpha)};if(conf.includeinlegend){legendItem=legend.getItem(dataset.config.legendItemId);if(!legendItem){dataset.config.legendItemId=legend.createItem(dataset);legendItem=legend.getItem(dataset.config.legendItemId);dataset.addExtEventListener("fc-click",(function(){legendItem.itemClickFn()}),legendItem)}else{legendItem.configure({style:legend.config.itemStyle,hiddenStyle:legend.config.itemHiddenStyle,datasetVisible:legend.config.datasetVisible,hoverStyle:legend.config.itemHoverStyle})}legendItem.configure(config);legendItem.setStateCosmetics("default",{symbol:{fill:fillColor,bgAlpha:(0,_lib.pluckNumber)(JSONData.legendiconbgalpha,JSONData.legendiconalpha,chartAttr.legendiconbgalpha,chartAttr.legendiconalpha,seriesAnchorBgAlpha),borderAlpha:(0,_lib.pluckNumber)(JSONData.legendiconborderalpha,JSONData.legendiconalpha,chartAttr.legendiconborderalpha,chartAttr.legendiconalpha,"100"),stroke:strokeColor,rawFillColor:seriesAnchorBgColor,rawStrokeColor:conf.anchorbordercolor,"stroke-width":conf.anchorBorderThickness}});if(!dataset.getState("visible")){legendItem.setLegendState("hidden")}else{legendItem.removeLegendState("hidden")}}else if(dataset.config.legendItemId){legend.disposeItem(dataset.config.legendItemId)}};_proto._setConfigure=function _setConfigure(){var i,config,dataObj,setData,setValue,toolText,toolTipValue,macroIndices,parserConfig,formatedVal,formatedValX,setDisplayValue,infMin=-Infinity,infMax=+Infinity,yMax=infMin,yMin=infMax,xMin=infMax,xMax=infMin,dataset=this,dataStore=dataset.components.data||(dataset.components.data=[]),chart=dataset.getFromEnv("chart"),conf=dataset.config,JSONData=dataset.config.JSONData,chartAttr=chart.getFromEnv("dataSource").chart,setDataArr=JSONData.data||[],datasetLen=setDataArr.length,numberFormatter=dataset.getFromEnv("number-formatter"),yAxisName=(0,_lib.parseUnsafeString)(chartAttr.yaxisname),xAxisName=(0,_lib.parseUnsafeString)(chartAttr.xaxisname),lineDashed=conf.lineDashed,lineDashStyle=conf.lineDashStyle,regressionStatus=(0,_lib.pluckNumber)(JSONData.showregressionline,chart.config.showregressionline,0),regressionShowYonX=(0,_lib.pluckNumber)(JSONData.showyonx,chartAttr.showyonx,1),parentYAxis=conf.parentYAxis,tooltipSepChar=conf.toolTipSepChar,seriesname=conf.seriesname;for(i=0;i<datasetLen;i+=1){setData=setDataArr[i];dataObj=dataStore[i]||(dataStore[i]={});config=dataObj.config||(dataObj.config={});config.setValue=setValue={x:numberFormatter.getCleanValue(setData.x),y:numberFormatter.getCleanValue(setData.y),index:i};if(xMax<setValue.x){xMax=setValue.x;conf.rightMostData=dataObj}if(xMin>setValue.x){xMin=setValue.x;conf.leftMostData=dataObj}yMax=Math.max(yMax,setValue.y);yMin=Math.min(yMin,setValue.y);conf.showRegressionLine&&this.pointValueWatcher(setValue.x,setValue.y,conf.regressionObj);config.setLink=(0,_lib.pluck)(setData.link);config.anchorProps=this._parseAnchorProperties(i);config.showValue=(0,_lib.pluckNumber)(setData.showvalue,conf.showValues);config.dashed=(0,_lib.pluckNumber)(setData.dashed,lineDashed);config.color=(0,_lib.pluck)(setData.color,conf.lineColor);config.alpha=(0,_lib.pluck)(setData.alpha,conf.lineAlpha);config.dashStyle=config.dashed?lineDashStyle:"none";config.toolTipValue=toolTipValue=numberFormatter.dataLabels(setValue.y,parentYAxis);config.setDisplayValue=setDisplayValue=(0,_lib.parseUnsafeString)(setData.displayvalue);formatedVal=config.formatedVal=(0,_lib.pluck)(setData.toolTipValue,numberFormatter.dataLabels(setValue.y,parentYAxis));formatedValX=numberFormatter.xAxis(setValue.x);config.displayValue=(0,_lib.pluck)(setDisplayValue,toolTipValue);config.setTooltext=(0,_lib.getValidValue)((0,_lib.parseUnsafeString)((0,_lib.pluck)(setData.tooltext,conf.plotToolText),false));if(!conf.showTooltip){toolText=false}else if(config.setTooltext!==UNDEF){macroIndices=[4,5,6,7,8,9,10,11];parserConfig={yaxisName:yAxisName,xaxisName:xAxisName,yDataValue:formatedVal,xDataValue:formatedValX};toolText=(0,_lib.parseTooltext)(config.setTooltext,macroIndices,parserConfig,setData,chartAttr,JSONData)}else{if(formatedVal===null){toolText=false}else{toolText=seriesname?seriesname+tooltipSepChar:_lib.BLANKSTRING;toolText+=setValue.x?formatedValX+tooltipSepChar:_lib.BLANKSTRING;toolText+=toolTipValue}}config.toolText=toolText;if(!dataObj){dataObj=dataStore[i]={graphics:{}}}else if(!dataObj.graphics){dataStore[i].graphics={}}config.hoverEffects=this._parseHoverEffectOptions(dataObj);config.anchorProps.isAnchorHoverRadius=config.hoverEffects.anchorRadius}conf.xMax=xMax;conf.xMin=xMin;conf.yMin=yMin;conf.yMax=yMax;if(regressionStatus){conf.regressionPoints=(0,_linearRegression.default)(JSONData.data.slice(),regressionShowYonX)[1]}else{conf.regressionPoints=[]}dataset.ErrorValueConfigure&&dataset.ErrorValueConfigure()};return ZoomScatter}(_scatter.default);var _default=exports.default=ZoomScatter;