UNPKG

@fusioncharts/core

Version:

JavaScript Data Visualisation Library

1 lines 11 kB
"use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule=true;exports.default=void 0;var _inheritsLoose2=_interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));var _cartesianLabelManager=_interopRequireDefault(require("./cartesian-label-manager"));var _range=_interopRequireDefault(require("@fusioncharts/utils/src/scale-utils/array/range"));var _category=_interopRequireDefault(require("@fusioncharts/utils/src/scales/category"));var _lib=require("../lib");var _commonApi=require("./common-api");var DASH_DEF="none",TRUE_STRING="true",ONE_STRING="1",POSITION_START=_lib.preDefStr.POSITION_START,POSITION_MIDDLE=_lib.preDefStr.POSITION_MIDDLE,POSITION_TOP=_lib.preDefStr.POSITION_TOP,POSITION_BOTTOM=_lib.preDefStr.POSITION_BOTTOM,POSITION_END=_lib.preDefStr.POSITION_END,queryOptions={wrtVisible:true};var CategoryAxis=function(_CartesianLabelManage){function CategoryAxis(){var _this;_this=_CartesianLabelManage.call(this)||this;_this.config.scale=new _category.default;return _this}(0,_inheritsLoose2.default)(CategoryAxis,_CartesianLabelManage);var _proto=CategoryAxis.prototype;_proto.getName=function getName(){return"category"};_proto.getCategoryFromId=function getCategoryFromId(id){var config=this.config,tickValues=config.tickValues,tickIdMap=tickValues&&tickValues.tickIdMap;return tickIdMap[id]||{}};_proto.generateTicks=function generateTicks(){var scale=this.getScale(),axisConfig=this.config,domain=scale.getDomain(),divs=axisConfig.categoryNumDivLines+1,step=(domain[1]-domain[0])/divs,axisRange=axisConfig.axisRange,min=axisRange.min,max=axisRange.max,tickInterval=(max-min)/divs;axisConfig._allTicks=(0,_range.default)(min,max,tickInterval).concat(max);axisRange.tickInterval=tickInterval;return(0,_range.default)(domain[0],domain[1],step).concat(domain[1])};_proto._parseCategoryVline=function _parseCategoryVline(){var axis=this,axisConfig=axis.config,axisRange=axisConfig.axisRange,min=axisRange.min,max=axisRange.max,chart=axis.getFromEnv("chart"),chartConfig=chart.config,chartStyle=chartConfig.style||{},isHorizontal=axisConfig.isVertical,divlineStyle={fontFamily:chartConfig.style.inCanfontFamily,fontSize:chartConfig.style.inCanfontSize,color:chartConfig.style.inCancolor,lineHeight:chartConfig.style.inCanLineHeight},showLabelBackground,vlines,len,vline,label,i,showLabelBorder,labelHAlign,labelVAlign,labelPosition,linePosition,showVLines,alpha,color,bgColor,thickness,isDashed,dashLen,fontSizeInt,dashGap,vLineDrawingAttrObj,css,vLineTextAttrObj,labelColor,labelRotation,borderPadding,finalValue,checkForLimit,getLimit,referenceObj,showOnTop,vlineStartIndex;vlines=axisConfig.tickValues.vline;len=vlines.length;checkForLimit=axis.getZoom()!==1;getLimit=axis.getVisibleConfig();for(i=0;i<len;i++){vline=vlines[i];label=(0,_lib.parseUnsafeString)(vline.label);showLabelBorder=Boolean((0,_lib.pluckNumber)(vline.showlabelborder,axisConfig.showVLineLabelBorder,1));showLabelBackground=Boolean((0,_lib.pluckNumber)(vline.showlabelbackground,1));labelHAlign=(0,_lib.pluck)(vline.labelhalign,isHorizontal?POSITION_START:POSITION_MIDDLE);if(labelHAlign==="center"){labelHAlign=POSITION_MIDDLE}else if(labelHAlign==="left"){labelHAlign=POSITION_START}else if(labelHAlign==="right"){labelHAlign=POSITION_END}labelVAlign=(0,_lib.pluck)(vline.labelvalign,isHorizontal?POSITION_MIDDLE:POSITION_BOTTOM).toLowerCase();if(labelVAlign===POSITION_MIDDLE){labelVAlign=POSITION_MIDDLE}else if(labelVAlign===POSITION_TOP){labelVAlign=POSITION_BOTTOM}else if(labelVAlign===POSITION_BOTTOM){labelVAlign=POSITION_TOP}labelPosition=(0,_lib.pluckNumber)(vline.labelposition,0);linePosition=(0,_lib.pluckNumber)(vline.lineposition,.5);showVLines=(0,_lib.pluckNumber)(vline.showvlines,axisConfig.showVLines,1);alpha=(0,_lib.pluckNumber)(vline.alpha,axisConfig.vLineAlpha,80);color=(0,_lib.pluck)(vline.color,axisConfig.vLineColor).replace(/^#?/,"#");bgColor=showLabelBackground?(0,_lib.pluck)(vline.labelbgcolor,axisConfig.vLineLabelBgColor,"333333").replace(/^#?/,"#"):_lib.BLANKSTRING;labelColor=(0,_lib.pluck)(vline.labelcolor,axisConfig.vLineLabelColor,vline.color,chartStyle.inCancolor,axisConfig.vLineColor).replace(/^#?/,"#");thickness=(0,_lib.pluckNumber)(vline.thickness,axisConfig.vLineThickness,1);borderPadding=2;isDashed=Boolean(Number((0,_lib.pluck)(vline.dashed,0)));dashLen=(0,_lib.pluckNumber)(vline.dashlen,5);dashGap=(0,_lib.pluckNumber)(vline.dashgap,2);fontSizeInt=divlineStyle.fontSize;fontSizeInt=parseInt(fontSizeInt.replace(/px/i,""),10);labelRotation=(0,_lib.pluckNumber)(vline.rotatelabel,axisConfig.rotateVLineLabels)?270:0;linePosition=linePosition<0||linePosition>1?.5:linePosition;labelPosition=labelPosition<0||labelPosition>1?0:labelPosition;color=(0,_lib.convertColor)(color,showVLines?alpha:"0");vlineStartIndex=vline.animate&&!isHorizontal?vline.startIndex+1:vline.startIndex;finalValue=axis._getVlinePos(vlineStartIndex,linePosition)-(vline.animate?vline.leftShift:0);if(checkForLimit&&(finalValue<getLimit.minValue||finalValue>getLimit.maxValue)){continue}if(finalValue<min||finalValue>max){continue}vLineDrawingAttrObj={opacity:1,stroke:color,"stroke-width":thickness,"stroke-dasharray":isDashed?(0,_lib.getDashStyle)(dashLen,dashGap):DASH_DEF};vLineTextAttrObj={opacity:1,text:label,"text-anchor":labelHAlign,"vertical-align":labelVAlign,"text-bound":[]};css={fontSize:divlineStyle.fontSize,fontFamily:divlineStyle.fontFamily,lineHeight:divlineStyle.lineHeight};showOnTop=(0,_lib.pluckNumber)(vline.showontop,axisConfig.showVLinesOnTop,0);referenceObj={from:finalValue,layer:showOnTop?3:2,attr:vLineDrawingAttrObj,type:"line",startIndex:vline.startIndex,linePosition:linePosition};if(label){vLineTextAttrObj["text-bound"]=[bgColor,showVLines&&showLabelBorder?color:_lib.BLANKSTRING,showVLines&&showLabelBorder?1:0,borderPadding,_lib.UNDEF,showVLines&&showLabelBorder?"solid":_lib.BLANKSTRING];vLineTextAttrObj.fill=showVLines?labelColor:color;referenceObj.text={label:label,attr:vLineTextAttrObj,layer:4,labelRotation:labelRotation,labelPosition:labelPosition,css:css}}axis.setReferenceInfo(referenceObj);axis.config.parsedVlineInfo.push(referenceObj)}};_proto._parseReferenceVisuals=function _parseReferenceVisuals(){_CartesianLabelManage.prototype._parseReferenceVisuals.call(this);this.config.drawPlotlines&&this._parseCategoryVline()};_proto.categoryInsert=function categoryInsert(_index,data,adjustRange){var axis=this,index=_index,axisConfig=axis.config,min=axisConfig.axisRange.min,len=data.length,endPad=axisConfig.endPad||0,category,vline,tickIdMap,i,tickObj;category=axisConfig.tickValues.tickValue;tickIdMap=axisConfig.tickValues.tickIdMap;vline=axisConfig.tickValues.vline;for(i=0;i<len;i+=1){tickObj=(0,_lib.extend2)({},data[i]);if(!(tickObj.vline===TRUE_STRING||tickObj.vline===true||tickObj.vline===1||tickObj.vline===ONE_STRING)){if(tickObj.id){tickIdMap[tickObj.id]={tickObj:tickObj,i:index}}category.splice(index,0,tickObj);index+=1}else{tickObj.startIndex=index-2;vline.push(tickObj)}}if(adjustRange){axis._setAxisRange({min:min,max:Number((0,_lib.toPrecision)(category.length-1+endPad,10))})}};_proto.categoryDelete=function categoryDelete(startIndex,length,adjustRange){var axis=this,axisConfig=axis.config,axisRange=axisConfig.axisRange,min=axisRange.min,animateVline,i,len,category;animateVline=axisConfig.tickValues.vline;for(i=0,len=animateVline.length;i<len;i++){animateVline[i].animate=true;animateVline[i].leftShift=length}category=axisConfig.tickValues.tickValue;category.splice(startIndex,length);axis._shiftVline(startIndex,length,"left");if(adjustRange){axis._setAxisRange({min:min,max:axisRange.max-length})}};_proto._shiftVline=function _shiftVline(index,shift,direction){var axis=this,axisConfig=axis.config,vline=axisConfig.tickValues.vline,catLen=axisConfig.tickValues.tickValue.length,len=vline.length,i,curVline;for(i=0;i<len;i+=1){curVline=vline[i];if(curVline.startIndex>=index){if(direction==="right"){curVline.startIndex+=shift}else{curVline.startIndex-=shift}if(curVline.startIndex<0||curVline.startIndex>=catLen){vline.splice(i,1);len-=1;i-=1}}}};_proto.categoryTranslate=function categoryTranslate(_x){var axis=this,x=_x,axisConfig=axis.config,diff=axis.getPixel(1,queryOptions)-axis.getPixel(0,queryOptions),translationStr;x=(x||0)*diff;if(axisConfig.isReverse){x=-x}translationStr=["T",x,",","0"].join("");axis.realTimeTranslatableGroups=[{group:axisConfig.axisContainer,translationStr:translationStr},{group:axisConfig.axisTrendLabelContainer,translationStr:translationStr}]};_proto.updateTicksValues=function updateTicksValues(id,object){var axis=this,axisConfig=axis.config,ticks,isVlineUpdated,vlinesArr=axisConfig.parsedVlineInfo,vline,i,ln,index,prop;ticks=axisConfig.tickValues.tickValue;if(ticks[id]){for(prop in object){if(object.hasOwnProperty(prop)){if(prop==="x")isVlineUpdated=true;ticks[id][prop]=object[prop]}}}if(isVlineUpdated){for(i=0,ln=vlinesArr.length;i<ln;++i){vline=vlinesArr[i];index=vline.startIndex;if(index===id){vline.from=axis._getVlinePos(index,vline.linePosition)}else if(index+1===id){vline.from=axis._getVlinePos(index,vline.linePosition);break}}}};_proto._getVlinePos=function _getVlinePos(index,linePosition){var ticks=this.getTickValues(),axisConfig=this.config,_this$getLimit=this.getLimit(),min=_this$getLimit.min,max=_this$getLimit.max,categoryStart=ticks[index],categoryEnd=ticks[index+1],categoryStartPos,posRelCategory,isExtreme;if(!categoryStart){categoryStartPos=ticks[0]&&ticks[0].x?min:-1;isExtreme=true}else if(!categoryEnd){categoryStartPos=ticks[0]&&ticks[0].x?max:axisConfig.oriCatLen-1;isExtreme=true}if(!isExtreme){categoryStartPos=(0,_lib.pluckNumber)(categoryStart.x,categoryStart.y,index);posRelCategory=(categoryStartPos-(0,_lib.pluckNumber)(categoryEnd.x,categoryEnd.y,index+1))*linePosition}else{posRelCategory=linePosition}return categoryStartPos+Math.abs(posRelCategory)};_proto.getInterval=function getInterval(){if(this)return 1};_proto._setAxisRange=function _setAxisRange(data){var min=data.min,max=data.max,axisConfig=this.config,axisRange=axisConfig.axisRange,periodLength=axisConfig.periodLength,dataLimit=axisConfig.dataLimit,oldMax=dataLimit.max,oldMin=dataLimit.min,limitChanged,step;if(min>max){return}if(oldMax!==max||oldMin!==min)limitChanged=true;if(axisConfig.visibleMin!==_lib.UNDEF&&!axisConfig.setPadding&&!limitChanged){axisConfig.setPadding=false}else{dataLimit.max=max;dataLimit.min=min;if(periodLength){axisConfig.categoryNumDivLines=(max-min)/periodLength-1}step=(max-min)/(axisConfig.categoryNumDivLines+1);this.getScale().setDomain([min,max]);axisConfig.ticks=(0,_range.default)(min,max,step).concat(max);axisConfig._allTicks=axisConfig.ticks.slice();axisRange.min=min;axisRange.max=max;axisRange.tickInterval=step;this.setVisibleConfig(axisRange.min,axisRange.max)}};return CategoryAxis}(_cartesianLabelManager.default);CategoryAxis.prototype.setTickValues=_commonApi.setTickValues;var _default=exports.default=CategoryAxis;