quoslibero
Version:
FusionCharts JavaScript charting framework
1 lines • 3.67 kB
JavaScript
import{SmartRenderer}from'../../../../fc-core/src/component-interface';import{convertColor}from'../../../../fc-core/src/lib/lib-graphics';import{pluckNumber,defined}from'../../../../fc-core/src/lib';import isValidNumber from'../../../../fc-utils/src/type/is-valid-number';import{createDivString}from'./tooltip-and-hover';function getFirstDefinedColor(a){let b,c;for(b=0,c=a.length;b<c;b++)if(a[b]!==void 0&&'none'!==a[b])return convertColor(a[b])}const isPlotStackable=a=>'column'===a,xShift=5;let previousIndexIdMap={};class CrosslineManager extends SmartRenderer{constructor(){super();let a,b,c,d,f,g,h,i,j,e,k,l=this;l.canvases=[],l._handler=function(m){i=l.config.multiCanvasTooltip,a=m.sender.getLinkedParent(),j=a.config.xConfigs[0].scale,k=a.isWithinCanvas(m.data.chartX,m.data.chartY);let n,o,p,q,r,s,t,u,v,w,x,y,z,A,B=m.data.hoveredInfo||{},C=l.getFromEnv('tooltipStyle');k&&B.pointObj?(A=l.getFromEnv('chart').config.focusAxesX[0].scale.getDomain(),t=B.pointObj.startDate,u=B.pointObj.endDate,c=j.getDomainValue(j.getRangeValue(t,u)),(+c<+A[0]||+c>+A[1]||+t==+u)&&(c=void 0)):c=void 0,l.canvases.forEach(d=>{if(f=d===a,h=d.getTranslation(),x=void 0,n=d.getChildren('verticalCrossLine')[0],n.setData({value:c,showMarker:f,dateRange:{startDate:t,endDate:u}},!0),p=d.getChildren('dataset'),(!isPlotStackable(p[0].getName())||1===p.length)&&B.component&&('dataset'===B.component.getType()||'dataMarker'===B.component.getType())?p.forEach(a=>{w=k&&a._getHoveredBin(),B.hovered&&f?B.component===a?a.setHoverInEffect(w,!0):'continuous'===a.getName()?a.setHoverInEffect(w,!1,!0):a.setHoverOutEffect(w):a.setHoverInEffect(w,!1),e=previousIndexIdMap[a.getId()],defined(e)&&e!==w&&a.setHoverOutEffect(e),previousIndexIdMap[a.getId()]=w}):!k&&p.forEach(a=>{a.setHoverOutEffect(previousIndexIdMap[a.getId()])}),i&&!f&&(q=d.getChildren('tooltipHover')[0],r=q.config,r.showTooltip))if(g='',b=d.getFromEnv('toolTipController'),!(k&&B.component&&'dataset'===B.component.getType()))b.hide(r.currentToolTip);else if(p.forEach((a,b)=>{a._getHoveredPlot&&a._getHoveredPlot(m.data.chartX,m.data.chartY),w=a._getHoveredBin(),'visible'===a.config.visibility&&a.config.dataInfo[w]&&(x=a.config.dataInfo[w],g+=a._getTooltext(!1,!1,w),s=b)}),x){w=p[s]._getHoveredBin();const{header:a,body:c}=p[s]._getDateForToolText(w);g=createDivString(C.headerStyleString,a)+createDivString(C.bodyStyleString,c+g),''===g?b.hide(r.currentToolTip):r.currentToolTip=b.drawAt(x.x+(x.width||0)/2+xShift+h.x,(x.colY||x.y)+h.y,g,r.currentToolTip,d)}else b.hide(r.currentToolTip)}),o=a.getChildren('horizontalCrossLine')[0],B.hovered&&'dataset'===B.component.getType()&&k?(v=isValidNumber(B.pointObj.yBaseValue)?0<=B.pointObj.yBaseValue?B.pointObj.value:B.pointObj.yBaseValue:B.pointObj.value,d=B.component.config,a.config.yConfigs.forEach(a=>{a.scale===B.component.config.scaleY&&(y=a.scale,z=a.align)}),'hidden'!==d.visibility&&o.setData({value:v,scale:y,yAxisAlignment:z,showMarker:!0,text:B.pointObj.value,suffix:d.suffix,prefix:d.prefix,formatterFn:d.formatterFn,markerFill:getFirstDefinedColor([d.style&&d.style.fill,d.plotStyle&&d.plotStyle.fill,d.plotStyle&&d.plotStyle.stroke])},!0)):o.setData({value:void 0},!0)}}__setDefaultConfig(){super.__setDefaultConfig(),this.config.defaultFormat='%A, %b %d, %Y',this.canvases=[]}configure(){super.configure();let a,b,c,d=this,e=d.getLinkedParent(),f=e.config.focusPanels.length;for(d.config.multiCanvasTooltip=pluckNumber(d.getFromEnv('chart-attrib').multicanvastooltip,1),c=0;c<f;c++)b=e.getChildren(`canvas_${c}`)[0],d.canvases.push(b),a=b.getFromEnv('mouseTracker'),d.addExtEventListener('canvasHovered',d._handler,a)}}export default CrosslineManager;