UNPKG

@fusioncharts/core

Version:

JavaScript Data Visualisation Library

1 lines 7.97 kB
"use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule=true;exports.default=void 0;var _range=_interopRequireDefault(require("@fusioncharts/utils/src/scale-utils/array/range"));var _continuous=require("@fusioncharts/utils/src/scales/continuous");var _number=_interopRequireDefault(require("@fusioncharts/utils/src/scale-utils/interpolators/number"));var _safeMin=_interopRequireDefault(require("@fusioncharts/utils/src/array/safe-min"));var _lib=require("../lib");var errorMapping=(0,_continuous.bimap)([2,100],[80,20],_continuous.deInterpolateLinear,_number.default),getErrorValue=function getErrorValue(count){if(count>=100)return.2;if(count<=1)return 0;return errorMapping(count)/100},niceInterval=function niceInterval(interval){if(interval<=1)return 1;var arr=[],ceilInterval=Math.ceil(interval);arr[2]=ceilInterval%2;arr[5]=ceilInterval%5;arr[10]=ceilInterval%10;return(0,_safeMin.default)(arr)+ceilInterval},noLimitChange=function noLimitChange(min,max,count,errorLimit,forceZeroTick,scale){var diff=max-min,interval,j,addZero,k=min,minCount=Math.ceil(count*(1-errorLimit)),maxCount=Math.floor(count*(1+errorLimit)),noOfInterval,isZeroTickForced,errorInterval,outputLen,firstNum,lastNum,output=[],checkMultiple=function checkMultiple(value){var arr=[10,5,2,1],i,len=arr.length,rem,isMultiple;for(i=0;i<len;++i){rem=value%arr[i];if(rem%1===0){isMultiple=true;break}}return isMultiple},counter=-1,minCovered,maxCovered,temp,willBreak=function willBreak(value){return checkMultiple(interval=diff/(value+1))?value:_lib.UNDEF};while(!minCovered||!maxCovered){++counter;temp=count+counter;if(temp>=maxCount)maxCovered=true;noOfInterval=willBreak(temp);if(noOfInterval)break;temp=count-counter;if(temp<=minCount)minCovered=true;noOfInterval=willBreak(temp);if(noOfInterval)break}if(min<0&&max>0&&forceZeroTick)addZero=true;for(j=0;j<noOfInterval;j++){if(addZero&&k<0&&k+interval>0){output.push(0);isZeroTickForced=true}k+=interval;output.push(k)}if(noOfInterval===_lib.UNDEF&&forceZeroTick){output=scale.ticks(count);outputLen=output.length;if(outputLen>1){interval=Math.abs(output[0]-output[1]);errorInterval=interval*.2;firstNum=output[0];lastNum=output[outputLen-1];if(Math.abs(min-firstNum)<=errorInterval&&firstNum!==0){output.shift()}if(Math.abs(max-lastNum)<=errorInterval&&lastNum!==0){output.pop()}if(firstNum===0||lastNum===0)isZeroTickForced=true}else if(output[0]===0){isZeroTickForced=true}}if(addZero&&!isZeroTickForced&&output.indexOf(0)===-1){if(min<0&&output[0]>0){output=[0].concat(output)}else if(max>0&&output[output.length-1]<0){output.push(0)}else{output=[0]}isZeroTickForced=true}return{output:output,interval:interval,isZeroTickForced:isZeroTickForced}},domainUpdater=function domainUpdater(_min,_max,scale,axisConfig){var max=_max,min=_min,axisMinValue=axisConfig.isPercent?0:axisConfig.axisMinValue,axisMaxValue=axisConfig.isPercent?100:axisConfig.axisMaxValue,adjustDiv=!!axisConfig.adjustDiv,originalDivLines=axisConfig.numDivLines,numDivLines,divisions,setAdaptiveMin=!!axisConfig.setAdaptiveMin,axisRange=axisConfig.axisRange,minPowerOfTen,maxPowerOfTen,powerOfTen,interval,tickInterval,topBound,lowerBound,yMaxGiven,yMinGiven,rangePowerOfTen,rangeInterval,intervalArr,EPSILON=Math.pow(2,-24),extendDomain=true,tempMin,tempMax,errorLimit=.2,domain,negitiveTicks,ticksNotCreated=true,positiveMin,noLimitChangeObj,intervalArrLen,isZeroTickForced,xAxisLabelMode=axisConfig.xAxisLabelMode,dependentInfo=axisConfig.dependentInfo;numDivLines=axisConfig.majorTMNumber!==_lib.UNDEF?Math.max(0,originalDivLines-2):originalDivLines;if(dependentInfo&&dependentInfo.count&&!dependentInfo.limit){if(dependentInfo.numDivLines!==_lib.UNDEF){numDivLines=originalDivLines=dependentInfo.numDivLines;adjustDiv=false}}divisions=numDivLines+1;if(min===_lib.UNDEF&&max===_lib.UNDEF){min=0;max=1;extendDomain=false}if(max===min&&max===0){max=1;extendDomain=false}if(xAxisLabelMode==="categories"||xAxisLabelMode==="mixed"){extendDomain=false}if(extendDomain){maxPowerOfTen=Math.floor(Math.log(Math.abs(max))/Math.LN10);minPowerOfTen=Math.floor(Math.log(Math.abs(min))/Math.LN10);powerOfTen=Math.max(minPowerOfTen,maxPowerOfTen);interval=Math.pow(10,powerOfTen);if(Math.abs(max)/interval<2&&Math.abs(min)/interval<2){powerOfTen--;interval=Math.pow(10,powerOfTen)}rangePowerOfTen=Math.floor(Math.log(max-min)/Math.LN10);rangeInterval=Math.pow(10,rangePowerOfTen);if(max-min>0&&interval/rangeInterval>=10){interval=rangeInterval;powerOfTen=rangePowerOfTen}topBound=(Math.floor(max/interval)+1)*interval;if(min<0){lowerBound=-1*((Math.floor(Math.abs(min/interval))+1)*interval)}else{if(!setAdaptiveMin){lowerBound=0}else{lowerBound=Math.floor(Math.abs(min/interval)-1)*interval;lowerBound=lowerBound<0?0:lowerBound}}if(!setAdaptiveMin&&max<=0){topBound=0}if(!axisMaxValue&&axisMaxValue!==0){yMaxGiven=false}else{yMaxGiven=true}if(!axisMinValue&&axisMinValue!==0){yMinGiven=false}else{yMinGiven=true}if(!axisConfig.freezeLimit){if(yMaxGiven===false||yMaxGiven===true&&Number(axisMaxValue)<max&&max-Number(axisMaxValue)>EPSILON){max=topBound;yMaxGiven=false}else{max=Number(axisMaxValue)}if(yMinGiven===false||yMinGiven===true&&Number(axisMinValue)>min&&Number(axisMinValue)-min>EPSILON){min=lowerBound;yMinGiven=false}else{min=Number(axisMinValue)}}}else{if(!axisMaxValue&&axisMaxValue!==0){yMaxGiven=false}else{yMaxGiven=true}if(!axisMinValue&&axisMinValue!==0){yMinGiven=false}else{yMinGiven=true}if(yMaxGiven===true&&(Number(axisMaxValue)>=max||_max===_lib.UNDEF)){max=Number(axisMaxValue)}else{yMaxGiven=false}if(yMinGiven===true&&(Number(axisMinValue)<=min||_min===_lib.UNDEF)){min=Number(axisMinValue)}else{yMinGiven=false}}if(yMinGiven&&!yMaxGiven&&_max===_lib.UNDEF){if(min<0){max=0}else{max=min+1}}if(yMaxGiven&&!yMinGiven&&_min===_lib.UNDEF){if(max>0){min=0}else{min=max-1}}domain=[min,max];scale.setDomain(domain);if(adjustDiv&&!axisConfig.freezeLimit){if(!yMaxGiven&&!yMinGiven){axisConfig.ticks=!numDivLines?scale.getDomain():scale.nice(divisions).ticks(divisions);tickInterval=Math.abs(axisConfig.ticks[1]-axisConfig.ticks[0]);ticksNotCreated=false}else{errorLimit=getErrorValue(numDivLines);noLimitChangeObj=noLimitChange(min,max,numDivLines,errorLimit,axisConfig.forceZeroTick,scale);intervalArr=noLimitChangeObj.output;intervalArrLen=intervalArr.length;isZeroTickForced=noLimitChangeObj.isZeroTickForced;if(Math.abs((numDivLines-intervalArrLen+(isZeroTickForced?1:0))/numDivLines)>errorLimit){tickInterval=(max-min)/divisions}else{tickInterval=intervalArrLen===0||intervalArrLen===1&&isZeroTickForced?max-min:noLimitChangeObj.interval;axisConfig.isZeroTickForced=isZeroTickForced;axisConfig.ticks=isZeroTickForced&&min===0?intervalArr.concat(max):[min].concat(intervalArr,max);ticksNotCreated=false}}}else{if(!yMaxGiven&&!yMinGiven&&!axisConfig.freezeLimit){var _scale$nice$getDomain=scale.nice(divisions).getDomain();tempMin=_scale$nice$getDomain[0];tempMax=_scale$nice$getDomain[1];interval=(tempMax-tempMin)/divisions;tickInterval=niceInterval(interval);tempMax=tempMin+tickInterval*divisions;if((tempMax-max)/max>errorLimit||(tempMin-min)/min>errorLimit){scale.setDomain([min,max]);tickInterval=(max-min)/divisions}else{min=tempMin;max=tempMax;scale.setDomain([min,max])}}else{tickInterval=(max-min)/divisions}}if(ticksNotCreated){if(min<0&&max>0&&axisConfig.forceZeroTick){negitiveTicks=(0,_range.default)(min,0,tickInterval);positiveMin=negitiveTicks[negitiveTicks.length-1]+tickInterval;positiveMin===0?positiveMin+=tickInterval:axisConfig.isZeroTickForced=true;axisConfig.ticks=negitiveTicks.concat(0,(0,_range.default)(positiveMin,max,tickInterval),max)}else{axisConfig.ticks=(0,_range.default)(min,max,tickInterval).concat(max)}}var _scale$getDomain=scale.getDomain();min=_scale$getDomain[0];max=_scale$getDomain[1];axisConfig._allTicks=axisConfig.ticks.slice();axisRange.tickInterval=tickInterval;axisRange.min=min;axisRange.max=max};var _default=exports.default=domainUpdater;