UNPKG

@fusioncharts/core

Version:

JavaScript Data Visualisation Library

1 lines 9.94 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("../component-interface");var _number=_interopRequireDefault(require("@fusioncharts/utils/src/scale-utils/interpolators/number"));var _diff=_interopRequireDefault(require("@fusioncharts/utils/src/scale-utils/array/diff"));var _cartesian=require("../axis/cartesian");var _cartesianAxisRef=_interopRequireDefault(require("./cartesian-axis-ref.animation"));var _dependencyManager=require("../dependency-manager");var isValid=function isValid(val){return!typeof val==="undefined"||val!==null},BUTT_STR="butt";var UNDEF;(0,_dependencyManager.addDep)({name:"cartesianAxisRefAnimation",type:"animationRule",extension:_cartesianAxisRef.default});var AxisRefVisual=function(_ComponentInterface){function AxisRefVisual(){var _this;_this=_ComponentInterface.call(this)||this;_this.config.map={};_this.config.explicitDrawItems={};return _this}(0,_inheritsLoose2.default)(AxisRefVisual,_ComponentInterface);var _proto=AxisRefVisual.prototype;_proto.getType=function getType(){return"axisRefVisuals"};_proto.getName=function getName(){return"axisRefVisualsCartesian"};_proto.draw=function draw(){var drawingInfo=this.getDrawingInfo(),eachCompInfo,explicitDrawItems=this.getexplicitDrawItems(),axisRefConf=this.config,oldMap=axisRefConf.map,map={},i,type,key,axis,elementIdArr,eachDrawInfo,parent=this.getLinkedParent(),axes=parent.getAxes(),axesIdArr=[],baseContainer=parent.getChildContainer("axisReferenceVisualsFloor"),bottomContainer=parent.getChildContainer("axisReferenceVisualsBottom"),middleContainer=parent.getChildContainer("axisReferenceVisualsMiddle"),topContainer=parent.getChildContainer("axisReferenceVisualsTop"),ceilContainer=parent.getChildContainer("axisReferenceVisualsCeil");parent.config.trendlines=[];parent.config.vtrendlines=[];for(i=0;i<axes.length;++i){axesIdArr.push(axes[i].axis.getId())}axisRefConf.containers=[baseContainer,bottomContainer,middleContainer,topContainer,ceilContainer];for(key in drawingInfo){if(drawingInfo.hasOwnProperty(key)){axis=this.getLinkedItem(key);if(axesIdArr.indexOf(axis.getId())>=0){elementIdArr=map[key];if(!elementIdArr){elementIdArr=map[key]=[]}eachCompInfo=drawingInfo[key];for(i=0;i<eachCompInfo.length;++i){eachDrawInfo=eachCompInfo[i];type=eachDrawInfo.type;if(type==="band"){elementIdArr.push.apply(elementIdArr,this.createBand(eachDrawInfo,axis))}else if(type==="line"){elementIdArr.push.apply(elementIdArr,this.createLine(eachDrawInfo,axis))}}}}}if(axisRefConf.isSmartDrawing){for(key in oldMap){if(oldMap.hasOwnProperty(key)&&!explicitDrawItems[key]&&this.getLinkedItem(key)){map[key]=oldMap[key]}}}this.resetexplicitDrawItems();this.removeExtraElements(map)};_proto.getDrawingInfo=function getDrawingInfo(){var drawingInfo={},key,item,explicitDrawItems=this.getexplicitDrawItems(),canvasChanged=this.isCanvasChnaged(),isSmartDrawing=this.config.isSmartDrawing=Object.keys(explicitDrawItems).length&&!canvasChanged,linkItems=isSmartDrawing?explicitDrawItems:this.getLinkedItem();for(key in linkItems){if(linkItems.hasOwnProperty(key)){item=linkItems[key];drawingInfo[key]=item.getReferenceInfo()}}return drawingInfo};_proto.createLine=function createLine(lineInfo,axis){var containersArr=this.config.containers,container=containersArr[lineInfo.layer],axisConf=axis.config,paper=this.getFromEnv("paper"),chartType=this.getFromEnv("chart").getName(),canvas=this.getLinkedParent(),animationManager=this.getFromEnv("animationManager"),toolTipController=this.getFromEnv("toolTipController"),canvasConf=canvas.config,trendLines=canvasConf.trendlines,isVertical=axisConf.isVertical,canvasLeft=canvasConf.canvasLeft,canvasTop=canvasConf.canvasTop,canvasBottom=canvasTop+canvasConf.canvasHeight,canvasRight=canvasLeft+canvasConf.canvasWidth,interpolatorLeftRight=(0,_number.default)(canvasLeft,canvasRight),interpolatorTopBottom=(0,_number.default)(canvasTop,canvasBottom),scale=axis.getScale(),start=scale.getRangeValue(lineInfo.from),end=lineInfo.to!==UNDEF&&scale.getRangeValue(lineInfo.to)||start,path=isVertical?["M",canvasLeft,start,"L",canvasRight,end]:["M",start,canvasBottom,"L",end,canvasTop],lineAttr=lineInfo.attr,text=lineInfo.text,textAttr=text&&text.attr,labelPosition=text&&text.labelPosition||0,compId=axis.getId(),eleId=lineInfo.id||lineInfo.from,lineEleId=compId+"_"+eleId,textEleId,element=this.getGraphicalElement(lineEleId),textElem,key,handlers=lineInfo.handlers,value={start:lineInfo.from,end:lineInfo.to};lineAttr.path=(0,_cartesian.getCrispPath)(path,isValid(lineAttr["stroke-width"])?lineAttr["stroke-width"]:1).path.toString();if(/trend/.test(lineInfo.id)){trendLines.push({x1:path[1],y1:path[2],x2:path[4],y2:path[5],tooltext:lineInfo.toolText,tolerance:lineAttr["stroke-width"]<5?2.5:lineAttr["stroke-width"]/2})}lineAttr["stroke-linecap"]=BUTT_STR;element=this.addGraphicalElement(lineEleId,animationManager.setAnimation({container:container,el:element||"path",attr:lineAttr,component:this,axis:axis,data:{value:value,path:path},label:"path"}));element.data("data",value);if(text){textEleId=compId+"_"+eleId+textAttr.text;textElem=this.getGraphicalElement(textEleId);if(isVertical){textAttr.x=interpolatorLeftRight(labelPosition);textAttr.y=start}else{textAttr.x=start;textAttr.y=interpolatorTopBottom(labelPosition)}textAttr.text=text.label;textAttr.transform=paper.getSuggestiveRotation(text.labelRotation,textAttr.x,textAttr.y);textElem=this.addGraphicalElement(textEleId,animationManager.setAnimation({container:containersArr[text.layer],el:textElem||"text",attr:textAttr,component:this,axis:axis,data:{value:lineInfo.from},label:"text",css:text.css}));textElem.data("data",lineInfo.from)}if(!/zoomscatter/i.test(chartType)){if(lineInfo.toolText){toolTipController.enableToolTip(element,lineInfo.toolText)}else{toolTipController.disableToolTip(element)}}for(key in handlers){if(handlers.hasOwnProperty(key)){element.on(key,handlers[key].bind(axis));textElem&&textElem.on(key,handlers[key].bind(axis))}}return text?[lineEleId,textEleId]:[lineEleId]};_proto.createBand=function createBand(bandInfo,axis){var container=this.config.containers[bandInfo.layer],axisConf=axis.config,animationManager=this.getFromEnv("animationManager"),toolTipController=this.getFromEnv("toolTipController"),canvas=this.getLinkedParent(),chartType=this.getFromEnv("chart").getName(),canvasConf=canvas.config,isVertical=axisConf.isVertical,canvasLeft=canvasConf.canvasLeft,canvasTop=canvasConf.canvasTop,canvasBottom=canvasTop+canvasConf.canvasHeight,canvasRight=canvasLeft+canvasConf.canvasWidth,scale=axis.getScale(),startVal=bandInfo.from,endVal=bandInfo.to!==UNDEF?bandInfo.to:startVal,startPx,endPx,compId=axis.getId(),eleId,bandElemId,element,key,elemAttr=bandInfo.attr,difference,handlers=bandInfo.handlers;if(startVal==="canvasStart"){startPx=isVertical?canvasTop:canvasLeft}else{startPx=scale.getRangeValue(startVal)}if(endVal==="canvasEnd"){endPx=isVertical?canvasBottom:canvasRight}else{endPx=scale.getRangeValue(endVal)}difference=Math.abs(startPx-endPx);if(isVertical){elemAttr.x=canvasLeft;elemAttr.y=Math.min(startPx,endPx);elemAttr.width=canvasRight-canvasLeft;elemAttr.height=difference}else{elemAttr.x=Math.min(startPx,endPx);elemAttr.y=canvasTop;elemAttr.width=difference;elemAttr.height=canvasBottom-canvasTop}eleId=bandInfo.id||elemAttr.x+"_"+elemAttr.y;bandElemId=compId+"_"+eleId;element=this.getGraphicalElement(bandElemId);if(/trend/.test(bandInfo.id)){canvas.config.vtrendlines.push({x1:elemAttr.x,y1:elemAttr.y,x2:elemAttr.x+elemAttr.width,y2:elemAttr.y+elemAttr.height,tooltext:bandInfo.toolText,tolerance:elemAttr["stroke-width"]<5?2.5:elemAttr["stroke-width"]/2,isTrendZone:1})}element=this.addGraphicalElement(bandElemId,animationManager.setAnimation({container:container,el:element||"rect",attr:elemAttr,component:this,label:"rect"}));if(!/zoomscatter/i.test(chartType)){if(bandInfo.toolText){toolTipController.enableToolTip(element,bandInfo.toolText)}else{toolTipController.disableToolTip(element)}}for(key in handlers){if(handlers.hasOwnProperty(key)){element.on(key,handlers[key].bind(axis))}}return[bandElemId]};_proto.removeExtraElements=function removeExtraElements(newMap){var oldMap=this.config.map,key,idArr,i,len,removingElement,removeElemId;for(key in oldMap){if(!newMap[key]){idArr=oldMap[key];len=idArr.length;for(i=0;i<len;++i){removingElement=this.getGraphicalElement(idArr[i]);removingElement&&this.removeGraphicalElement(removingElement)}}else{removeElemId=(0,_diff.default)(oldMap[key],newMap[key]);len=removeElemId.length;for(i=0;i<len;++i){removingElement=this.getGraphicalElement(removeElemId[i]);removingElement&&this.removeGraphicalElement(removingElement)}}}this.config.map=newMap};_proto.setLinkedItem=function setLinkedItem(itemName,item){_ComponentInterface.prototype.setLinkedItem.call(this,itemName,item);var axisRefComp=this,sender;if(item.getType()==="axis"){axisRefComp.addExtEventListener("predraw",(function(event){sender=event.sender;if(sender.getState("removed")){axisRefComp.removeLinkedItem(sender.getId());axisRefComp.asyncDraw()}}),item)}};_proto.addexplicitDrawItems=function addexplicitDrawItems(key,item){this.config.explicitDrawItems[key]=item};_proto.getexplicitDrawItems=function getexplicitDrawItems(){return this.config.explicitDrawItems};_proto.resetexplicitDrawItems=function resetexplicitDrawItems(){this.config.explicitDrawItems={}};_proto.isCanvasChnaged=function isCanvasChnaged(){var canvasDim=this.getLinkedParent().getEffectiveDimensions(),axisRefConf=this.config,isCanvasChnaged;isCanvasChnaged=JSON.stringify(canvasDim)!==JSON.stringify(axisRefConf.canvasDim);axisRefConf.canvasDim=canvasDim;return isCanvasChnaged};return AxisRefVisual}(_componentInterface.ComponentInterface);var _default=exports.default=AxisRefVisual;