UNPKG

@fusioncharts/charts

Version:

JavaScript Data Visualisation Library

1 lines 19.3 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 _componentInterface=require("@fusioncharts/core/src/component-interface");var _lib=require("@fusioncharts/core/src/lib");var _dependencyManager=require("@fusioncharts/core/src/dependency-manager");var _index=_interopRequireDefault(require("./index.animation"));var visibleStr=_lib.preDefStr.visibleStr,UNDEF,REMOVED="removed",math=Math,mathMin=math.min,mathMax=math.max;var lineHeightMultiplier=1.2,midPointRatio=lineHeightMultiplier/2,isOverlap=function isOverlap(text1,text2){if(text1.y<=text2.y&&text2.y<=text1.y+text1.height||text1.y<=text2.y+text2.height&&text2.y+text2.height<=text1.y+text1.height){return true}return false};(0,_dependencyManager.addDep)({name:"cartesianStackAnimation",type:"animationRule",extension:_index.default});var CartesianStackgroup=function(_ComponentInterface){function CartesianStackgroup(){var _this;_this=_ComponentInterface.call(this)||this;_this.setState("visible",true);return _this}(0,_inheritsLoose2.default)(CartesianStackgroup,_ComponentInterface);var _proto=CartesianStackgroup.prototype;_proto.getType=function getType(){return"group"};CartesianStackgroup.getName=function getName(){return"cartesianStackGroup"};_proto.getName=function getName(){return"cartesianStackGroup"};_proto.preConfigure=function preConfigure(managerJSON){if(!managerJSON){return false}this.config.JSONData=managerJSON;_ComponentInterface.prototype.preConfigure.call(this,managerJSON)};_proto.configure=function configure(managerJSON){if(!managerJSON){return false}_ComponentInterface.prototype.configure.call(this,managerJSON)};_proto.configureAttributes=function configureAttributes(obj){_ComponentInterface.prototype.configureAttributes.call(this,obj);var manager=this,config=manager.config,chartConf=manager.getFromEnv("chartConfig"),chartAttrs=manager.getFromEnv("chart-attrib");config.showTextOutline=(0,_lib.pluckNumber)(chartAttrs.textoutline,0);config.showSum=(0,_lib.pluckNumber)(chartAttrs.showsum,chartConf.showSum,0);config.sumInside=0};_proto.setSkippingInfo=function setSkippingInfo(skipObj){var dataSet=this;dataSet.addToEnv("skipInfo",skipObj||{drawOnlyMap:[],plotsPerBin:1,draw:[],hide:[],skippingApplied:false,dragHashMap:[],prevDrawArray:[]})};_proto.getSkippingInfo=function getSkippingInfo(){return this.getFromEnv("skipInfo")||{drawOnlyMap:[],plotsPerBin:1,draw:[],hide:[],skippingApplied:false,dragHashMap:[],prevDrawArray:[]}};_proto.setVisibility=function setVisibility(){var numVisibleDataset=0;this._mapChildren((function(child){child.getState("visible")&&numVisibleDataset++}));this.setState("visible",!!numVisibleDataset)};_proto.createContainer=function createContainer(){var manager=this,animationManager=manager.getFromEnv("animationManager"),key,parent=manager.getLinkedParent(),pContainer,parentChildContainers=parent.getChildContainer();for(key in parentChildContainers){pContainer=parentChildContainers[key];!manager.getChildContainer(key)&&manager.addChildContainer(key,animationManager.setAnimation({el:"group",attr:{name:"manager-"+key},container:pContainer,component:manager}))}!manager.getContainer("sumLabelsLayer")&&manager.addContainer("sumLabelsLayer",animationManager.setAnimation({el:"group",attr:{name:"manager-sumLabelsLayer",class:"fusioncharts-datalabels"},label:"group",container:parent.getChildContainer("sumLabelsLayer"),component:manager}));!manager.getChildContainer("commonElemGroupLine")&&manager.addChildContainer("commonElemGroupLine",animationManager.setAnimation({el:"group",attr:{name:"manager-common-elem-group"},label:"group",container:parent.getChildContainer("lineVcanvasGroup"),component:manager}));!manager.getChildContainer("commonElemGroup")&&manager.addChildContainer("commonElemGroup",animationManager.setAnimation({el:"group",attr:{name:"manager-common-elem-group"},label:"group",container:parent.getChildContainer("areaVcanvasGroup"),component:manager}));!manager.getChildContainer("anchorGroup")&&manager.addChildContainer("anchorGroup",animationManager.setAnimation({el:"group",attr:{name:"manager-anchor-group"},label:"group",container:manager.getFromEnv("useLinePlotGroupForAnchorPlacement")?parent.getChildContainer("lineVcanvasGroup"):parent.getChildContainer("areaVcanvasGroup"),component:manager}))};_proto.draw=function draw(){this.createContainer();this.getFirstDataSet();this.drawSumValue()};_proto._setStackPosition=function _setStackPosition(){var manager=this,dataMin=+Infinity,dataMax=-Infinity,oldNumOfColumns=manager.getFromEnv("numOfColumns"),numOfColumns=0,setLink,stackValueArr=[],stackLinkArr=[],skipInfo=manager.getSkippingInfo&&manager.getSkippingInfo()||{},skippingDrawArray=skipInfo.draw||[],skipDrawArrayLenth=skippingDrawArray.length,skippingApplied=skipInfo.skippingApplied,k=0;manager._mapChildren((function(child){if(child.getState("removed")||child.getState("visible")===false){return}child.addToEnv("stackIndex",k++);numOfColumns++;var datum,data=child.getData(),i,j,setValue,stackedValue=0,len=data&&data.length,base=0;if(skippingApplied){len=skipDrawArrayLenth}for(j=0;j<len;j++){i=skippingDrawArray[j]||j;datum=data[i];if(datum&&datum.config&&datum.config.setValue!==UNDEF){if(!stackValueArr[i]){stackValueArr[i]={}}setValue=datum.config.setValue;setLink=datum.config.setLink;stackValueArr[i].positive||(stackValueArr[i].positive=0);stackValueArr[i].negative||(stackValueArr[i].negative=0);if(setValue>=0){base=stackValueArr[i].positive;stackedValue=setValue+base;stackValueArr[i].positive=stackedValue}else if(setValue<0){base=stackValueArr[i].negative;stackedValue=setValue+base;stackValueArr[i].negative=stackedValue}if(setValue!==null){stackValueArr[i].isNotNull=true}stackLinkArr[i]=setLink;dataMax=mathMax(stackedValue,dataMax);dataMin=mathMin(stackedValue,dataMin);datum.config._y=stackedValue;datum.config._b=base}}}));manager.config.setLink=stackLinkArr;manager.config.stackValues=stackValueArr;manager.config.dataMin=dataMin;manager.config.dataMax=dataMax;if(!numOfColumns){manager.setState("visible",false)}else{manager.setState("visible",true)}manager.addToEnv("stackValues",stackValueArr);manager.addToEnv("numOfColumns",numOfColumns);manager.addToEnv("numColDiff",(0,_lib.pluckNumber)(oldNumOfColumns-numOfColumns,0))};_proto.allocatePosition=function allocatePosition(){this._setStackPosition()};_proto._getXpos=function _getXpos(index){var manager=this,shift=manager.getFromEnv("shift")||0,xAxis=manager.getFromEnv("xAxis");return xAxis.getPixel(index)+shift};_proto.drawSumValue=function drawSumValue(start,end){if(start===void 0){start=0}var manager=this,config=manager.config,yAxis=manager.getFromEnv("yAxis"),paper=manager.getFromEnv("paper"),animationManager=manager.getFromEnv("animationManager"),chart=manager.getFromEnv("chart"),isBar=chart.isBar,SmartLabel=manager.getFromEnv("smartLabel"),chartConfig=chart.config,canvasRight=chartConfig.canvasRight,stack100percent=(0,_lib.pluckNumber)(chartConfig.stack100percent),rotateValues=chartConfig.rotatevalues?270:0,stackValues=config.stackValues,setLink=config.setLink,range=end||stackValues&&stackValues.length,style=chartConfig.dataLabelStyle,i,xPos,yPos,bgColor,bdColor,labelDim,sumLabelsLayer=manager.getContainer("sumLabelsLayer"),sumLabels=manager.getGraphicalElement("sumLabels"),sumLabel,attrs,positive,negative,offsetY,displayValue,sumValue,prevLen,currLen,label;if(manager.config.showSum){sumLabelsLayer.css(style);SmartLabel.setStyle(style);prevLen=sumLabels&&sumLabels.length;currLen=stackValues.length;if(prevLen>currLen){while(prevLen>=currLen){label=sumLabels[prevLen];prevLen--;if(label){label.hide();manager.removeGraphicalElement(label)}}}for(i=start;i<range;i++){sumLabel=Array.isArray(sumLabels)&&sumLabels[i];if(!stackValues[i]||!stackValues[i].isNotNull){sumLabel&&sumLabel.hide();continue}positive=stackValues[i].positive;negative=stackValues[i].negative;sumValue=positive+negative;offsetY=sumValue<0?negative:positive;displayValue=yAxis.dataLabels(sumValue);if(displayValue){bgColor=style.backgroundColor;bdColor=style.borderColor;labelDim=SmartLabel.getOriSize(displayValue);if(isBar){yPos=manager._getXpos(i);xPos=yAxis.getPixel(stack100percent?100:offsetY);if(!stack100percent){xPos-=xPos+labelDim.width>canvasRight?xPos+labelDim.width-canvasRight:0}else{xPos+=labelDim.width/2}}else{xPos=manager._getXpos(i);yPos=yAxis.getPixel(stack100percent?100:offsetY)}attrs=manager.getSumValuePosition(labelDim,{stack100percent:stack100percent,rotateValues:rotateValues,xPos:xPos,yPos:yPos,offsetY:offsetY,index:i});attrs.text=displayValue;attrs.cursor=setLink[i]&&manager.config.sumInside===1?_lib.POINTER:"";attrs.fill=style.color;attrs["text-bound"]=[bgColor,bdColor,style.borderThickness,style.borderPadding,style.borderRadius,style.borderDash];attrs["line-height"]=style.lineHeight;attrs.visibility=visibleStr;attrs.transform=paper.getSuggestiveRotation(rotateValues,attrs.x,attrs.y);if(attrs["text-anchor"]){delete attrs["text-bound"]}sumLabelsLayer&&sumLabelsLayer.show();sumLabel=animationManager.setAnimation({el:sumLabel||"text",attr:attrs,label:"text",container:sumLabelsLayer,component:manager});sumLabel.show();sumLabel.outlineText(config.showTextOutline,attrs.fill);if(!(Array.isArray(sumLabels)&&sumLabels[i])){manager.addGraphicalElement("sumLabels",sumLabel,true)}}}}else{sumLabelsLayer.hide()}};_proto.getSumValuePosition=function getSumValuePosition(labelDim,labelConfig){var manager=this,chart=manager.getFromEnv("chart"),config=chart.config,xAxis=manager.getFromEnv("xAxis"),scrollbar=chart.getChildren("scrollBar")&&chart.getChildren("scrollBar")[0],canvasBottom=config.canvasBottom,canvasTop=config.canvasTop,is3D=chart.config.is3D,isBar=chart.isBar,stack100percent=labelConfig.stack100percent,gutter=2,yDepth=config.yDepth,xDepth=config.xDepth,origTextHeight,origTextWidth,outsideColSpace,yPos=labelConfig.yPos,textHeight,textWidth,xPos=labelConfig.xPos,labelHeight,labelWidth,canvasBorderThickness=manager.getFromEnv("canvasConfig").canvasBorderWidth,offsetY=labelConfig.offsetY,rotateValues=labelConfig.rotateValues;if(rotateValues){labelHeight=labelDim.width;labelWidth=labelDim.height}else{labelHeight=labelDim.height;labelWidth=labelDim.width}textHeight=origTextHeight=labelHeight;textHeight=textHeight/2+gutter;textWidth=origTextWidth=labelWidth;textWidth=textWidth/2+gutter;if(!stack100percent){if(offsetY>=0){if(isBar){outsideColSpace=config.canvasLeft+config.canvasWidth-xPos;if(outsideColSpace<origTextWidth){xPos=xPos-textWidth+outsideColSpace;manager.config.sumInside=1}else{xPos=xPos+textWidth}if(is3D){yPos+=yDepth/2}}else{outsideColSpace=yPos-canvasTop;if(outsideColSpace<origTextHeight){manager.config.sumInside=1;yPos=yPos+textHeight-outsideColSpace}else{yPos-=!isBar?textHeight:0;xPos+=isBar?gutter:0;if(manager.getFromEnv("useImprovedLabelPlacement")){yPos=manager._adjustSumValuePosition(labelConfig.index,true,yPos,textHeight);if(yPos-textHeight<canvasTop){yPos=canvasTop+textHeight}}}}}if(offsetY<0){if(isBar){outsideColSpace=xPos-config.canvasLeft;if(outsideColSpace<origTextWidth){xPos=xPos+textWidth+gutter-outsideColSpace}else{xPos=xPos-textWidth-gutter}}else{outsideColSpace=canvasBottom-yPos;if(outsideColSpace<origTextHeight){yPos-=textHeight}else{yPos+=textHeight;if(manager.getFromEnv("useImprovedLabelPlacement")){yPos=manager._adjustSumValuePosition(labelConfig.index,false,yPos,textHeight);if(yPos+textHeight>canvasBottom){yPos=canvasBottom-textHeight}}}}if(is3D){xPos-=xDepth;yPos+=yDepth}}}else{if(canvasTop<=origTextHeight){yPos=textHeight}else{var isAxisOnOppositeSide=xAxis.getAxisConfig("isOpposit"),axisLineSpace=is3D?0:isAxisOnOppositeSide?xAxis.getAxisConfig("axisLineThickness"):0,isScrollOnOpposieSide=scrollbar&&scrollbar.config.isOpposite,scrollSpace=chart.isScrollEnabled()&&isScrollOnOpposieSide?chart.config.shift:0;yPos=isBar?labelConfig.yPos:canvasTop-textHeight-canvasBorderThickness-scrollSpace-axisLineSpace;xPos+=isBar?canvasBorderThickness+axisLineSpace+scrollSpace:0}}return{x:xPos,y:yPos}};_proto.childChanged=function childChanged(updateInfo){if(updateInfo===void 0){updateInfo={}}var manager=this,config=manager.config,parent=manager.getLinkedParent(),range,prevVisiblity=manager.getState("visible"),count=0,changeInfo={},informParent;manager._mapChildren((function(child){if(child.getState("visible")){count++}}));manager.setState("visible",!!count);prevVisiblity!==!!count&&(informParent=true);if(updateInfo.dataLimitChanged!==false){range=manager.getDataLimits();if(range.min!==config.range.min||range.max!==config.range.max){config.range.min=range.min;config.range.max=range.max;changeInfo.dataLimitChanged=true;informParent=true}}if(informParent){parent.childChanged&&parent.childChanged(changeInfo)}else{manager.asyncDraw()}};_proto.getAxisValuePadding=function getAxisValuePadding(){var paddingObj={},axisPaddingLeft=-Infinity,axisPaddingRight=-Infinity;this._mapChildren((function(child){if(child.getState("removed")){return}paddingObj=child.getAxisValuePadding&&child.getAxisValuePadding()||{};axisPaddingLeft=Math.max(axisPaddingLeft,paddingObj.left||-Infinity);axisPaddingRight=Math.max(axisPaddingRight,paddingObj.right||-Infinity)}));if(axisPaddingLeft===-Infinity){axisPaddingLeft=0}if(axisPaddingRight===-Infinity){axisPaddingRight=0}if(!this.config.padding){this.config.padding={};this.config.padding.left=axisPaddingLeft;this.config.padding.right=axisPaddingRight}return{left:axisPaddingLeft,right:axisPaddingRight}};_proto.getDataLimits=function getDataLimits(allVisible){this._setStackPosition();if(!this.config.range){this.config.range||(this.config.range={});this.config.range.min=this.config.dataMin;this.config.range.max=this.config.dataMax}return allVisible?this._getStackLimit():{max:this.config.dataMax,min:this.config.dataMin}};_proto._getStackLimit=function _getStackLimit(){var manager=this,dataMin=+Infinity,dataMax=-Infinity,stackValueArr=[],skipInfo=manager.getSkippingInfo&&manager.getSkippingInfo()||{},skippingDrawArray=skipInfo.draw||[],skipDrawArrayLenth=skippingDrawArray.length,skippingApplied=skipInfo.skippingApplied;manager._mapChildren((function(child){if(child.getState("removed")){return}var datum,data=child.getData(),i,j,setValue,stackedValue=0,len=data&&data.length,base=0;if(skippingApplied){len=skipDrawArrayLenth}for(j=0;j<len;j++){i=skippingDrawArray[j]||j;datum=data[i];if(datum&&datum.config&&datum.config.setValue!==UNDEF&&datum.config.setValue!==null){if(!stackValueArr[i]){stackValueArr[i]={}}setValue=datum.config.setValue;stackValueArr[i].positive||(stackValueArr[i].positive=0);stackValueArr[i].negative||(stackValueArr[i].negative=0);if(setValue>0){base=stackValueArr[i].positive;stackedValue=setValue+base;stackValueArr[i].positive=stackedValue}else if(setValue<0){base=stackValueArr[i].negative;stackedValue=setValue+base;stackValueArr[i].negative=stackedValue}dataMax=mathMax(stackedValue,dataMax);dataMin=mathMin(stackedValue,dataMin)}}}));return{max:dataMax,min:dataMin}};_proto.isVisible=function isVisible(){return!this.isNotVisible};_proto.getMaxSumValueSpace=function getMaxSumValueSpace(){var manager=this,stackSumValues=manager.config.stackValues,chart=manager.getFromEnv("chart"),i,dim={},len=stackSumValues&&stackSumValues.length,numberFormatter=manager.getFromEnv("number-formatter"),formattedValue,width,height,maxHeight=0,maxWidth=0,sumValue,SmartLabel=manager.getFromEnv("smartLabel"),dataLabelStyle=chart.config.dataLabelStyle;SmartLabel.useEllipsesOnOverflow(chart.config.useEllipsesWhenOverflow);SmartLabel.setStyle(dataLabelStyle);for(i=0;i<len;i++){if(stackSumValues[i]){sumValue=stackSumValues[i].positive+stackSumValues[i].negative;formattedValue=numberFormatter.dataLabels(sumValue);dim=SmartLabel.getOriSize(formattedValue);width=dim.width;height=dim.height;maxWidth=mathMax(maxWidth,width);maxHeight=mathMax(maxHeight,height)}}return{maxWidth:maxWidth,maxHeight:maxHeight}};_proto.getCanvasPadding=function getCanvasPadding(){var manager=this,dim,key,skippingInfo=manager.getSkippingInfo(),skippingApplied=skippingInfo.skippingApplied,drawArr=skippingInfo.draw,stackValues=manager.config.stackValues,firstData=stackValues[skippingApplied?drawArr[0]:0],lastData=stackValues[skippingApplied?drawArr[drawArr.length-1]:stackValues.length-1],label,xAxis=manager.getFromEnv("xAxis"),yAxis=manager.getFromEnv("yAxis"),chartConf=manager.getFromEnv("chartConfig"),smartLabel=manager.getFromEnv("smartLabel"),labelDim,labelWidth,padding=xAxis.getValuePadding(),paddingPixel,labelSpace=0,startPixel=xAxis.getPixel(0),rotateValues=chartConf.rotatevalues,returnDimension={paddingLeft:0,paddingRight:0,paddingTop:0,paddingBottom:0};manager._setStackPosition();manager._mapChildren((function(child){dim=child.getCanvasPadding&&child.getCanvasPadding()||{};for(key in dim){if(dim.hasOwnProperty(key)){returnDimension[key]=Math.max(dim[key],returnDimension[key])}}}));if(manager.config.showSum){if(firstData){label=yAxis.dataLabels(firstData.positive+firstData.negative);smartLabel.useEllipsesOnOverflow(chartConf.useEllipsesWhenOverflow);smartLabel.setStyle(chartConf.dataLabelStyle);labelDim=smartLabel.getOriSize(label);labelWidth=rotateValues?labelDim.height:labelDim.width;if(firstData.isNotNull){paddingPixel=xAxis.getPixel(padding.left);labelSpace=(labelWidth||0)/2-(paddingPixel-startPixel);if(labelSpace<0){labelSpace=0}}returnDimension.paddingLeft=mathMax(returnDimension.paddingLeft,labelSpace)}labelSpace=0;if(lastData){label=yAxis.dataLabels(lastData.positive+lastData.negative);smartLabel.setStyle(chartConf.dataLabelStyle);labelDim=smartLabel.getOriSize(label);labelWidth=rotateValues?labelDim.height:labelDim.width;if(lastData.isNotNull){paddingPixel=xAxis.getPixel(padding.right);labelSpace=(labelWidth||0)/2-(paddingPixel-startPixel);if(labelSpace<0){labelSpace=0}}returnDimension.paddingRight=mathMax(returnDimension.paddingRight,labelSpace)}}return returnDimension};_proto.getFirstDataSet=function getFirstDataSet(){var manager=this,datasets=manager.getChildren("dataset");if(datasets){for(var i=0;i<datasets.length;i++){var dataset=datasets[i];if(dataset.getState("visible")&&!dataset.getState("removed")){manager.config.firstDataSetIndex=i;break}else{manager.config.firstDataSetIndex=null}}}};_proto._adjustSumValuePosition=function _adjustSumValuePosition(index,isPositive,yPos,height){var datasets=[],y=yPos,key,children=this.getChildren(),child;for(key in children){if(children.hasOwnProperty(key)){child=children[key];datasets=datasets.concat(child.filter((function(d){return d.getType()==="dataset"})))}}datasets.forEach((function(set){var data=set.components.data[index],dataConf=data&&data.config,labelDim=dataConf&&dataConf._state,labelAttr=dataConf&&dataConf.props&&dataConf.props.label&&dataConf.props.label.attr;if(set.getState(REMOVED)||!set.getState(visibleStr)||!labelAttr||!labelDim){return}if(isOverlap({y:labelAttr.y,height:labelDim.labelHeight},{y:y,height:height})){y=isPositive?labelAttr.y-labelDim.labelHeight*midPointRatio-height*midPointRatio:labelAttr.y+labelDim.labelHeight*midPointRatio+height*midPointRatio}}));return y};return CartesianStackgroup}(_componentInterface.ComponentInterface);var _default=exports.default=CartesianStackgroup;