UNPKG

quoslibero

Version:

FusionCharts JavaScript charting framework

1 lines 12.3 kB
import ScatterDataset from'../scatter';import{TOUCH_THRESHOLD_PIXELS,CLICK_THRESHOLD_PIXELS,pluck,pluckNumber,toRaphaelColor,hasTouch,getValidValue,preDefStr,parseUnsafeString,parseTooltext,getFirstValue,getLightColor,getPointColor,getFirstColor}from'../../../../fc-core/src/lib';import KdTree from'../_internal/kdtree';import{addDep}from'../../../../fc-core/src/dependency-manager';import bubbleAnimation from'./index.animation';var UNDEF,HTP=hasTouch?TOUCH_THRESHOLD_PIXELS:CLICK_THRESHOLD_PIXELS,EVENTARGS='eventArgs',SETROLLOVERATTR=preDefStr.setRolloverAttrStr,SETROLLOUTATTR=preDefStr.setRolloutAttrStr,ROLLOUT='DataPlotRollOut',math=Math,mathRound=math.round,mathMin=math.min,mathMax=math.max;addDep({name:'bubbleAnimation',type:'animationRule',extension:bubbleAnimation});class BubbleDataset extends ScatterDataset{getType(){return'dataset'}getName(){return'bubble'}configureAttributes(a){if(!a)return!1;this.trimData(a),this.config.JSONData=a;var b,c,d,e,f,g,h,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A=this,B=A.getFromEnv('chart'),C=B.getFromEnv('dataSource'),D=C.chart,E=A.config.JSONData,F=A.config,G=E.data||[],H=A.getFromEnv('color-manager'),I=A.index,J=A.getFromEnv('number-formatter'),K=pluck(parseUnsafeString(D.tooltipsepchar),', '),L=-Infinity,M=+Infinity,N=L,O=M,P=L,Q=M,R=L,S=M;for(F.seriesname=parseUnsafeString(E.seriesname),F.includeinlegend=pluckNumber(E.includeinlegend,F.seriesname?1:0),F.anchorBgColor=getFirstColor(pluck(E.color,E.plotfillcolor,D.plotfillcolor,H.getPlotColor(I))),F.showPlotBorder=pluckNumber(E.showplotborder,D.showplotborder,1),F.anchorBorderThickness=F.showPlotBorder?pluckNumber(E.plotborderthickness,D.plotborderthickness,1):0,F.anchorBorderColor=getFirstColor(pluck(E.plotbordercolor,D.plotbordercolor,'666666')),F.plotFillAlpha=pluck(E.plotfillalpha,E.bubblefillalpha,D.plotfillalpha,'100'),F.plotBorderAlpha=pluck(E.plotborderalpha,D.plotborderalpha,'95'),F.negativeColor=pluck(D.negativecolor,'FF0000'),F.is3d=0!==pluckNumber(D.use3dlighting,E.is3d,D.is3d),F.bubbleScale=pluckNumber(D.bubblescale,1),F.minBubbleRadius=pluckNumber(D.minbubbleradius),F.clipBubbles=pluckNumber(D.clipbubbles,1),F.enableAnimation=j=pluckNumber(D.animation,D.defaultanimation,1),F.animation=!!j&&{duration:1e3*pluckNumber(D.animationduration,1)},F.showTooltip=pluckNumber(D.showtooltip,1),F.transposeAnimation=pluckNumber(D.transposeanimation,j),F.transposeAnimDuration=1e3*pluckNumber(D.transposeanimduration,.2),F.seriesNameInTooltip=pluckNumber(D.seriesnameintooltip,1),F.rotateValues=pluckNumber(D.rotatevalues)?270:0,F.showHoverEffect=pluckNumber(D.plothovereffect,D.showhovereffect,UNDEF),F.showValues=F.showvalues=pluckNumber(E.showvalues,D.showvalues,0),e=A.components.data=A.components.data||(A.components.data=[]),b=G.length,F.fillColor=F.is3d?toRaphaelColor(getPointColor(F.anchorBgColor,F.plotFillAlpha)):toRaphaelColor({color:F.anchorBgColor,alpha:F.plotFillAlpha}),F.strokeColor=toRaphaelColor({color:F.anchorBorderColor,alpha:F.plotFillAlpha}),c=0;c<b;c++)if(k=G[c],d=e[c]=e[c]||(e[c]={}),d.graphics||(d.graphics={}),l=d.config={},l.x=J.getCleanValue(k.x),l.y=J.getCleanValue(k.y),l.z=J.getCleanValue(k.z,!0),l.setValue={x:l.x,y:l.y,z:l.z},l._x=l.x,l._y=l.y,l._z=l.z,l.showValue=pluckNumber(k.showvalue,F.showValues),l.anchorProps={},r=l.label=l.x,l.setLink=getValidValue(k.link),F.max=R=mathMax(R,l.z||0),F.min=S=mathMin(S,l.z||0),l.is3d=0!==pluckNumber(k.is3d,F.is3d),N=mathMax(N,l.x),O=mathMin(O,l.x),P=mathMax(P,l.y),Q=mathMin(Q,l.y),f=l.color=getFirstColor(pluck(k.color,0>k.z?F.negativeColor:F.anchorBgColor)),g=l.alpha=pluck(k.alpha,F.plotFillAlpha),l.colorObj=w=l.is3d?getPointColor(f,g):{color:f,alpha:g},l.setDisplayValue=s=parseUnsafeString(pluck(k.displayvalue,k.name,k.label)),h=l.formatedVal=null===l.y?l.y:J.dataLabels(l.y),l.displayValue=pluck(s,l.formatedVal),l.setTooltext=getValidValue(parseUnsafeString(pluck(k.tooltext,E.plottooltext,D.plottooltext))),F.showTooltip?null===h?m=!1:l.setTooltext===UNDEF?(F.seriesNameInTooltip&&(o=getFirstValue(E&&E.seriesname)),m=o?o+K:'',m+=r?J.xAxis(r)+K:'',m+=h,m+=k.z?K+J.formatValue(k.z):''):(q=[4,5,6,7,8,9,10,11,12,13,118],p={yDataValue:h,xDataValue:J.xAxis(r),yaxisName:parseUnsafeString(D.yaxisname),xaxisName:parseUnsafeString(D.xaxisname),zDataValue:J.dataLabels(l.z)},m=parseTooltext(l.setTooltext,q,p,k,D,E)):m=!1,l.toolText=m,n=l.hoverEffects={},0!==F.showHoverEffect){if(y=n.enabled=pluck(k.hoveralpha,E.hoveralpha,D.bubblehoveralpha,k.hovercolor,E.hovercolor,E.bubblehovercolor,D.bubblehovercolor,k.borderhovercolor,E.borderhovercolor,D.plotborderhovercolor,k.borderhoveralpha,E.borderhoveralpha,D.plotborderhoveralpha,k.hoverscale,E.bubblehoverscale,D.bubblehoverscale,k.borderhovercolor,E.borderhovercolor,D.plotborderhovercolor,k.borderhoverthickness,E.borderhoverthickness,D.plotborderhoverthickness,k.negativehovercolor,E.negativeColor,D.negativecolor,k.is3donhover,D.plotfillhovercolor,E.is3donhover,D.is3donhover,UNDEF)!==UNDEF,n.negativeColor=pluck(k.negativehovercolor,E.negativehovercolor,D.negativehovercolor,F.negativeColor),n.is3d=pluckNumber(k.is3donhover,E.is3donhover,D.is3donhover,l.is3d),n.color=pluck(k.hovercolor,E.hovercolor,E.bubblehovercolor,D.plotfillhovercolor,D.bubblehovercolor,l.is3d?w.FCcolor.color:f),n.color=n.negativeColor&&0>k.z?n.negativeColor:n.color,n.scale=pluck(k.hoverscale,E.hoverscale,E.bubblehoverscale,D.bubblehoverscale,1),n.color=getFirstColor(n.color),n.alpha=pluck(k.hoveralpha,E.hoveralpha,D.plotfillhoveralpha,D.bubblehoveralpha,g),n.borderColor=pluck(k.borderhovercolor,E.borderhovercolor,D.plotborderhovercolor,F.anchorBorderColor),n.borderAlpha=pluck(k.borderhoveralpha,E.borderhoveralpha,D.plotborderhoveralpha,n.alpha,F.plotBorderAlpha),n.borderThickness=pluckNumber(k.borderhoverthickness,E.borderhoverthickness,D.plotborderhoverthickness,F.anchorBorderThickness),n.color=n.is3d?getPointColor(n.color,n.alpha):{FCcolor:{color:n.color,alpha:n.alpha}},x=y&&F.showHoverEffect?0:F.showHoverEffect,1===x){for(t='string'==typeof n.color,z=t?n.color.split(/\s{0,},\s{0,}/):n.color.FCcolor.color.split(/\s{0,},\s{0,}/),v=z.length,u=0;u<v;u++)z[u]=getLightColor(z[u],70);t?n.color=z.join(','):n.color.FCcolor.color=z.join(',')}!1===y&&(n.enabled=!!F.showHoverEffect)}else n.enabled=!1;F.xMax=N,F.xMin=O,F.yMin=Q,F.yMax=P,A.setState('dirty',!0),A.setState('visible',1===pluckNumber(E.visible,!+E.initiallyhidden,1)),B.config.showLegend&&A._addLegend(),A.setState('dirty',!0)}_getHoveredPlot(a,b){var c=this.config.dataTree.getNeighbour({x:a,y:b},!0,'circle');if(c)return{pointIndex:c.index||c.i,hovered:!0,pointObj:c.data}}_hoverPlotAnchor(a,b,c){var d=this,e=d.getFromEnv('animationManager'),f=a.graphics,g=f.element,h=b===ROLLOUT?g.data(SETROLLOUTATTR):g.data(SETROLLOVERATTR);c&&g&&(e.setAnimationState&&e.setAnimationState(b===ROLLOUT?'mouseOut':'mouseOver'),e.setAnimation({el:g,attr:h,component:d}))}_addLegend(){var a,b,c=this,d=c.getFromEnv('chart'),e=c.config,f=d.getChildren('legend')[0];e.includeinlegend?(b={enabled:e.includeInLegend,anchorSide:1,type:c.type,label:e.seriesname},a=f.getItem(c.config.legendItemId),a?a.configure({style:f.config.itemStyle,hiddenStyle:f.config.itemHiddenStyle,datasetVisible:f.config.datasetVisible,hoverStyle:f.config.itemHoverStyle}):(c.config.legendItemId=f.createItem(c),a=f.getItem(c.config.legendItemId),c.addExtEventListener('fc-click',function(){a.itemClickFn()},a)),a.configure(b),a.setStateCosmetics('default',{symbol:{fill:e.fillColor,rawFillColor:e.anchorBgColor,rawStrokeColor:e.anchorBorderColor,stroke:e.strokeColor}}),c.getState('visible')?a.removeLegendState('hidden'):a.setLegendState('hidden')):c.config.legendItemId&&f.disposeItem(c.config.legendItemId)}getBubbleRadius(a){var b,c=this,d=math.sqrt,e=c.config,f=e.bubbleScale,g=e.minBubbleRadius,h=c.getFromEnv('chartConfig'),i=mathMin(h.canvasHeight,h.canvasWidth)/8,j=this.getLinkedParent().getDataLimitRange(),k=j.zMax,l=d(k),m=d(a);return b=mathRound(m*i/l)*f||0,g&&(b=mathMax(b,g)),b}createCoordinates(){var a,b,c,d,e,f,g,h=this,j=h.components,k=j.data,l=h.getFromEnv('yAxis'),m=l.getAxisBase(),n=l.getPixel(m),o=h.getFromEnv('xAxis'),p=o.config.isVertical,q=k.length,r=j.data;for(d=0;d<q;d++)(a=r[d],b=a&&a.config,a!==UNDEF)&&(c=b._b,e=o.getPixel(b._x),f=l.getPixel(b._y),g=c?l.getPixel(c):n,'bubble'===h.getName()&&(b.r=h.getBubbleRadius(b._z)),p?(b._Px=f,b._Py=e,b._Pby=f,b._Pbx=g):(b._Px=e,b._Py=f,b._Pby=g,b._Pbx=e))}parsePlotAttributes(a,b){var c,d,e,f,g,h,j,k,l,m,n,o,p=this,q=p.config.JSONData,r=p.getFromEnv('chart'),s=r.config,t=p.config,u=b,i=p.getState('visible'),v={},w=t.anchorBorderThickness;f=a.config,h=pluckNumber(f.x,u),j=f.y,k=f.z,l=f.setLink,m=f.displayValue,g=f.toolText,f.finalTooltext=f.toolText,v=f.hoverEffects,null!==j&&(o=f.eventArgs||(f.eventArgs={}),o.index=u,o.link=l,o.value=j,o.y=j,o.x=h,o.z=k,o.displayValue=m,o.toolText=g,o.id=p.userID,o.datasetIndex=p.config.index,o.datasetName=q.seriesname,o.visible=i,d=f._Py,e=f._Px,c=f.r,[].push({x:e,y:d,r:c}),n=f.setRolloutAttr={fill:toRaphaelColor(f.colorObj),"stroke-width":t.anchorBorderThickness,stroke:toRaphaelColor({color:t.anchorBorderColor,alpha:t.plotBorderAlpha}),r:c},!1!==v.enabled&&(f.setRolloverAttr={fill:toRaphaelColor(v.color),"stroke-width":v.borderThickness,stroke:toRaphaelColor({color:v.borderColor,alpha:v.borderAlpha}),r:c*v.scale}),f.props={element:{attr:{cx:e,cy:i?d:s.canvasBottom+c,r:c||0,fill:toRaphaelColor(f.colorObj),"stroke-width":t.anchorBorderThickness,visibility:i,stroke:n.stroke}}},f.trackerConfig||(f.trackerConfig={}),f.trackerConfig.trackerRadius=mathMax(c+(w||0),HTP),a._xPos=e,a._yPos=d)}allocatePosition(){var a,b,c,d,e,f,g,h=this,j=h.components.data,k=[];for(h.createCoordinates(),b=0,c=j.length;b<c;b+=1)a=j[b],h.parsePlotAttributes(a,b),h.parseLabelAttributes(a,b),a&&(f=a.config,d=f._Px,e=f._Py,g=f.r||0,k.push({x:d,y:e,index:b,data:a,r:g}));this.config.dataTree=new KdTree().buildKdTree(k)}getCanvasPadding(){var a,b,c,d,e,f,g,h,j,k,l,m,n,o,p,q,r=Math.round,s=Math.sqrt,t=this,u=t.config||(t.config={}),v=t.components||{},w=t.getFromEnv('chartConfig'),x=w.rotatevalues,y=t.getFromEnv('xAxis'),z=t.getFromEnv('dataLabelStyle'),A=v.data||[],B=A.length,C=u.leftMostData||A[0],D=u.rightMostData||A[A.length-1],E=mathMin(w.canvasHeight,w.canvasWidth)/8,F=1,G=1,H=w.zMax,I=u.bubbleScale,J=y.config.axisRange,K=J.max,L=J.min,M=y.getPixel(K),N=y.getPixel(L),O={},P={},Q=t.getFromEnv('smartLabel'),R={paddingLeft:0,paddingRight:0},S=0;for(a=s(H),b=E/a,j=0;j<B;j++)c=A[j].config,d=C.config,e=D.config,g=s(c.z),o=r(g*b)*I||0,p=y.getValue(o)-L,k=c.x-p/2,1==F&&(g=s(d.z),o=r(g*b)*I||0,p=y.getValue(o)-L,l=d.x-p/2),1==G&&(g=s(e.z),o=r(g*b)*I||0,p=y.getValue(o)-L,m=e.x-p/2),F=0,G=0,l>k&&(C=A[j],F=1),m<k&&(D=A[j],G=1);return Q.useEllipsesOnOverflow(w.useEllipsesWhenOverflow),Q.setStyle(z),C&&C.config.showValue&&(f=C.config,n=f.displayValue,P=Q.getOriSize(n),S=x?P.height:P.width,h=y.getPixel(f.x)-.5*S,N>h&&(R.paddingLeft=N-h)),D&&D.config.showValue&&(f=D.config,n=f.displayValue,O=Q.getOriSize(n),S=x?O.height:O.width,q=y.getPixel(f.x)+.5*S,M<q&&(R.paddingRight=q-M)),R}drawPlots(){var a,b,c,d,e,f,g,h,j,k=this,l=k.getFromEnv('animationManager'),m=k.components.data,n=k.getContainer(),o=k.getState('visible'),p=k.getContainer('labelGroup'),q=function(){!1===o&&(n.plotGroup.hide(),n.commonElemsGroup.hide(),p&&p.hide(),k._containerHidden=!0)},r={};for(e=0,f=m.length;e<f;e+=1)d=m[e],g=d.config,h=g.y,a=d.graphics.element,r=g.hoverEffects,c=d.graphics.hotElement,j=d.graphics.label,null===h?(a&&a.hide(),c&&c.hide(),j&&j.hide()):(b=d.graphics.element,a=l.setAnimation({el:b||'circle',attr:g.props.element.attr,label:'circle',callback:q,component:k,container:n.plotGroup}),!b&&(d.graphics.element=a),a.show(),a.data('hoverEnabled',r.enabled).data(SETROLLOVERATTR,g.setRolloverAttr).data(SETROLLOUTATTR,g.setRolloutAttr).data('anchorRadius',g.r).data('anchorHoverRadius',g.r),a&&a.data(EVENTARGS,g&&g.eventArgs)),a&&(a.isDrawn=!0)}getDataLimits(){var a=Math.min,b=Math.max,c=this,d=c.getFromEnv('chart'),e=d.config,f=c.config,g=f.yMax,h=f.yMin,i=-Infinity,j=+Infinity,k=e.transposeAxis,l=f.xMin,m=f.xMax,n=f.max,o=f.min,p=c.getRegressionPoints();return!1===c.getState('visible')&&k&&(g=i,h=j,l=j,m=i),p&&(g=b(g,p.max),h=a(h,p.min),m=b(m,p.xMax),l=a(l,p.xMin)),{max:g,min:h,xMin:l,xMax:m,zMax:n,zMin:o}}}export default BubbleDataset;