UNPKG

@fusioncharts/core

Version:

JavaScript Data Visualisation Library

1 lines 18.6 kB
"use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule=true;exports.shiftLabels=exports.setTickValues=exports.setDataLimit=exports.setAxisPadding=exports.setAxisDimention=exports.getTrendLineLimits=exports.getPixel=exports.getLabel=exports.extractStyleInfo=exports._parseLabel=exports._drawLabel=exports._createContainer=void 0;var _difference=_interopRequireDefault(require("ramda/src/difference"));var _extent5=_interopRequireDefault(require("@fusioncharts/utils/src/array/extent"));var _lib=require("../lib");var queryOptions={wrtVisible:true},LABEL_ID="_label",NORMALSTRING="normal",MIDDLE_STR="middle",POINTER="pointer",NOSTRING="none",extractStyleInfo=exports.extractStyleInfo=function extractStyleInfo(cat,chart){var sAttrMap={labelfont:["fontFamily"],labelfontcolor:["fontColor"],labelfontsize:["fontSize",function(val){return val?(0,_lib.pluckNumber)(val)+"px":_lib.UNDEF}],labelfontbold:["fontWeight",function(val){return val?"bold":NORMALSTRING}],labelfontitalic:["fontStyle",function(val){return val?"italic":NORMALSTRING}],labelfontalpha:["fontAlpha"]},cats=chart.getFromEnv("dataSource").categories,catData=cats&&cats[0]||{},defFn=function defFn(val){return val},styleExists=false,attrKey,attrVal,secAttrVal,style={},attrRule,mappedAttr,mapFn,mappedVal;for(attrKey in catData){if(attrKey==="category"||attrKey in cat){continue}attrVal=catData[attrKey];cat[attrKey]=attrVal}for(attrKey in sAttrMap){attrRule=sAttrMap[attrKey];mappedAttr=attrRule[0];mapFn=attrRule[1]||defFn;attrVal=cat[attrKey];secAttrVal=cat[mappedAttr.toLowerCase()];if(attrVal!==_lib.UNDEF||secAttrVal!==_lib.UNDEF){if((mappedVal=mapFn(attrVal))!==_lib.UNDEF||(mappedVal=mapFn(secAttrVal))!==_lib.UNDEF){style[mappedAttr]=mappedVal;styleExists=true}}if(styleExists){cat.style=style}}},setAxisDimention=exports.setAxisDimention=function setAxisDimention(data){var axis=this,scale=axis.getScale(),axisConfig=axis.config,chart=axis.getFromEnv("chart"),chartConfig=chart.config,axisDimention=axisConfig.axisDimention||(axisConfig.axisDimention={}),isReverse=axisConfig.isReverse;axisDimention.opposite=(0,_lib.pluckNumber)(data.opposite,axisDimention.opposite);axisDimention.x=(0,_lib.pluckNumber)(data.x,axisDimention.x,chartConfig.canvasLeft);axisDimention.y=(0,_lib.pluckNumber)(data.y,axisDimention.y,chartConfig.canvasTop);axisDimention.axisLength=(0,_lib.pluckNumber)(data.axisLength,axisDimention.axisLength);if(axisConfig.isVertical){isReverse?scale.setRange([axisDimention.y+axisDimention.axisLength,axisDimention.y]):scale.setRange([axisDimention.y,axisDimention.y+axisDimention.axisLength])}else{isReverse?scale.setRange([axisDimention.x+axisDimention.axisLength,axisDimention.x]):scale.setRange([axisDimention.x,axisDimention.x+axisDimention.axisLength])}axisConfig.translation=axis._computeTranslation()},setDataLimit=exports.setDataLimit=function setDataLimit(_max,_min){var axis=this,max=_max,min=_min,axisConfig=axis.config,categories=axis.getFromEnv("dataSource").categories,categoryArr=categories&&categories[0]&&categories[0].category,startPad=axisConfig.startPad||0,endPad=axisConfig.endPad||0,catMin,catMax,trendMin,trendMax,xAxisLabelMode=axisConfig.xAxisLabelMode,numberAccessor=function numberAccessor(a){return Number(a)};if(xAxisLabelMode==="categories"||xAxisLabelMode==="mixed"){var _extent=(0,_extent5.default)(categoryArr,(function(obj){return Number(obj.x)}));catMin=_extent[0];catMax=_extent[1]}var _axis$getTrendLineLim=axis.getTrendLineLimits();trendMin=_axis$getTrendLineLim[0];trendMax=_axis$getTrendLineLim[1];var _extent2=(0,_extent5.default)([trendMin,trendMax,catMin,catMax,min,max],numberAccessor);min=_extent2[0];max=_extent2[1];axisConfig.originalMax=max;axisConfig.originalMin=min;max=axisConfig.isPercent?100:max+endPad;min=axisConfig.isPercent?0:min-startPad;axis._setAxisRange({min:min,max:max});if(axisConfig.axisRange.tickInterval!==_lib.UNDEF){axis._adjustNumberFormatter(axisConfig.axisRange.tickInterval)}},getTrendLineLimits=exports.getTrendLineLimits=function getTrendLineLimits(){var axisConfig=this.config,lines=axisConfig.trendLines||axisConfig.vTrendLines||axisConfig.trendPoints,lineArr=lines&&lines[0]&&lines[0].line||lines&&lines.point,startMin,startMax,endMin,endMax;if(axisConfig.trendLimits)return axisConfig.trendLimits;var _extent3=(0,_extent5.default)(lineArr,(function(obj){return obj.startvalue===""?_lib.UNDEF:Number(obj.startvalue)}));startMin=_extent3[0];startMax=_extent3[1];var _extent4=(0,_extent5.default)(lineArr,(function(obj){return obj.endvalue===""?_lib.UNDEF:Number(obj.endvalue)}));endMin=_extent4[0];endMax=_extent4[1];axisConfig.trendLimits=(0,_extent5.default)([startMin,startMax,endMin,endMax],(function(a){return Number(a)}));return axisConfig.trendLimits},getPixel=exports.getPixel=function getPixel(value){return this.getScale().getRangeValue(value)},_drawLabel=exports._drawLabel=function _drawLabel(){var axis=this,axisConfig=axis.config,animationManager=axis.getFromEnv("animationManager"),toolTipController=this.getFromEnv("toolTipController"),axisRange=axisConfig.axisRange,labels=axisConfig.labels,style=labels.style,axisComponents=axis.components,i,j,ln,max=axisRange.max,min=axisRange.min,axisContainer=axisConfig.axisContainer,extremeLabels=axisConfig.extremeLabels,textElement,ticks=axisConfig.ticks,mapId,map=[],css={fontFamily:style.fontFamily,fontSize:style.fontSize,fontWeight:style.fontWeight,fontStyle:style.fontStyle,lineHeight:style.lineHeight},removingElement,axisAttrObj,value,diff,labelIndexArr,labelConfArr;if(axisConfig.labels.isDraw){labelConfArr=axisComponents.labels;labelIndexArr=axisComponents.labelIndexArr;axisContainer.css(css);for(j=0,ln=labelIndexArr&&labelIndexArr.length;j<ln;j+=1){i=labelIndexArr[j];value=ticks[i];mapId=""+value+LABEL_ID;textElement=axis.getGraphicalElement(mapId);axisAttrObj=labelConfArr[i].config.props.label.attr;textElement=axis.addGraphicalElement(mapId,animationManager.setAnimation({el:textElement||"text",attr:axisAttrObj,container:axisContainer,data:{value:value},component:axis,label:"text"}));if(axisAttrObj.tooltext||textElement.abbrArr){toolTipController.enableToolTip(textElement,axisAttrObj.tooltext)}else{toolTipController.disableToolTip(textElement)}if(value===max){extremeLabels.lastLabel.graphic=textElement}else if(value===min){extremeLabels.firstLabel.graphic=textElement}map.push(mapId)}}diff=(0,_difference.default)(axisConfig.prevIntervalArr,map);for(i=0,ln=diff.length;i<ln;i++){removingElement=axis.getGraphicalElement(diff[i]);removingElement&&axis.removeGraphicalElement(removingElement)}axisConfig.prevIntervalArr=map},_parseLabel=exports._parseLabel=function _parseLabel(){var axis=this,axisConfig=axis.config,canvasDimensions=axis.getLinkedItem("canvas").getEffectiveDimensions(),axisDimension=axisConfig.axisDimention,chart=axis.getFromEnv("chart"),chartConfig=chart.config,axisRange=axisConfig.axisRange,isOpposit=axisConfig.isOpposit,labels=axisConfig.labels,axisComponents=axis.components,labelStore=axisComponents.labels,style=labels.style,smartLabel=chart.getFromEnv("smartLabel"),i,ln,isVertical=axisConfig.isVertical,max=axisRange.max,min=axisRange.min,numberFormatter=axis.getFromEnv("number-formatter"),canvasTop=canvasDimensions.top,canvasLeft=canvasDimensions.left,canvasBottom=canvasTop+canvasDimensions.height,canvasRight=canvasLeft+canvasDimensions.width,axisPadding=axisConfig.labelPadding,extremeLabels=axisConfig.extremeLabels,axisStartPosition=isVertical?axisDimension.x:axisDimension.y,axisEndPosition=axisDimension.opposite,labelRotation,labelLineHeight,avalW,avalH,axisValueMaxH=axisConfig.labelMaxH,axisValueMaxW=axisConfig.labelMaxW,tempStep,tickInterval=axisRange.tickInterval,intervalWidth=Math.abs(axis.getPixel(min,queryOptions)-axis.getPixel(min+tickInterval,queryOptions)),numberFormatterFn,axisAttrObjCommon,axisAttrObj,tickMap=[],ticks=axisConfig.ticks,counter=0,isReverse=axisConfig.isReverse,leftSpace,rightSpace,value,smartLabelConf,showZeroPlaneValue=(0,_lib.pluckNumber)(axis.getFromEnv("chart-attrib").showzeroplanevalue),checkLimit=true,zeroInPx,limit=axis.getLimit(),intervalArr;style.fontSize=this.computeFontSize(style.fontSizeWithUnit);style.lineHeight=(0,_lib.setLineHeight)(style);smartLabel.useEllipsesOnOverflow(chartConfig.useEllipsesWhenOverflow);smartLabel.setStyle({fontSize:style.fontSize,fontFamily:style.fontFamily,lineHeight:style.lineHeight,fontWeight:style.fontWeight});labelLineHeight=style.lineHeight;if(labelLineHeight){if(labelLineHeight.indexOf("px")!==-1){labelLineHeight=parseFloat(labelLineHeight.replace("px",""))}}if(showZeroPlaneValue===0){checkLimit=false}if(axisConfig.labels.isDraw){if(axisConfig.drawLabelsOpposit){isOpposit=!isOpposit;axisStartPosition=axisEndPosition}axisAttrObjCommon={fill:style.color,"line-height":labelLineHeight,"font-size":style.fontSize,opacity:1,cursor:style.labelLink?POINTER:""};labelRotation=axisConfig.labels.rotation;if(isVertical){if(axisConfig.labelMaxH>intervalWidth&&!axisConfig.tickValues){tempStep=Math.ceil(axisConfig.labelMaxH/intervalWidth)}axisAttrObjCommon["text-anchor"]=isOpposit?_lib.POSITION_START:_lib.POSITION_END}else{if(axisConfig.labelMaxW>intervalWidth&&!axisConfig.tickValues){tempStep=Math.ceil(axisConfig.labelMaxW/intervalWidth)}if(labelRotation){axisAttrObjCommon["text-anchor"]=isOpposit?_lib.POSITION_START:_lib.POSITION_END;axisAttrObjCommon["vertical-align"]=MIDDLE_STR}else{axisAttrObjCommon["vertical-align"]=isOpposit?_lib.POSITION_BOTTOM:_lib.POSITION_TOP}leftSpace=canvasLeft;rightSpace=chartConfig.width-canvasRight}if(tempStep>axisConfig.labels.step){axisConfig.labels.step=tempStep}if(axisConfig.numberFormatterFn){numberFormatterFn=numberFormatter[axisConfig.numberFormatterFn]}else if(axisConfig.isPercent){numberFormatterFn=numberFormatter.yAxisPercentValue}else if(isVertical){numberFormatterFn=numberFormatter.yAxis}else{numberFormatterFn=numberFormatter.xAxis}extremeLabels.firstLabel={};extremeLabels.lastLabel={};intervalArr=ticks.filter((function(tick,idx,arr){if(tick===0&&!axisConfig.showZeroPlaneValue){if(!checkLimit||checkLimit&&!(limit.max===tick||limit.min===tick)){return false}tickMap[counter++]=idx;return true}else if(!isVertical&&(axisConfig.isReverse?idx!==0:idx!==arr.length-1)&&axis.getPixel(tick,queryOptions)+axisConfig.labelMaxW>canvasRight){return false}else if(idx%axisConfig.labels.step===0){tickMap[counter++]=idx;return true}else if(axisConfig.labels.drawLimitVal&&(idx===0||idx===arr.length-1)){tickMap[counter++]=idx;return true}return false}));if(axisConfig.isZeroTickForced&&intervalArr.indexOf(0)!==-1){var valueInPx;counter=0;tickMap=[];zeroInPx=axis.getPixel(0);intervalArr=intervalArr.filter((function(tick,index,arr){valueInPx=axis.getPixel(tick);if(arr[index+1]===0||arr[index-1]===0){if(isVertical){if(valueInPx+axisValueMaxH>=zeroInPx&&zeroInPx>=valueInPx-axisValueMaxH)return false;tickMap[counter++]=index;return true}else if(valueInPx+axisValueMaxW>=zeroInPx&&zeroInPx>=valueInPx-axisValueMaxW){return false}tickMap[counter++]=index;return true}tickMap[counter++]=index;return true}))}avalW=(isVertical?axisValueMaxW:intervalWidth/2)*axisConfig.labels.step;avalH=isVertical?intervalWidth/2:axisValueMaxH;axisComponents.labelIndexArr=tickMap.slice();for(i=0,ln=intervalArr.length;i<ln;i+=1){value=intervalArr[i];labelStore[tickMap[i]]=labelStore[tickMap[i]]||{config:{props:{label:{}}}};axisAttrObj=Object.assign({},axisAttrObjCommon);smartLabelConf=_lib.UNDEF;if(!axisConfig.labels.drawNormalVal&&!(value===min||value===max)){axisAttrObj.text=_lib.BLANKSTRING}else if(!axisConfig.labels.drawLimitVal&&(value===min||value===max)){axisAttrObj.text=_lib.BLANKSTRING}else if(value===min&&axisConfig.lowerLimitDisplay&&axisConfig.labels.drawLimitVal){smartLabelConf=smartLabel.getSmartText(axisConfig.lowerLimitDisplay,avalW,avalH+labelLineHeight/2);axisAttrObj.text=smartLabelConf.text;axisAttrObj.tooltext=smartLabelConf.tooltext}else if(value===max&&axisConfig.upperLimitDisplay&&axisConfig.labels.drawLimitVal){smartLabelConf=smartLabel.getSmartText(axisConfig.upperLimitDisplay,avalW,avalH+labelLineHeight/2);axisAttrObj.text=smartLabelConf.text;axisAttrObj.tooltext=smartLabelConf.tooltext}else{axisAttrObj.text=_lib.BLANKSTRING+numberFormatterFn.call(numberFormatter,value,axisConfig.axisIndex);smartLabelConf=smartLabel.getOriSize(axisAttrObj.text)}if(isVertical){axisAttrObj.x=isOpposit?(axisStartPosition||canvasRight)+axisPadding:(axisStartPosition||canvasLeft)-axisPadding;axisAttrObj.y=axis.getPixel(value,queryOptions);if((isReverse&&value===min&&axisConfig.lowerLimitDisplay||!isReverse&&value===max&&axisConfig.upperLimitDisplay)&&smartLabelConf&&smartLabelConf.height>labelLineHeight){axisAttrObj["vertical-align"]=_lib.POSITION_BOTTOM}if((isReverse&&value===max&&axisConfig.upperLimitDisplay||!isReverse&&value===min&&axisConfig.lowerLimitDisplay)&&smartLabelConf&&smartLabelConf.height>labelLineHeight){axisAttrObj["vertical-align"]=_lib.POSITION_TOP}if(axisConfig.placeValuesInside){axisAttrObj["text-anchor"]=isOpposit?_lib.POSITION_END:_lib.POSITION_START}}else{axisAttrObj.x=axis.getPixel(value,queryOptions);axisAttrObj.y=isOpposit?(axisStartPosition||canvasTop)-axisPadding:(axisStartPosition||canvasBottom)+axisPadding;if((!isReverse&&value===min||isReverse&&value===max)&&smartLabelConf&&smartLabelConf.width>leftSpace*2){axisAttrObj["text-anchor"]=_lib.POSITION_START}if((!isReverse&&value===max||isReverse&&value===min)&&smartLabelConf&&smartLabelConf.width>rightSpace*2){axisAttrObj["text-anchor"]=_lib.POSITION_END}if(axisConfig.placeValuesInside){axisAttrObj["vertical-align"]=isOpposit?_lib.POSITION_TOP:_lib.POSITION_BOTTOM}else{axisAttrObj["vertical-align"]=isOpposit?_lib.POSITION_BOTTOM:_lib.POSITION_TOP}}if(typeof value==="undefined"){axisAttrObj["text-bound"]=[]}else{axisAttrObj["text-bound"]=[(0,_lib.pluck)(style.backgroundColor,_lib.BLANKSTRING),(0,_lib.pluck)(style.borderColor,_lib.BLANKSTRING),(0,_lib.pluck)(style.borderThickness,_lib.BLANKSTRING),(0,_lib.pluck)(style.borderPadding,0),(0,_lib.pluck)(style.borderRadius,0),(0,_lib.pluck)(style.borderDash,NOSTRING)]}if(labels.shiftX){axisAttrObj.x+=labels.shiftX}if(labels.shiftY){axisAttrObj.y+=labels.shiftY}axisAttrObj.transform=(0,_lib.getSuggestiveRotation)(labelRotation,axisAttrObj.x,axisAttrObj.y);labelStore[tickMap[i]].config.props.label.attr=axisAttrObj}}},setTickValues=exports.setTickValues=function setTickValues(categories){var len=categories&&categories.length,axisConfig=this.config,startPad=axisConfig.startPad||0,index,chart=this.getFromEnv("chart"),tickObj,countCat=0,tickValues=axisConfig.tickValues={},tickValue=tickValues.tickValue=[],vline=tickValues.vline=[],hasTickId,tickIdMap=tickValues.tickIdMap={},endPad=axisConfig.endPad||0;axisConfig.hasCategory=1;for(index=0;index<len;index+=1){tickObj=(0,_lib.extend2)({},categories[index]);hasTickId=tickObj.id||tickObj.id==="";if(hasTickId){tickIdMap[tickObj.id.toLowerCase()]={tickObj:tickObj,index:countCat}}if((axisConfig.mapTickValuesById&&hasTickId||!axisConfig.mapTickValuesById)&&!tickObj.vline){extractStyleInfo(tickObj,chart);tickValue.push(tickObj);tickValue[countCat].label=(0,_lib.parseUnsafeString)(tickValue[countCat].label);countCat+=1}if(tickObj.vline){tickObj.startIndex=tickValue.length-1;vline.push(tickObj)}}axisConfig.oriCatLen=countCat;this._setAxisRange({max:Number((0,_lib.toPrecision)(countCat-1+endPad,10)),min:Number((0,_lib.toPrecision)(0-startPad,10)),tickInterval:Number((0,_lib.toPrecision)(1,10))})},shiftLabels=exports.shiftLabels=function shiftLabels(x,y){var axis=this,axisConfig=axis.config,labels=axisConfig.labels;labels.shiftX=x;labels.shiftY=y},_createContainer=exports._createContainer=function _createContainer(){var axis=this,axisConfig=axis.config,isVertical=axisConfig.isVertical,chart=axis.getLinkedParent(),childContainers=chart.getChildContainer(),axisBottom=childContainers.axisBottomGroup,axisTop=childContainers.axisTopGroup,translation=-axis.getTranslation(),translateString=isVertical?"T0,"+translation:"T"+translation+",0",axisLineGroup,axisNameGroup,axisTrendGroupTop,axisLabelGroup,axisLabelGroupTop;axisNameGroup=axis.createContainer("axisNameGroup",{name:"dataset-Name-group"},axisBottom);axisLineGroup=axis.createContainer("axisLineGroup",{name:"axis-Line-group"},axisTop);axisTrendGroupTop=axis.createContainer("axisTrendGroupTop",{name:"dataset-Trend-group-top"},axisTop);axisLabelGroup=axis.createContainer("axisLabelGroup",{name:"dataset-Label-group"},axisBottom);axisLabelGroupTop=axis.createContainer("axisLabelGroupTop",{name:"dataset-Label-group"},axisTop);axisConfig.axisContainer=axis.createGroup("axisContainer",{name:"dataset-axis",transform:translateString},axisLabelGroup);axisConfig.axisLabelContainerTop=axis.createGroup("axisLabelContainerTop",{name:"dataset-top-label",transform:translateString},axisLabelGroupTop);axisConfig.axisAxisLineContainer=axis.createGroup("axisAxisLineContainer",{name:"axis-line-tick"},axisLineGroup);axisConfig.axisTrendLabelContainer=axis.createGroup("axisTrendLabelContainer",{name:"dataset-axis-trend-label"},axisTrendGroupTop);axisConfig.axisNameContainer=axis.createGroup("axisNameContainer",{name:"dataset-axis-name"},axisNameGroup);axisConfig.axisAxisLineContainerBottom=axis.createGroup("axisAxisLineContainerBottom",{name:"axis-line-tick-bottom"},axisBottom)},setAxisPadding=exports.setAxisPadding=function setAxisPadding(_startPad,_endPad){if(_startPad===void 0){_startPad=0}if(_endPad===void 0){_endPad=0}var axis=this,axisConfig=axis.config,startPad=_startPad,endPad=_endPad,scale=axis.getScale(),_scale$getDomain=scale.getDomain(),min=_scale$getDomain[0],max=_scale$getDomain[1],diff;if(axisConfig.oriCatLen===1){if(startPad===0){startPad=.5}if(endPad===0){endPad=.5}}diff=startPad-axisConfig.startPad;axisConfig.startPad=Math.max(axisConfig.startPad,startPad);axisConfig.endPad=Math.max(axisConfig.endPad,endPad);if(diff>0){axisConfig.setPadding=true;axis._setAxisRange({min:min-diff,max:max+diff})}if(!axisConfig.tickValues){if(axisConfig.originalMax&&axisConfig.originalMin){axis.setDataLimit(axisConfig.originalMax,axisConfig.originalMin)}}},getLabel=exports.getLabel=function getLabel(tickId){var axis=this,axisConfig=axis.config,tickObj=axisConfig.tickValues&&axisConfig.tickValues.tickValue[tickId],macroIndices=[3],parserConfig={};if(tickObj&&tickObj.tooltext){parserConfig.label=tickObj.label;tickObj.tooltext=(0,_lib.parseTooltext)(tickObj.tooltext,macroIndices,parserConfig)}return{label:tickObj&&(tickObj.oriLabel||tickObj.label),tooltext:tickObj&&tickObj.tooltext}};