@fusioncharts/features
Version:
FusionCharts JavaScript charting framework
1 lines • 12.7 kB
JavaScript
"use strict";exports.__esModule=true;exports.xyCalculator=exports.trim=exports.solveEquation=exports.polarToCartesian=exports.pluckBoolean=exports.parseEquation=exports.isMacro=exports.getScaledVal=exports.getQuadrant=exports.getEventData=exports.deg2Rad=exports.computeSliceBounds=exports.computePlotBounds=exports.compute3DSliceBounds=exports.cleanMacro=exports.axisMacroParser=exports.arrangeItems=exports.UNDERSCORE=exports.DEFAULT_MACRO_SEPARATOR=exports.DEFAULT_MACRO_PREFIX=void 0;var _lib=require("@fusioncharts/core/src/lib");exports.UNDEF=_lib.UNDEF;var UNDERSCORE=exports.UNDERSCORE="_",DEFAULT_MACRO_PREFIX=exports.DEFAULT_MACRO_PREFIX="$",DEFAULT_MACRO_SEPARATOR=exports.DEFAULT_MACRO_SEPARATOR=".",pi2=2*Math.PI,threshold=1e-5,axis2d=[-pi2,-3*pi2/4,-pi2/2,-pi2/4,0],axis3d=[pi2,3*pi2/4,pi2/2,pi2/4,0],square=function square(x){return x*x},deg2Rad=exports.deg2Rad=function deg2Rad(theta){return theta*(Math.PI/180)},polarToCartesian=exports.polarToCartesian=function polarToCartesian(r,theta,degreeInRad,center){if(degreeInRad===void 0){degreeInRad=true}if(center===void 0){center={}}var angle=theta;if(!degreeInRad){angle=deg2Rad(theta)}return{x:r*Math.cos(angle)+(center.x||0),y:r*Math.sin(angle)+(center.y||0)}},getQuadrant=exports.getQuadrant=function getQuadrant(point,cx,cy){if(point.x>=cx){if(point.y<=cy){return 0}return 3}if(point.y<=cy){return 1}return 2},getEllipseRadius=function getEllipseRadius(a,b,theta){if(a===0||b===0){return 0}return a*b/Math.sqrt(square(b)*square(Math.cos(theta))+square(a)*square(Math.sin(theta)))},computeSlice2DBBox=function computeSlice2DBBox(attr){var ringPath=attr.ringpath,r1,r2,sAngle,eAngle,cx,cy,quad=[],res=[],i,point1,point2,minX=Infinity,minY=Infinity,maxX=-Infinity,maxY=-Infinity;r1=(0,_lib.pluckNumber)(ringPath[2]);r2=(0,_lib.pluckNumber)(ringPath[3]);sAngle=(0,_lib.pluckNumber)(ringPath[4])%pi2;eAngle=(0,_lib.pluckNumber)(ringPath[5])%pi2;cx=(0,_lib.pluckNumber)(ringPath[0]);cy=(0,_lib.pluckNumber)(ringPath[1]);point1=polarToCartesian(r1,sAngle,true,{x:cx,y:cy});point2=polarToCartesian(r1,eAngle,true,{x:cx,y:cy});res.push(point1);res.push(point2);for(i=0;i<axis2d.length;i++){if(axis2d[i]>=sAngle&&axis2d[i]<=eAngle){quad.push(i)}}for(i=0;i<quad.length;i++){point1=polarToCartesian(r1,axis2d[quad[i]],true,{x:cx,y:cy});point2=polarToCartesian(r2,axis2d[quad[i]],true,{x:cx,y:cy});res.push(point1);res.push(point2)}point1=polarToCartesian(r2,sAngle,true,{x:cx,y:cy});point2=polarToCartesian(r2,eAngle,true,{x:cx,y:cy});res.push(point1);res.push(point2);for(i=0;i<res.length;i++){maxX=Math.max(maxX,res[i].x);minX=Math.min(minX,res[i].x);maxY=Math.max(maxY,res[i].y);minY=Math.min(minY,res[i].y)}return{x:minX,y:minY,width:Math.abs(maxX-minX),height:Math.abs(minY-maxY)}},computeSlice3DBBox=function computeSlice3DBBox(attr){var r1,r2,sAngle,eAngle,cx,cy,quad=[],res=[],i,point1,point2,minX=Infinity,minY=Infinity,maxX=-Infinity,maxY=-Infinity;r1=(0,_lib.pluckNumber)(attr.r);r2=(0,_lib.pluckNumber)(r1*attr.radiusYFactor);sAngle=(0,_lib.pluckNumber)(attr.sAngle)%pi2;eAngle=(0,_lib.pluckNumber)(attr.eAngle)%pi2;cx=(0,_lib.pluckNumber)(attr.cx);cy=(0,_lib.pluckNumber)(attr.cy);point1=polarToCartesian(getEllipseRadius(r1,r2,sAngle),sAngle,true,{x:cx,y:cy});point2=polarToCartesian(getEllipseRadius(r1,r2,eAngle),eAngle,true,{x:cx,y:cy});res.push(point1);res.push(point2);for(i=0;i<axis3d.length;i++){if(axis3d[i]>=sAngle&&axis3d[i]<=eAngle){quad.push(i)}}for(i=0;i<quad.length;i++){point1=polarToCartesian(getEllipseRadius(r1,r2,axis3d[quad[i]]),axis3d[quad[i]],true,{x:cx,y:cy});res.push(point1)}r1=(0,_lib.pluckNumber)(attr.innerR,0);r2=(0,_lib.pluckNumber)(r1*attr.radiusYFactor,0);point1=polarToCartesian(getEllipseRadius(r1,r2,sAngle),sAngle,true,{x:cx,y:cy});point2=polarToCartesian(getEllipseRadius(r1,r2,eAngle),eAngle,true,{x:cx,y:cy});res.push(point1);res.push(point2);for(i=0;i<quad.length;i++){point1=polarToCartesian(getEllipseRadius(r1,r2,axis3d[quad[i]]),axis3d[quad[i]],true,{x:cx,y:cy});res.push(point1)}for(i=0;i<res.length;i++){maxX=Math.max(maxX,res[i].x);minX=Math.min(minX,res[i].x);maxY=Math.max(maxY,res[i].y);minY=Math.min(minY,res[i].y)}return{x:minX,y:minY,width:Math.abs(maxX-minX),height:Math.abs(minY-maxY)}},getEllipticalPoint=function getEllipticalPoint(a,b,theta){var x,y,tan;tan=Math.tan(theta);x=a*b/Math.sqrt(b*b+a*a*tan*tan);y=a*b/Math.sqrt(a*a+b*b/(tan*tan));if(theta>pi2/4&&theta<3*pi2/4){x*=-1}else{x=Math.abs(x)}if(theta>pi2/2&&theta<pi2){y*=-1}else{y=Math.abs(y)}Math.abs(x)<=threshold&&(x=0);Math.abs(y)<=threshold&&(y=0);return{x:x,y:y}},compute3DSliceBounds=exports.compute3DSliceBounds=function compute3DSliceBounds(macro,config){var attr=config.props.element.attr,a=attr.r,b=a*attr.radiusYFactor,cx=attr.cx,cy=attr.cy,sAngle=attr.sAngle,eAngle=attr.eAngle,angle,res;switch(macro){case"slicex":case"slicemiddlex":case"slicecenterx":angle=(sAngle+eAngle)/2;res=getEllipticalPoint(a,b,angle).x+cx;break;case"slicey":case"slicemiddley":case"slicecentery":angle=(sAngle+eAngle)/2;res=getEllipticalPoint(a,b,angle).y+cy;break;case"slicestartx":res=getEllipticalPoint(a,b,sAngle).x+cx;break;case"slicestarty":res=getEllipticalPoint(a,b,sAngle).y+cy;break;case"sliceendx":res=getEllipticalPoint(a,b,eAngle).x+cx;break;case"sliceendy":res=getEllipticalPoint(a,b,eAngle).y+cy;break;default:res=xyCalculator(macro,computeSlice3DBBox(attr))}return res},computeSliceBounds=exports.computeSliceBounds=function computeSliceBounds(macro,config){var attr=config.props.element.attr,point,ringPath=attr.ringpath,cx,cy,r1,res,sAngle,eAngle,angle;cx=ringPath[0];cy=ringPath[1];r1=ringPath[2];sAngle=ringPath[4];eAngle=ringPath[5];switch(macro){case"slicex":case"slicemiddlex":case"slicecenterx":angle=(sAngle+eAngle)/2;point=polarToCartesian(r1,angle);res=point.x+cx;break;case"slicey":case"slicemiddley":case"slicecentery":angle=(sAngle+eAngle)/2;point=polarToCartesian(r1,angle);res=point.y+cy;break;case"slicestartx":res=polarToCartesian(r1,eAngle).x+cx;break;case"slicestarty":res=polarToCartesian(r1,eAngle).y+cy;break;case"sliceendx":res=polarToCartesian(r1,sAngle).x+cx;break;case"sliceendy":res=polarToCartesian(r1,sAngle).y+cy;break;default:res=xyCalculator(macro,computeSlice2DBBox(attr))}return res},computePlotBounds=exports.computePlotBounds=function computePlotBounds(set,name){var config=set.config||set,bbox,attr,xPos,yPos,radius;switch(name){case"column3D":case"bar2D":case"bar3D":case"paretoColumn":case"waterFall2D":case"errorBar2D":case"candlestick":case"heatMap":case"dragColumn":case"sparkColumn":case"marimekko":case"task":case"column":attr=config.props.element.attr;bbox={x:attr.x+(0,_lib.pluckNumber)(attr.xDepth,0),y:attr.y-(0,_lib.pluckNumber)(attr.yDepth,0),width:attr.width,height:attr.height};break;case"line":case"zoomLine":case"zoomScatter":case"scatter":case"spline":case"splinearea":case"multiaxisline":case"stepLine":case"errorScatter":case"errorLine":case"radar":case"selectScatter":case"dragLine":case"dragArea":case"kagi":case"sparkLine":case"area":xPos=set._xPos;yPos=set._yPos;radius=Number(config.anchorProps.radius)||0;bbox={x:xPos-radius,y:yPos-radius,width:2*radius,height:2*radius};break;case"bubble":attr=config.props.element.attr;bbox={x:attr.cx-attr.r,y:attr.cy-attr.r,width:2*attr.r,height:2*attr.r};break;case"dragNode":attr=config.props.element.attr;if(config.shapeType==="rect"){bbox={x:attr.x,y:attr.y,width:attr.width,height:attr.height}}else{xPos=config._xPos;yPos=config._yPos;radius=+config.radius||0;bbox={x:xPos-radius,y:yPos-radius,width:2*radius,height:2*radius}}break;case"boxandwhisker2D":attr=config.props.upperBoxElem.attr;bbox={x:attr.x,y:attr.y,width:attr.width,height:attr.height};break;case"category":case"polarCategory":case"log":case"numeric":attr=config.props.label.attr;bbox={x:attr.x-config.width/2,y:attr.y-config.height/2,width:config.width,height:config.height};if(attr["text-anchor"]==="end"||attr["text-anchor"]==="left"){bbox.x=attr.x-config.width}else if(attr["text-anchor"]==="start"||attr["text-anchor"]==="right"){bbox.x=attr.x}if(attr["vertical-align"]==="top"){bbox.y=attr.y}else if(attr["vertical-align"]==="bottom"){bbox.y=attr.y-config.height}break;case"multiLevelPie":attr=config.props.element.attr;bbox=computeSlice2DBBox(attr);break}return bbox},cleanMacro=exports.cleanMacro=function cleanMacro(str){var i,len,newStr=_lib.BLANKSTRING;for(i=0,len=str.length;i<len;i++){if(str[i]===" "){continue}newStr+=str[i]}return newStr},arrangeItems=exports.arrangeItems=function arrangeItems(itemConfigs){if(itemConfigs===void 0){itemConfigs=[]}var shape=[],text=[],i,len;len=itemConfigs.length;for(i=0;i<len;i++){if(itemConfigs[i].type==="text"){text.push(itemConfigs[i])}else{shape.push(itemConfigs[i])}}return shape.concat(text)},xyCalculator=exports.xyCalculator=function xyCalculator(what,bbox){var ret=0;switch(what){case"startx":ret=bbox.x;break;case"starty":ret=bbox.y;break;case"x":case"middlex":case"centerx":ret=bbox.x+bbox.width/2;break;case"y":case"middley":case"centery":ret=bbox.y+bbox.height/2;break;case"endx":ret=bbox.x+bbox.width;break;case"endy":ret=bbox.y+bbox.height;break;default:ret=0}return ret},axisMacroParser=exports.axisMacroParser=function axisMacroParser(chart,axisName){return function(string){var traversalArr=string.split(DEFAULT_MACRO_SEPARATOR).slice(1),axisIndex=isNaN(Number(traversalArr[0]))?0:Number(traversalArr[0]),labelIndex=isNaN(Number(traversalArr[0]))?traversalArr[1]:traversalArr[2],xyIndex=isNaN(Number(traversalArr[0]))?traversalArr[2]:traversalArr[3],axis,labelConfig,labelElementBBox,axisComp;axis=chart.getChildren(axisName)[axisIndex];axisComp=axis.components;labelIndex=Number(labelIndex);if(axisComp.labelIndexArr){labelIndex=axisComp.labelIndexArr[labelIndex]}labelConfig=axisComp.labels[labelIndex].config;labelElementBBox=computePlotBounds(labelConfig,axis.getName());return xyCalculator(xyIndex,labelElementBBox)}},getEventData=exports.getEventData=function getEventData(event,shape,chart){var chartCoord=chart.getFromEnv("getMouseCoordinate")(chart.getFromEnv("chart-container"),event,chart),annotationGroup=shape.getLinkedParent();return{element:shape.getElement(),rawConfig:shape.getAttribute(),pageX:chartCoord.pageX,pageY:chartCoord.pageY,chartX:chartCoord.chartX,chartY:chartCoord.chartY,annotationId:shape.getId(),groupId:annotationGroup&&annotationGroup.getId(),annotationOptions:shape.rawConfig,groupOptions:annotationGroup&&annotationGroup.rawConfig}},pluckBoolean=exports.pluckBoolean=function pluckBoolean(){var param,i,ii;for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++){params[_key]=arguments[_key]}for(i=0,ii=params.length;i<ii;i++){param=params[i];if(param!==true&¶m!==false){continue}return param}return false},trim=exports.trim=function trim(str){return str.replace(/^\s+|\s+$/g,"")},isMacro=exports.isMacro=function isMacro(valueString){return~valueString.indexOf(DEFAULT_MACRO_PREFIX)},solveEquation=exports.solveEquation=function solveEquation(arr){var sum=+arr[0],i=1,ii=arr.length,state,val;for(;i<ii;++i){val=arr[i];if(i%2){state=val}else{switch(state){case"+":sum+=+val;break;case"-":sum-=+val;break}}}return sum},getScaledVal=exports.getScaledVal=function getScaledVal(num,scale){var multiplier;switch(scale.axis){case"x":case"toX":multiplier=scale.scaleX;break;case"y":case"toY":multiplier=scale.scaleY;break;default:multiplier=scale.scaleValue||1}return num*multiplier},parseEquation=exports.parseEquation=function parseEquation(string,object,scale,prefix){if(scale===void 0){scale=false}if(prefix===void 0){prefix=DEFAULT_MACRO_PREFIX}var plusArr=string.split(/([+])/),negArr,finalArr=[],i,j,posStr,negStr,nlen,plen=plusArr.length;for(i=0;i<plen;i++){posStr=plusArr[i];if(posStr!=="+"){posStr=plusArr[i];negArr=posStr.split(/([-])/);for(j=0,nlen=negArr.length;j<nlen;j++){negStr=negArr[j];if(negStr!=="-"){finalArr.push(negArr[j]);if(j<nlen-1){finalArr.push("-")}}}if(i<plen-1){finalArr.push("+")}}}return finalArr.map((function(str){var key=_lib.BLANKSTRING,untaggedString=_lib.BLANKSTRING,comparand=_lib.BLANKSTRING,parsedVal,re,value;if(str.charAt(0)===prefix){untaggedString=str.replace(new RegExp("[\\$ ]","g"),"");comparand=untaggedString.split(DEFAULT_MACRO_SEPARATOR)[0];if(!isNaN(+untaggedString)){return+untaggedString}for(key in object){if(comparand===key){re=new RegExp(key,"g");if(typeof object[key]==="function"){try{parsedVal=comparand.replace(re,object[key](untaggedString))}catch(e){parsedVal=comparand.replace(re,0)}}else{parsedVal=comparand.replace(re,object[key]||0)}break}}}else{value=Number(str);var parseStr=str;if(!isNaN(value)){parseStr=scale?getScaledVal(value,scale).toString():value.toString()}else if(str!=="+"&&str!=="-"){parseStr=0}parsedVal=parseStr}return parsedVal}))};