@fusioncharts/maps
Version:
FusionCharts JavaScript charting framework
1 lines • 39.1 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 _entities=_interopRequireDefault(require("../entities"));var _kdtree=_interopRequireDefault(require("@fusioncharts/charts/src/dataset/_internal/kdtree"));var _extAnnotation=_interopRequireDefault(require("@fusioncharts/features/src/annotation/ext-annotation"));var _dependencyManager=require("@fusioncharts/core/src/dependency-manager");var _mapEntities=_interopRequireDefault(require("../_internal/map-entities.animation"));var _lib=require("@fusioncharts/core/src/lib");var _eventApi=require("@fusioncharts/core/src/event-api");var _schedular=require("@fusioncharts/core/src/schedular");var UNDEF,BLANK="",POSITION_TOP="top",POSITION_BOTTOM="bottom",POSITION_RIGHT="right",POSITION_LEFT="left",POSITION_MIDDLE="middle",POSITION_CENTER="center",LINE_STR="line",TEXT_STR="text",POLYGON_STR="polygon",ACR_STR="arc",CIRCLE_STR="circle",CENTER_STR="center",INNERRADIUSFACTOR=.6,math=window.Math,mathMin=math.min,mathMax=math.max,MARKER_ITEM_KEY="items",hoverFn=function hoverFn(marker){var dataset=this,chart=dataset.getFromEnv("chart"),annotations=dataset.getChildren("mapAnnotations")[0],shape=marker.markerShape,groupConfig=shape.groupConfig,options=shape.data("unfilteredConfig"),eventArgs=options._markerEventArgs,attrs,markerConfig=marker.config;if(options.hovereffect){if(shape.config.type==="circle"){attrs=(0,_lib.extend2)({fillcolor:options.hoverfillcolor,fillalpha:options.hoverfillalpha,fillangle:options.hoverfillangle,fillratio:options.hoverfillratio,gradientUnits:"objectBoundingBox",radialGradient:1},options._hoverattrs)}attrs=(0,_lib.extend2)({},options._hoverattrs);annotations.update(shape.getId(),attrs)}if(!eventArgs){eventArgs=options._markerEventArgs={x:+options.x,y:+options.y,scaledX:options.x*groupConfig.scaleX,scaledY:options.y*groupConfig.scaleY,chartX:options.x*groupConfig.scaleX+groupConfig.grpXShift,chartY:options.y*groupConfig.scaleY+groupConfig.grpYShift,id:options.id,label:options.label}}(0,_eventApi.raiseEventGroup)(markerConfig.options.id,"markerRollOver",eventArgs,chart.getFromEnv("chartInstance"),markerConfig,UNDEF,UNDEF,UNDEF)},hoverOutFn=function hoverOutFn(marker){var dataset=this,chart=dataset.getFromEnv("chart"),annotations=dataset.getChildren("mapAnnotations")[0],shape=marker.markerShape,wrapper=shape.getElement(),markerConfig=marker.config,options=shape.data("unfilteredConfig"),attrs;if(wrapper&&options.hovereffect){if(shape.config.type==="circle"){attrs=(0,_lib.extend2)({fillcolor:shape.config.rawColor,fillalpha:shape.config.rawAlpha,fillangle:shape.config.rawAngle,fillratio:shape.config.rawRatio,gradientUnits:"objectBoundingBox",radialGradient:shape.config.rawFillPattern==="radial"},options._defaultattrs)}attrs=(0,_lib.extend2)({},options._defaultattrs);annotations.update(shape.getId(),attrs)}(0,_eventApi.raiseEventGroup)(markerConfig.id,"markerRollOut",options._markerEventArgs,chart.getFromEnv("chartInstance"),UNDEF,UNDEF,UNDEF)},clickFn=function clickFn(e,marker){var dataset=this,markerOptions=marker.config.options,chart=dataset.getFromEnv("chart"),shape=marker.markerShape,options=shape.config,groupConfig=shape.groupConfig,linkClickFN=dataset.getFromEnv("linkClickFN"),link=shape.config.link,eventArgs=options._markerEventArgs;link&&linkClickFN&&linkClickFN.call({link:link},true);if(!eventArgs){eventArgs=options._markerEventArgs={x:+options.x,y:+options.y,scaledX:options.x*groupConfig.scaleX,scaledY:options.y*groupConfig.scaleY,chartX:options.x*groupConfig.scaleX+groupConfig.grpXShift,chartY:options.y*groupConfig.scaleY+groupConfig.grpYShift,id:markerOptions.id,label:markerOptions.label}}chart.fireChartInstanceEvent("markerClick",eventArgs,e)},convertToObj=function convertToObj(arr,idKey){var i=arr&&arr.length||false,key=idKey||"id",returnObj={},item;if(!arr){return arr}while(i--){item=arr[i];item[key]!==UNDEF&&(returnObj[item[key].toLowerCase()]=item)}return returnObj},topLabelAlignmentFn=function topLabelAlignmentFn(x,y,radius){return{x:x.toString(),y:(y-radius).toString(),align:POSITION_CENTER,valign:POSITION_TOP}},leftLabelAlignmentFn=function leftLabelAlignmentFn(x,y,radius){return{x:(x-radius).toString(),y:y.toString(),align:POSITION_RIGHT,valign:POSITION_MIDDLE}},rightLabelAlignmentFn=function rightLabelAlignmentFn(x,y,radius){return{x:(x+radius).toString(),y:y.toString(),align:POSITION_LEFT,valign:POSITION_MIDDLE}},bottomLabelAlignmentFn=function bottomLabelAlignmentFn(x,y,radius){return{x:x.toString(),y:(y+radius).toString(),align:POSITION_CENTER,valign:POSITION_BOTTOM}},centerLabelAlignmentFn=function centerLabelAlignmentFn(x,y){return{x:x.toString(),y:y.toString(),align:POSITION_CENTER,valign:POSITION_MIDDLE}},rightWrapWidthFn=function rightWrapWidthFn(){return arguments[1]},leftWrapWidthFn=function leftWrapWidthFn(width,x){return width-x},centerWrapWidthFn=function centerWrapWidthFn(width,x){return mathMin(x,width-x)*2},topWrapHeightFn=function topWrapHeightFn(){return arguments[1]},middleWrapHeightFn=function middleWrapHeightFn(height,y){return mathMin(y,height-y)*2},bottomWrapHeightFn=function bottomWrapHeightFn(height,y){return height-y};(0,_dependencyManager.addDep)({name:"mapsAnimation",type:"animationRule",extension:_mapEntities.default});var Markers=function(_Entities){function Markers(){var _this;_this=_Entities.call(this)||this;_this.components={};_this.getLabelAlignment={top:topLabelAlignmentFn,left:leftLabelAlignmentFn,right:rightLabelAlignmentFn,bottom:bottomLabelAlignmentFn,center:centerLabelAlignmentFn};_this.getWrapWidth={right:rightWrapWidthFn,left:leftWrapWidthFn,center:centerWrapWidthFn};_this.getWrapHeight={top:topWrapHeightFn,middle:middleWrapHeightFn,bottom:bottomWrapHeightFn};_this.hoverFn=hoverFn;_this.hoverOutFn=hoverOutFn;_this.clickFn=clickFn;return _this}(0,_inheritsLoose2.default)(Markers,_Entities);var _proto=Markers.prototype;_proto.getName=function getName(){return"markers"};_proto.getType=function getType(){return"dataset"};_proto.configureAttributes=function configureAttributes(markerJSONData){if(!markerJSONData){return}this.JSONData=markerJSONData;var dataset=this,annObj,mapAnnotations=dataset.getChildren("mapAnnotations")&&dataset.getChildren("mapAnnotations")[0],chart=dataset.getFromEnv("chart"),markerOptions=chart.config.markerOpts;if(!mapAnnotations){annObj=new _extAnnotation.default;dataset.attachChild(annObj,"mapAnnotations");mapAnnotations=dataset.getChildren("mapAnnotations")[0]}mapAnnotations.destroy();dataset.calculateDataLimits();if(markerOptions.dataEnabled){this._parseMarkers()}else{this.defineMarkersNShapes()}this.configureConnectors()};_proto.calculateMarkerRadiusLimits=function calculateMarkerRadiusLimits(){if(!this.JSONData){return}var dataset=this,JSONData=dataset.JSONData,conf=dataset.config,chart=dataset.getFromEnv("chart"),width=chart.config.width,height=chart.config.height,markerMaxRadius=JSONData.markermaxradius,markerMinRadius=JSONData.markerminradius,minMax=Markers.getMarkerRadiusLimits(width,height,markerMaxRadius,markerMinRadius);conf.minRadius=minMax.min;conf.maxRadius=minMax.max};_proto.calculateDataLimits=function calculateDataLimits(){var dataset=this,chart=dataset.getFromEnv("chart"),conf=dataset.config,jsonData=chart.jsonData,markers=jsonData.markers||{},markerData=markers[MARKER_ITEM_KEY]||[],numberFormatter=this.getFromEnv("number-formatter"),min=+Infinity,max=-Infinity,markerObj,cleanValue,len,value,i;for(i=0,len=markerData.length;i<len;i++){markerObj=markerData[i];value=markerObj.value;cleanValue=numberFormatter.getCleanValue(value);if(cleanValue!==null){min=mathMin(cleanValue,min);max=mathMax(cleanValue,max)}}conf.min=min;conf.max=max};_proto._parseMarkers=function _parseMarkers(){var dataset=this,chart=dataset.getFromEnv("chart"),jsonData=chart.jsonData,markers=jsonData.markers,markerData=markers[MARKER_ITEM_KEY],shapeArr=markers.shapes,markerOptions=chart.config.markerOpts,markerStyle=markerOptions.dataLabels.style,numberFormatter=this.getFromEnv("number-formatter"),shapeObjs=dataset.components.shapeObjs={},markerObjs=dataset.components.markerObjs={},value,i,markerObj,item,shapeId,markerConfig,options,id;if(!markerData||!markerData.length){return}if(shapeArr&&shapeArr.length){i=shapeArr.length;for(;i;i-=1){item=shapeArr[i-1];if(id=item.id.toLowerCase()){shapeObjs[id]=item}}}i=markerData.length;while(i--){item=markerData[i];if(id=item.id&&item.id.toLowerCase()){value=item.value;if(value!==UNDEF&&value!==""){value=parseFloat(value)}markerObj=Markers._initializeMarkerItem(id,item,null,chart);shapeId=markerObj.config.options.shapeid;shapeId&&typeof shapeId==="string"&&(shapeId=shapeId.toLowerCase());markerConfig=markerObj.config;options=markerConfig.options;markerConfig.cleanValue=numberFormatter.getCleanValue(value);if(markerConfig.cleanValue!==null){markerConfig.formattedValue=numberFormatter.dataLabels(value)}else{markerConfig.formattedValue=UNDEF}markerConfig.fillColor=(0,_lib.pluck)(options.fillcolor,options.color,markerOptions.fillColor);markerConfig.fillAlpha=(0,_lib.pluck)(options.fillalpha,options.alpha,markerOptions.fillAlpha);markerConfig.fillRatio=(0,_lib.pluck)(options.fillratio,markerOptions.fillRatio);markerConfig.fillAngle=(0,_lib.pluck)(options.fillangle,markerOptions.fillAngle);markerConfig.borderThickness=(0,_lib.pluckNumber)(options.borderthickness,markerOptions.borderThickness);markerConfig.borderColor=(0,_lib.pluck)(options.bordercolor,markerOptions.borderColor);markerConfig.borderAlpha=(0,_lib.pluck)(options.borderalpha,markerOptions.borderAlpha);markerConfig.labelPadding=options.labelpadding||markerOptions.labelPadding;markerConfig.fontColor=(0,_lib.pluck)(options.labelcolor,markerStyle.fontColor);markerConfig.labelBgColor=(0,_lib.pluck)(options.labelbgcolor,markerStyle.labelBgColor)||BLANK;markerConfig.labelBorderColor=(0,_lib.pluck)(options.labelbordercolor,markerStyle.labelBorderColor)||BLANK;if(item.__hideMarker){markerObj._isHidden=true}if(shapeId){markerObj.shapeObj=shapeObjs[shapeId]}markerObjs[id]=markerObj}}};_proto.defineMarkersNShapes=function defineMarkersNShapes(){var dataset=this,chart=dataset.getFromEnv("chart"),jsonData=chart.jsonData,markers=jsonData.markers,defineArr=markers.definition,numberFormatter=this.getFromEnv("number-formatter"),markerOptions=chart.config.markerOpts,markerStyle=markerOptions.dataLabels.style,defineObject=convertToObj(defineArr)||{},applyObject=convertToObj(markers.application)||{},shapeArr=markers.shapes,shapeObjs=dataset.components.shapeObjs=dataset.components.shapeObjs||(dataset.components.shapeObjs={}),markerObjs=dataset.components.markerObjs=dataset.components.markerObjs||(dataset.components.markerObjs={}),shapeObjHash={},markerObjHash={},options,markerConfig,value,i,markerObj,item,shapeId,id;if(!defineArr||!defineArr.length){return}for(i in shapeObjs){shapeObjHash[i]=false}for(i in markerObjs){markerObjHash[i]=false}if(shapeArr&&shapeArr.length){i=shapeArr.length;for(;i;i-=1){item=shapeArr[i-1];if(id=item.id.toLowerCase()){shapeObjs[id]=item;shapeObjHash[id]=true}}}for(id in defineObject){item=defineObject[id];markerObj=markerObjs[id]=Markers._initializeMarkerItem(id,item,applyObject[id],chart);markerObjHash[id]=true;shapeId=markerObj.config.options.shapeid;markerConfig=markerObj.config;value=item.value;markerConfig.cleanValue=numberFormatter.getCleanValue(value);options=markerConfig.options;if(markerConfig.cleanValue!==null){markerConfig.formattedValue=numberFormatter.dataLabels(value)}else{markerConfig.formattedValue=UNDEF}markerConfig.fillColor=(0,_lib.pluck)(options.fillcolor,options.color,markerOptions.fillColor);markerConfig.fontColor=(0,_lib.pluck)(options.labelcolor,markerStyle.fontColor);markerConfig.fillAlpha=(0,_lib.pluck)(options.fillalpha,options.alpha,markerOptions.fillAlpha);markerConfig.fillRatio=(0,_lib.pluck)(options.fillratio,markerOptions.fillRatio);markerConfig.fillAngle=(0,_lib.pluck)(options.fillangle,markerOptions.fillAngle);markerConfig.borderThickness=(0,_lib.pluckNumber)(options.borderthickness,markerOptions.borderThickness);markerConfig.borderColor=(0,_lib.pluck)(options.bordercolor,markerOptions.borderColor);markerConfig.borderAlpha=(0,_lib.pluck)(options.borderalpha,markerOptions.borderAlpha);markerConfig.labelPadding=options.labelpadding||markerOptions.labelPadding;markerConfig.options.tooltext=(0,_lib.pluck)(options.tooltext,markerOptions.tooltext);markerConfig.link=options.link;if(shapeId){markerObj.shapeObj=shapeObjs[shapeId.toLowerCase()]}}for(i in shapeObjHash){if(!shapeObjHash[i]){delete shapeObjs[i]}}for(i in markerObjs){if(!markerObjHash[i]){delete markerObjs[i]}}};Markers.getMarkerRadiusLimits=function getMarkerRadiusLimits(width,height,userMax,userMin){var dime=mathMin(width,height),factor=.02,times=3.5,minR=factor*dime,maxR=factor*times*dime,finalUserMin,finalUserMax;finalUserMin=parseFloat(userMin);finalUserMax=parseFloat(userMax);if(!isNaN(finalUserMin)&&!isNaN(finalUserMax)){if(finalUserMin<finalUserMax){return{min:finalUserMin,max:finalUserMax}}return{min:finalUserMax,max:finalUserMin}}else if(!isNaN(finalUserMin)){return{min:finalUserMin,max:10*finalUserMin}}else if(!isNaN(finalUserMax)){return{min:parseInt(finalUserMax/10,10),max:finalUserMax}}return{min:minR,max:maxR}};_proto.getDataLimits=function getDataLimits(){var dataset=this,conf=dataset.config;return{min:conf.min,max:conf.max}};Markers._initializeMarkerItem=function _initializeMarkerItem(id,markerDefinition,markerApplication){var markerObj={},config=markerObj.config,opts;if(!config){config=markerObj.config={}}config.id=id;config.definition=markerDefinition;config.application=markerApplication;config.hasValue=null;config.value=null;config.options=null;config.label=null;config.markerShape=null;config.markerLabel=null;config.drawOptions={shape:null,label:null};config.drawComplete=false;opts=markerObj.config.options=(0,_lib.extend2)({},config.definition);if(config.dataEnabled){if(!isNaN(opts.value)&&opts.value!==""){markerObj.value=parseFloat(opts.value);markerObj.hasValue=true}}else if(config.applyAll){config.options=(0,_lib.extend2)(opts,config.application)}else if(markerApplication){config.options=(0,_lib.extend2)(opts,config.application)}return markerObj};_proto.configureConnectors=function configureConnectors(){var dataset=this,chart=dataset.getFromEnv("chart"),annotations=dataset.getChildren("mapAnnotations")[0],jsonData=chart.jsonData,datasetComponents=dataset.components,markers=jsonData.markers||{},connectors=markers.connector||markers.connectors||[],markerObjs=datasetComponents.markerObjs,length=connectors.length,connectorComponents=dataset.components.connectors,getMouseOverFn=function getMouseOverFn(eventArgs){return function(e){var shape=this,unfilteredConfig=shape.data("unfilteredConfig");if(unfilteredConfig.hoverEffect){annotations.update(shape.getId(),unfilteredConfig._hoverAttrs)}chart.fireChartInstanceEvent("connectorrollover",eventArgs,e)}},getMouseOutFn=function getMouseOutFn(eventArgs){return function(e){var shape=this,unfilteredConfig=shape.data("unfilteredConfig");if(unfilteredConfig.hoverEffect){annotations.update(shape.getId(),unfilteredConfig._defaultAttrs)}chart.fireChartInstanceEvent("connectorrollout",eventArgs,e)}},getClickFn=function getClickFn(eventArgs){return function(e){chart.fireChartInstanceEvent("connectorClick",eventArgs,e)}},chartConnOptions=chart.config.connectorOpts,connectorItem={},config,options,fromMarker,toMarker,label,toolText,thickness,color,alpha,hovercolor,hoveralpha,hoverthickness,connLabelConfig,obj,i;connectorComponents=dataset.components.connectors=[];for(i=0;i<length;i++){obj=connectors[i];if(!obj.from&&!obj.to){continue}fromMarker=markerObjs[obj.from.toLowerCase()];toMarker=markerObjs[obj.to.toLowerCase()];if(!fromMarker||!toMarker){continue}label=connectors[i].label;connectorItem=connectorComponents[i];!connectorItem&&(connectorItem=connectorComponents[i]={});!connectorItem.config&&(config=connectorItem.config={});!connectorItem.graphics&&(connectorItem.graphics={});config=connectorItem.config=(0,_lib.extend2)({},obj);config.fromMarker=fromMarker;config.toMarker=toMarker;config.link=obj.link;config.showTooltip=(0,_lib.pluckNumber)(obj.showtooltip,chartConnOptions.showTooltip);toolText=config.tooltext=config.showTooltip?(0,_lib.pluck)(obj.tooltext,chartConnOptions.tooltext):BLANK;thickness=config.thickness=(0,_lib.pluck)(obj.thickness,chartConnOptions.thickness);color=config.color=(0,_lib.pluck)(obj.color,chartConnOptions.color);alpha=config.alpha=(0,_lib.pluck)(obj.alpha,chartConnOptions.alpha);config.hoverEffect=(0,_lib.pluckNumber)(obj.showhovereffect,chartConnOptions.showHoverEffect);hovercolor=(0,_lib.pluck)(obj.hovercolor,chartConnOptions.hoverColor,color);hoveralpha=(0,_lib.pluck)(obj.hoveralpha,chartConnOptions.hoverAlpha,alpha);hoverthickness=(0,_lib.pluck)(obj.hoverthickness,chartConnOptions.hoverThickness,thickness);config.dashed=(0,_lib.pluck)(obj.dashed,chartConnOptions.dashed);config.dashLen=(0,_lib.pluckNumber)(obj.dashlen,chartConnOptions.dashlen);config.dashGap=(0,_lib.pluckNumber)(obj.dashgap,chartConnOptions.dashgap);if(toolText){config.tooltext=toolText=(0,_lib.parseUnsafeString)((0,_lib.parseTooltext)(toolText,[3,40,41,42,43],{label:label,fromId:fromMarker.config.definition.id,toId:toMarker.config.definition.id,fromLabel:fromMarker.config.definition.label,toLabel:toMarker.config.definition.label},options),false)}config.eventArgs={fromMarkerId:fromMarker.config.id,toMarkerId:toMarker.config.id,label:label};config._hoverAttrs={color:hovercolor,alpha:hoveralpha,thickness:hoverthickness};config._defaultAttrs={color:color,alpha:alpha,thickness:thickness};config.type=LINE_STR;config.onclick=getClickFn(config.eventArgs);config.onmouseover=getMouseOverFn(config.eventArgs);config.onmouseout=getMouseOutFn(config.eventArgs);if(label){connLabelConfig=connectorItem.labelConfig;!connLabelConfig&&(connLabelConfig=connectorItem.labelConfig={});connLabelConfig.type=TEXT_STR;connLabelConfig.text=label;connLabelConfig.align=POSITION_CENTER;connLabelConfig.valign=POSITION_MIDDLE;connLabelConfig.font=chartConnOptions.font;connLabelConfig.fillcolor=(0,_lib.pluck)(obj.labelcolor,chartConnOptions.fontColor);connLabelConfig.bgcolor=(0,_lib.pluck)(obj.labelbgcolor,chartConnOptions.labelBgColor);connLabelConfig.bordercolor=(0,_lib.pluck)(obj.labelbordercolor,chartConnOptions.labelBorderColor);connLabelConfig.tooltext=config.tooltext}}};_proto.draw=function draw(){var dataset=this,chart=dataset.getFromEnv("chart"),conf=dataset.config,annotations=dataset.getChildren("mapAnnotations")[0],markers=dataset.components.markerObjs,chartConf=chart.config,chartMarkerOpts=chartConf.markerOpts,scalingParams=chartConf.scalingParams,annConfig=chart.config.annotationConfig,markerItems=[],markerLabels=[],appliedMarkers={},appliedObj,markerItem,rawConfig,config,id,i,markerLabelGroup,markerGroup,validShape={};annotations.destroy();dataset.createContainer();dataset._drawConnectors();dataset.imageLoadCount=0;dataset.imageCount=0;conf.autoScale=chartMarkerOpts.autoScale?scalingParams.sFactor:1;for(id in markers){appliedObj=null;markerItem=markers[id];config=markerItem.config;if(!config.conIsHidden){appliedObj=this._drawMarkerItem(markerItem)}if(!appliedObj){continue}validShape[id]=appliedObj;config._annotationIndex=markerItems.length;appliedMarkers[id]=markerItem;if(appliedObj.markerShape){rawConfig=Object.assign({align:"center",valign:"middle",animationLabel:"markerItem",autoscale:appliedObj.markerShape.type==="image"?0:1},appliedObj.markerShape);markerItems.push(rawConfig)}if(appliedObj.markerLabel){rawConfig=Object.assign({animationLabel:"markerItem",id:appliedObj.markerShape.id},appliedObj.markerLabel);markerLabels.push(rawConfig)}}markerGroup=annotations.addGroup(Object.assign(annConfig,{id:"markers",fillalpha:"100",items:markerItems,scaleimages:1}),dataset);markerLabelGroup=annotations.addGroup(Object.assign(annConfig,{id:"markerLabels",items:markerLabels,scaleimages:1}),dataset);dataset.components.markerGroup=markerGroup;dataset.components.markerLabelGroup=markerLabelGroup;i=0;for(id in markers){if(!validShape[id]){continue}markerItem=markers[id];markerItem.markerShape=markerGroup.retrieveItem(markerItems[i].id);markerItem.markerShape.data("unfilteredConfig",markerItems[i]);if(validShape[id].markerLabel){markerItem.markerLabel=markerLabelGroup.retrieveItem(markerItems[i].id);markerItem.markerLabel.data("unfilteredConfig",markerLabels[i])}i++}dataset.addJob("buildKdtree",dataset._buildKdTree.bind(dataset),_schedular.priorityList.kdTree)};_proto._buildKdTree=function _buildKdTree(){var dataset=this,kdArrayMap=dataset.components.kdArrayMap,markerGroup=dataset.components.markerGroup,kdPointsArr=[],id,i,items=markerGroup&&markerGroup.items,len=items&&items.length||0;for(i=0;i<len;i++){id=items[i].config.id;kdArrayMap[id]&&kdPointsArr.push(kdArrayMap[id])}if(!dataset.components.kDTree){dataset.components.kDTree=new _kdtree.default(true)}dataset.components.kDTree._setSearchLimit(Infinity,Infinity);dataset.components.kDTree.buildKdTree(kdPointsArr)};_proto._drawMarkerItem=function _drawMarkerItem(marker){var dataset=this,chart=dataset.getFromEnv("chart"),conf=chart.config,datasetConfig=dataset.config,scalingParams=conf.scalingParams,markerConfig=marker.config,options=markerConfig.options,definition=markerConfig.definition,chartMarkerOpts=conf.markerOpts,markerStyle=chartMarkerOpts.dataLabels.style,shapeId=options.shapeid,itemScale=options.scale||1,label=options.label||BLANK,scaleFactor=chart.config.scalingParams.scaleFactor*chart.config.baseScaleFactor,labelPos=(options.labelpos||POSITION_TOP).toLowerCase(),value=markerConfig.formattedValue===UNDEF?UNDEF:markerConfig.formattedValue,tooltext=options.tooltext||chartMarkerOpts.tooltext,radius=(0,_lib.pluckNumber)(definition.radius,markerConfig.radius,chartMarkerOpts.radius)*itemScale*datasetConfig.autoScale||1e-4,fillColor=markerConfig.fillColor,fillAlpha=markerConfig.fillAlpha,fillRatio=markerConfig.fillRatio,fillAngle=markerConfig.fillAngle,borderThickness=markerConfig.borderThickness,borderColor=markerConfig.borderColor,borderAlpha=markerConfig.borderAlpha,annotations=dataset.getChildren("mapAnnotations")[0],labelObj,align,valign,baseWidth,baseHeight,xOffset,yOffset,wrapWidth,wrapHeight,labelPadding,shapeObj,temp,calcX,calcY,kdPoint,innerradius,sides,type,kdArrayMap=dataset.components.kdArrayMap||(dataset.components.kdArrayMap={}),markerId=marker.config.id;markerConfig.autoScale=chartMarkerOpts.autoScale?scaleFactor:1;if(!shapeId){return}if(tooltext){tooltext=(0,_lib.parseUnsafeString)((0,_lib.parseTooltext)(tooltext,[1,2,3],{formattedValue:value,label:label},options),false)}else{tooltext=value?label+chartMarkerOpts.tooltipSepChar+value:label}if(value!==UNDEF&&value!==null){label=label+chartMarkerOpts.labelSepChar+value}else{if(!isNaN(itemScale)){if(itemScale<0){itemScale=0}else if(itemScale>5){itemScale=5}}else{itemScale=1}}(0,_lib.extend2)(options,{x:options.x&&options.x.toString(),y:options.y&&options.y.toString(),fillcolor:fillColor,fillalpha:fillAlpha,fillratio:fillRatio,fillangle:fillAngle,borderthickness:borderThickness,bordercolor:borderColor,borderalpha:borderAlpha,hovereffect:(0,_lib.pluck)(chartMarkerOpts.showHoverEffect),radius:radius&&radius.toString(),link:options.link,showshadow:(0,_lib.pluckNumber)(options.showshadow,markerConfig.shadow),_markerLabel:label,_markerId:options.id,id:(options.id+BLANK).toLowerCase()});delete options.tooltext;markerConfig.tooltext=chartMarkerOpts.showTooltip?tooltext:false;calcX=Number(options.x)*scalingParams.sFactor+scalingParams.translateX;calcY=Number(options.y)*scalingParams.sFactor+scalingParams.translateY;radius=options.radius;if(shapeId==="triangle"){(0,_lib.extend2)(options,{type:"polygon",sides:3,startangle:chartMarkerOpts.startAngle});type=POLYGON_STR;sides=3}else if(shapeId==="diamond"){(0,_lib.extend2)(options,{type:"polygon",sides:4,startangle:chartMarkerOpts.startAngle});type=POLYGON_STR;sides=4}else if(shapeId==="arc"){innerradius=radius*INNERRADIUSFACTOR;(0,_lib.extend2)(options,{type:"arc",startangle:0,endangle:360,innerradius:innerradius});type=ACR_STR}else if(shapeId==="circle"){options.type=CIRCLE_STR;type=CIRCLE_STR}else{shapeObj=dataset.getShapeArgs.call(marker);if(!chartMarkerOpts.dataEnabled||!chartMarkerOpts.valueToRadius||options.radius===UNDEF){!shapeObj.radius&&(shapeObj.radius=chartMarkerOpts.radius);shapeObj.radius*=itemScale*markerConfig.autoScale}else{delete shapeObj.radius}(0,_lib.extend2)(options,shapeObj);options.id=options._markerId&&options._markerId.toLowerCase();innerradius=shapeObj.innerradius;shapeObj.radius&&(radius=shapeObj.radius);type=shapeObj.type&&shapeObj.type.toLowerCase();sides=shapeObj.sides;radius=Number(radius);if(radius&&innerradius&&radius<innerradius){temp=radius;options.radius=radius=innerradius;options.innerradius=innerradius=temp}}options.type=options.type&&options.type.toLowerCase();(0,_lib.extend2)(options,{hoverfillcolor:(0,_lib.pluck)(options.fillhovercolor,chartMarkerOpts.hoverFillColor,options.fillcolor),hoverfillalpha:(0,_lib.pluck)(options.fillhoveralpha,chartMarkerOpts.hoverFillAlpha,options.fillalpha),hoverfillratio:(0,_lib.pluck)(options.fillhoverratio,chartMarkerOpts.hoverFillRatio,options.fillratio),hoverfillangle:(0,_lib.pluck)(options.fillhoverangle,chartMarkerOpts.hoverFillAngle,options.fillangle),hoverborderthickness:(0,_lib.pluckNumber)(options.borderhoverthickness,chartMarkerOpts.hoverBorderThickness,options.borderthickness),hoverbordercolor:(0,_lib.pluck)(options.borderhovercolor,chartMarkerOpts.hoverBorderColor,options.bordercolor),hoverborderalpha:(0,_lib.pluck)(options.borderhoveralpha,chartMarkerOpts.hoverBorderAlpha,options.borderalpha)});options._hoverattrs={fillalpha:options.hoverfillalpha,fillcolor:options.hoverfillcolor,fillangle:options.hoverfillangle,fillratio:options.hoverfillratio,borderThickness:options.showborder!=="0"?options.hoverborderthickness:0,borderColor:options.hoverbordercolor,borderAlpha:options.hoverborderalpha};options._defaultattrs={fillalpha:options.fillalpha,fillcolor:options.fillcolor,fillangle:options.fillangle,fillratio:options.fillratio,borderThickness:options.showborder!=="0"?options.borderthickness:0,borderColor:options.bordercolor,borderAlpha:options.borderalpha};if(options.type==="image"){options.borderthickness=options.borderthickness||0;options.onload=function(imageattr){var shape=this,width=imageattr.width,height=imageattr.height;kdPoint={};options=shape.config;calcX=(Number(options.derivedX)-width/(2*scalingParams.sFactor))*scalingParams.sFactor;calcY=(Number(options.derivedY)-height/(2*scalingParams.sFactor))*scalingParams.sFactor;kdPoint=kdArrayMap[markerId]||(kdArrayMap[markerId]={});kdPoint.x=calcX+scalingParams.translateX;kdPoint.y=calcY+scalingParams.translateY;kdPoint.element=marker;kdPoint.shapeInfo={type:"rect",width:width,height:height};if(width&&height){annotations.update(shape.getId(),{x:calcX,y:calcY,width:width,height:height,autoscale:0})}dataset.imageLoadCount++;if(dataset.imageLoadCount===dataset.imageCount){dataset._buildKdTree()}};options.onerror=function(){dataset.imageLoadCount++;if(dataset.imageLoadCount===dataset.imageCount){dataset._buildKdTree()}};dataset.imageCount++}else{kdPoint=kdArrayMap[markerId]||(kdArrayMap[markerId]={});kdPoint.x=calcX;kdPoint.y=calcY;kdPoint.element=marker;kdPoint.shapeInfo={type:type,sides:sides,radius:Number(radius)+options.borderthickness/2,innerradius:innerradius}}markerConfig.drawOptions.shape=options;if(!chartMarkerOpts.showLabels){return{markerShape:options}}labelPadding=options.labelpadding||chartMarkerOpts.labelPadding;labelObj=dataset._getLabelOptions(labelPos,labelPadding,options);align=labelObj.align;valign=labelObj.valign;baseWidth=markerConfig._labelBaseWidth;baseHeight=markerConfig._labelBaseHeight;xOffset=markerConfig._labelXOffset;yOffset=markerConfig._labelYOffset;wrapWidth=chartMarkerOpts.labelWrapWidth?chartMarkerOpts.labelWrapWidth:dataset.getWrapWidth[align](baseWidth,Number(labelObj.x)+xOffset);wrapHeight=chartMarkerOpts.labelWrapHeight?chartMarkerOpts.labelWrapHeight:dataset.getWrapHeight[valign](baseHeight,Number(labelObj.y)+yOffset);if(wrapWidth>labelPadding){wrapWidth-=labelPadding}if(wrapHeight>labelPadding){wrapHeight-=labelPadding}markerConfig.drawOptions.label=(0,_lib.extend2)({type:"text"},{text:label,tooltext:options.tooltext,x:labelObj.x,y:labelObj.y,align:align,valign:labelObj.valign,wrap:1,wrapwidth:wrapWidth,wrapheight:wrapHeight,fontsize:markerStyle.fontSize/scalingParams.sFactor,font:markerStyle.fontFamily,color:markerConfig.fontColor,bgcolor:markerConfig.labelBgColor||BLANK,bordercolor:markerConfig.labelBorderColor||BLANK});return{markerShape:options,markerLabel:markerConfig.drawOptions.label}};_proto.highlightPoint=function highlightPoint(kdPoint,e){var marker=kdPoint.element,dataset=this,originalEvent=e.originalEvent,chart=dataset.getFromEnv("chart"),toolTipController=dataset.getFromEnv("toolTipController"),currentToolTip=dataset.config.currentToolTip,lastHoveredPoint=chart.config.lastHoveredPoint;if(lastHoveredPoint&&lastHoveredPoint!==kdPoint){lastHoveredPoint&&dataset.hoverOutFn(lastHoveredPoint.element);chart.config.lastHoveredPoint=null;toolTipController.hide(currentToolTip)}if(kdPoint===false){return}if(e.type==="click"||e.type==="touchstart"){if(chart.config.lastHoveredPoint!==kdPoint){dataset.hoverFn(marker)}dataset.clickFn(e,marker)}else if(e.type==="mousemove"){if(chart.config.lastHoveredPoint!==kdPoint){dataset.hoverFn(marker)}}if(marker.config.tooltext){if(currentToolTip){toolTipController.draw(originalEvent,marker.config.tooltext,currentToolTip)}else{currentToolTip=dataset.config.currentToolTip=toolTipController.draw(originalEvent,marker.config.tooltext)}}chart.config.lastHoveredPoint=kdPoint};_proto._drawConnectors=function _drawConnectors(){var dataset=this,chart=dataset.getFromEnv("chart"),annConfig=chart.config.annotationConfig,datasetComponents=dataset.components,connectors=datasetComponents.connectors||(dataset.components.connectors=[]),connector,connectorLabel,length=connectors.length,scalingParams=chart.config.scalingParams,chartConnOptions=chart.config.connectorOpts,showConnectorLabels=chartConnOptions.showLabels,annotations=dataset.getChildren("mapAnnotations")[0],i,j,connectorOptions=[],connectorLabelItems=[],x,y,toX,toY,fromMarkerConfig,toMarkerConfig,connectorGroup,connectorLabelGroup,rawConfig,groups=[],validConnector={};groups.push({id:"connectorLabels",fillalpha:"100",items:connectorLabelItems});groups.push({id:"connectors",fillalpha:"100",items:connectorOptions});for(i=0;i<length;i++){if(!connectors[i]){continue}validConnector[i]=true;fromMarkerConfig=connectors[i].config.fromMarker.config;toMarkerConfig=connectors[i].config.toMarker.config;x=fromMarkerConfig.options.x;y=fromMarkerConfig.options.y;toX=toMarkerConfig.options.x;toY=toMarkerConfig.options.y;connectors[i].config.x=x;connectors[i].config.y=y;connectors[i].config.tox=toX;connectors[i].config.toy=toY;rawConfig=Object.assign({animationLabel:"markerItem"},connectors[i].config);connectorOptions.push(rawConfig);if(connectors[i].labelConfig&&showConnectorLabels){connectors[i].labelConfig.x=((Number(x)+Number(toX))/2).toString();connectors[i].labelConfig.y=((Number(y)+Number(toY))/2).toString();connectors[i].labelConfig.fontsize=chartConnOptions.fontSize/(scalingParams.scaleFactor*chart.config.baseScaleFactor);rawConfig=Object.assign({animationLabel:"markerItem"},connectors[i].labelConfig);connectorLabelItems.push(rawConfig)}}connectorGroup=annotations.addGroup(Object.assign(annConfig,groups[1]),dataset);connectorLabelGroup=annotations.addGroup(Object.assign(annConfig,groups[0]),dataset);for(i=0,j=0;i<length;i++){if(!validConnector[i]){continue}connector=connectorGroup.items[j];if(connector){connector.data("unfilteredConfig",connectorOptions[j]);connector.addEventListener("fc-mouseover",connectors[i].config.onmouseover);connector.addEventListener("fc-mouseout",connectors[i].config.onmouseout);connector.addEventListener("fc-click",connectors[i].config.onclick)}if(connectors[i].labelConfig&&showConnectorLabels){connectorLabel=connectorLabelGroup.items[j];connectorLabel&&connectorLabel.data("unfilteredConfig")}j++}};_proto.getShapeArgs=function getShapeArgs(){var mark=this,config=mark.config,shapeObj=(0,_lib.extend2)({},mark.shapeObj),radius;config.autoScale=1;if(shapeObj){if(shapeObj.type==="polygon"){if(shapeObj.sides<3){shapeObj.type=CIRCLE_STR}else{shapeObj.startangle=config.startAngle}}else if(shapeObj.type==="arc"){radius=(shapeObj.radius||config.markerRadius)*config.autoScale;shapeObj.radius=radius;shapeObj.innerradius=shapeObj.innerradius&&shapeObj.innerradius*config.autoScale||radius*INNERRADIUSFACTOR}return shapeObj}return null};_proto._getLabelOptions=function _getLabelOptions(labelPos,labelPadding,options,width,height){var dataset=this,radius,x,y,alignment=labelPos&&labelPos.toLowerCase();if(!dataset.getLabelAlignment[alignment]){alignment=CENTER_STR}x=Number(options.x);y=Number(options.y);if(width===UNDEF||height===UNDEF){radius=options.radius||0}else{radius=/^(top|bottom)$/gi.test(alignment)&&height*.5||/^(left|right)$/gi.test(alignment)&&width*.5||0}radius=Number(radius)+Number(labelPadding);return dataset.getLabelAlignment[alignment](x,y,radius)};_proto.addMarkerItem=function addMarkerItem(options){var markers=this,chart=markers.getFromEnv("chart"),item=options,markerObj,items=markers.components.markerObjs,shapeObjs=markers.components.shapeObjs,markerGroup=markers.components.markerGroup,markerLabelGroup=markers.components.markerLabelGroup,markerConfigOptions,annotations=markers.getChildren("mapAnnotations")[0],numberFormatter=markers.getFromEnv("number-formatter"),markerOptions=chart.config.markerOpts,drawOptions,markerConfig,rawConfig,value,shapeId,id;if(id=item.id.toLowerCase()){if(items[id]){return}delete item.value;markers.imageLoadCount=0;markerObj=Markers._initializeMarkerItem(id,item,null);markerObj.dataset=markers;shapeId=markerObj.config.options.shapeid;markerConfig=markerObj.config;value=item.value;markerConfig.cleanValue=numberFormatter.getCleanValue(value);markerConfigOptions=markerConfig.options;if(markerConfig.cleanValue!==null){markerConfig.formattedValue=numberFormatter.dataLabels(value)}else{markerConfig.formattedValue=UNDEF}markerConfig.fillColor=(0,_lib.pluck)(markerConfigOptions.fillcolor,markerConfigOptions.color,markerOptions.fillColor);markerConfig.fillAlpha=(0,_lib.pluck)(markerConfigOptions.fillalpha,markerConfigOptions.alpha,markerOptions.fillAlpha);markerConfig.fillRatio=(0,_lib.pluck)(markerConfigOptions.fillratio,markerOptions.fillRatio);markerConfig.fillAngle=(0,_lib.pluck)(markerConfigOptions.fillangle,markerOptions.fillAngle);markerConfig.borderThickness=(0,_lib.pluckNumber)(markerConfigOptions.borderthickness,markerOptions.borderThickness);markerConfig.borderColor=(0,_lib.pluck)(markerConfigOptions.bordercolor,markerOptions.borderColor);markerConfig.borderAlpha=(0,_lib.pluck)(markerConfigOptions.borderalpha,markerOptions.borderAlpha);markerConfig.labelPadding=markerConfigOptions.labelpadding||markerOptions.labelPadding;markerConfig.options.tooltext=(0,_lib.pluck)(markerConfigOptions.tooltext,markerOptions.tooltext);markerConfig.link=markerConfigOptions.link;if(shapeId){markerObj.shapeObj=shapeObjs[shapeId&&shapeId.toLowerCase()]}items[id]=markerObj;drawOptions=markers._drawMarkerItem(markerObj);if(markerGroup&&markerLabelGroup){if(drawOptions.markerShape){rawConfig=Object.assign({align:"center",valign:"middle",animationLabel:"markerItem",autoscale:drawOptions.markerShape.type==="image"?0:1},drawOptions.markerShape);markerObj.markerShape=annotations.addItem(markerGroup.getId(),rawConfig,markers);markerObj.markerShape.data("unfilteredConfig",rawConfig)}if(drawOptions.markerLabel){rawConfig=Object.assign({animationLabel:"markerItem"},drawOptions.markerLabel);markerObj.markerLabel=annotations.addItem(markerLabelGroup.getId(),rawConfig,markers);markerObj.markerLabel.data("unfilteredConfig",rawConfig)}}markers._buildKdTree()}};_proto.updateMarkerItem=function updateMarkerItem(id,options){var markers=this,chart=markers.getFromEnv("chart"),annotations=markers.getChildren("mapAnnotations")[0],markerObjs=markers.components.markerObjs,markerOptions=chart.config.markerOpts,origOptions,key,markerConfig,optConfig={},marker=markerObjs[id],annotOptions;if(marker){origOptions=marker.config.options;(0,_lib.extend2)(origOptions,options);markers.imageLoadCount=0;markerConfig=marker.config;for(key in options){optConfig[key.toLowerCase()]=options[key]&&options[key].toString()}markerConfig.fillColor=(0,_lib.pluck)(optConfig.fillcolor,optConfig.color,markerOptions.fillColor);markerConfig.fillAlpha=(0,_lib.pluck)(optConfig.fillalpha,optConfig.alpha,markerOptions.fillAlpha);markerConfig.fillRatio=(0,_lib.pluck)(optConfig.fillratio,markerOptions.fillRatio);markerConfig.fillAngle=(0,_lib.pluck)(optConfig.fillangle,markerOptions.fillAngle);markerConfig.borderThickness=(0,_lib.pluckNumber)(optConfig.borderthickness,markerOptions.borderThickness);markerConfig.borderColor=(0,_lib.pluck)(optConfig.bordercolor,markerOptions.borderColor);markerConfig.borderAlpha=(0,_lib.pluck)(optConfig.borderalpha,markerOptions.borderAlpha);markerConfig.labelPadding=optConfig.labelpadding||markerOptions.labelPadding;markerConfig.options.tooltext=(0,_lib.pluck)(optConfig.tooltext,markerOptions.tooltext);markerConfig.link=optConfig.link;annotOptions=markers._drawMarkerItem(marker).markerShape;markers._buildKdTree();annotations.update(id,annotOptions)}};_proto.createContainer=function createContainer(){var dataset=this,parent=dataset.getLinkedParent(),animationManager=dataset.getFromEnv("animationManager"),pContainer=parent.getChildContainer("layer1");!dataset.getChildContainer("abovePlotGroup")&&dataset.addChildContainer("abovePlotGroup",animationManager.setAnimation({el:"group",attr:{name:"abovePlotGroup",opacity:1},container:pContainer,component:dataset,label:"group"}));!dataset.getChildContainer("belowPlotGroup")&&dataset.addChildContainer("belowPlotGroup",animationManager.setAnimation({el:"group",attr:{name:"belowPlotGroup",opacity:1},container:pContainer,component:dataset,label:"group"}))};_proto._removeMarkerItem=function _removeMarkerItem(id){var markers=this,components=markers.components,markerObjs=components.markerObjs,markerObj=markerObjs[id],kdArrayMap=components.kdArrayMap,annotations=markers.getChildren("mapAnnotations")[0],markerShape,markerLabel;if(markerObj){markerShape=markerObj.markerShape;markerLabel=markerObj.markerLabel;markerShape&&annotations.destroy(markerShape.getId());markerLabel&&annotations.destroy(markerLabel.getId());delete kdArrayMap[id];markers._buildKdTree()}delete markerObjs[id]};_proto.getElement=function getElement(point){var datasetObj=this;if(datasetObj.components.kDTree){return datasetObj.components.kDTree.getNeighbour(point)}};return Markers}(_entities.default);var _default=exports.default=Markers;