quoslibero
Version:
FusionCharts JavaScript charting framework
1 lines • 10.3 kB
JavaScript
import Axis from'./axis';import{BLANKSTRING,pluckNumber,setLineHeight,getDashStyle,convertColor,pluck,preDefStr}from'../lib';import{polarToCartesian}from'./utils/polar-util';import diff from'./utils/array/diff';import range from'./utils/array/range';import polarAnimation from'./polar.animation';import{addDep}from'../dependency-manager';import ScaleCategory from'./scales/category';import{setTickValues,shiftLabels,_createContainer,setAxisPadding,getPixel,getLabel}from'./common-api';var UNDEF,DASH_DEF='none',POINTER='pointer',NORMALSTRING='normal',EVENTARGS='eventArgs',POSITION_MIDDLE=preDefStr.POSITION_MIDDLE,POSITION_START=preDefStr.POSITION_START,POSITION_TOP=preDefStr.POSITION_TOP,POSITION_BOTTOM=preDefStr.POSITION_BOTTOM,POSITION_END=preDefStr.POSITION_END,math=Math,mathMin=math.min,pi=math.PI,pi2=2*pi;addDep({name:'polarAnimation',type:'animationRule',extension:polarAnimation});class Polar extends Axis{constructor(){super(),this.config.scale=new ScaleCategory,this.config.referenceInfo=[]}getName(){return'polarCategory'}__setDefaultConfig(){super.__setDefaultConfig(),this.config.drawPlotBands=!1,this.config.forceZeroTick=!1}configureAttributes(a){let b=this,c=b.config,d=a,e=b.getFromEnv('chart'),f=e.getFromEnv('dataSource'),g=f.chart,h=b.getFromEnv('color-manager');super.configureAttributes(a),c.gridLineColor=convertColor(pluck(d.radarSpikeColor,h.getColor('divLineColor')),pluckNumber(d.radarSpikeAlpha,d.radarInLineAlpha,h.getColor('divLineAlpha'))),c.radarSpikeThickness=pluckNumber(g.radarspikethickness,1)}setAxisDimention(a){let b,c=this,d=c.getScale(),e=c.config,f=c.getFromEnv('chart'),g=f.config,h=e.startAngle||-pi/2,i=e.totalAngle||-pi2,j=h+i,k=e.tickValues.tickValue||[],l=i/(k.length||1),m=e.axisDimention||(e.axisDimention={});m.opposite=pluckNumber(a.opposite,m.opposite),m.centerX=pluckNumber(a.x,m.x,g.canvasLeft),m.centerY=pluckNumber(a.y,m.y,g.canvasTop),m.axisLength=pi2,j-=l,b=e.clockWise?[j,h]:[h,j],d.setRange(b)}_parseCategoryPlotLine(){var a,b,c,d=this,e=d.config,f=e.tickValues.tickValue,g=e.gridLineColor,h=e.radarSpikeThickness,j=e.referenceInfo;if((a={stroke:g,"stroke-width":h},!(f[0]&&(f[0].x!==UNDEF||f[0].y!==UNDEF)))&&e.lines.isDraw&&e.numDivLines)for(b=0;b<f.length;++b)c=b,j.push({from:c,type:'line',layer:1,attr:a})}placeAxis(a,b){var c,d,e,f,g,h,j,k,l=this,m=l.config,n=l.getFromEnv('chart'),o=n.getFromEnv('smartLabel'),p=m.labels.style,q=n.getFromEnv('dataSource').categories,r=m.labelPadding=pluckNumber(m.rawAttr.axisValuePadding,10),s=m.useEllipsesWhenOverflow,t=0,u=0,v=0,w=0,x=m.tickValues&&m.tickValues.tickValue;if(m.labels.isDraw=1,m.labels.drawNormalVal=1,m.labels.drawLimitVal=1,l.components||(l.components={}),l.components.labels=[],m.showLabels){if(q){let a=q[0];g={fontFamily:a.font,fontSize:a.fontsize,color:a.fontcolor}}for(c=0,d=x.length;c<d;c++)e=x[c],h={fontFamily:e.font,fontSize:e.fontsize,fontWeight:e.fontbold?'bold':NORMALSTRING,fontStyle:e.fontitalic?'italic':NORMALSTRING},j={fontFamily:pluck(h.fontFamily,g.fontFamily,p.fontFamily),fontSize:pluck(h.fontSize,g.fontSize,p.fontSize),fontWeight:pluck(h.fontWeight,p.fontWeight),fontStyle:pluck(h.fontStyle,p.fontStyle)},k=setLineHeight(j),o.useEllipsesOnOverflow(n.config.useEllipsesWhenOverflow),o.setStyle(j),e.oriLabel===UNDEF&&(e.oriLabel=e.label),0===c?(f=o.getSmartText(e.oriLabel,a,mathMin(k,b/2),s),e.label=f.text,e.tooltext=f.tooltext,f.width+=r,f.height+=r,f.height>t&&(t=f.height,w=t)):c===d/2?(f=o.getSmartText(e.oriLabel,a,mathMin(k,b/2),s),e.label=f.text,e.tooltext=f.tooltext,f.width+=r,f.height+=r,f.height>w&&(w=f.height)):c<d/2?(f=o.getSmartText(e.oriLabel,a/2,k,s),e.label=f.text,e.tooltext=f.tooltext,f.width+=r,f.height+=r,f.width>u&&(u=f.width)):(f=o.getSmartText(e.oriLabel,a/2,k,s),e.label=f.text,e.tooltext=f.tooltext,f.width+=r,f.height+=r,f.width>v&&(v=f.width)),l.components.labels.push({config:{width:f.width,height:f.height,props:{label:{attr:{}}}}})}else for(c=0,d=x.length;c<d;c++)l.components.labels.push({config:{width:0,height:0,props:{label:{attr:{}}}}});return{top:t,left:u,right:v,bottom:w}}_drawComponents(){var a=this,b=a.config;b.drawLabels&&b.hasCategory&&a._drawCategory()}allocatePosition(){var a=this,b=a.config;b.drawLabels&&b.hasCategory&&a._parseCategory()}_parseCategory(){var a,b,c,d,e,f,g,h,j,k,l,m,n,o,p,q,r,s,t,u,v,w=this,x=w.config,y=w.getFromEnv('chart'),z=x.isOpposit,A=x.labels,B=A.style,C=w.config.categoryLabel||(w.config.categoryLabel={}),D=y.getFromEnv('dataSource').categories,E=x.tickValues.tickValue,F=x.labelPadding,G={},H={},I=x.axisDimention.centerX,J=x.axisDimention.centerY,K=w.getScale();if(q=pluckNumber(x.radius,0),c=0,b=E?E.length-1:0,x.labels.isDraw){if(D){let a=D[0];G.fontFamily=a.font,G.fontSize=a.fontsize,G.color=a.fontcolor}for(a=c;a<=b;a++)(d=E[a],n=pluckNumber(d.x,d.y,a),x.labels.drawNormalVal||x.labels.drawLimitVal&&(a==c||n===b))&&(x.labels.drawNormalVal||n===c||n===b)&&(x.labels.drawLimitVal||n!==c&&n!==b)&&(H={fontFamily:pluck(d.font,d.labelfont),fontSize:pluck(d.fontsize,d.labelfontsize),fontWeight:pluckNumber(d.fontbold,d.labelfontbold,0)?'bold':UNDEF,fontStyle:pluckNumber(d.fontitalic,d.labelfontitalic,0)?'italic':UNDEF},l=convertColor(pluck(d.fontcolor,d.labelfontcolor,G.color,B.color),pluckNumber(d.labelalpha,x.rawAttr.labelFontAlpha,100)),j={fontFamily:pluck(H.fontFamily,G.fontFamily,B.fontFamily),fontSize:pluck(H.fontSize,G.fontSize,B.fontSize),fontWeight:pluck(H.fontWeight,B.fontWeight),fontStyle:pluck(H.fontStyle,B.fontStyle)},j.lineHeight=setLineHeight(j),j.lineHeight&&(g=j.lineHeight,-1!==g.indexOf('px')&&(g=g.replace(/px/i,''),g=parseFloat(g))),s=K.getRangeValue(n),m=polarToCartesian(q+F,s),m.x+=I,m.y+=J,o=m.x,p=m.y,e=d.label||'',(0===pluckNumber(d.showlabel,1)||0===x.showLabels)&&(e=''),h=d.labelPadding||0,k={fill:l,"line-height":g,"font-size":B.fontSize,text:e,cursor:d.link?POINTER:'default',x:o,y:p},h&&(k.y+=h),f?(k['text-anchor']=z?POSITION_START:POSITION_END,k['vertical-align']=POSITION_MIDDLE):k['vertical-align']=z?POSITION_BOTTOM:POSITION_TOP,0===a?(k['text-anchor']=POSITION_MIDDLE,k['vertical-align']=POSITION_BOTTOM):a===(b+1)/2?(k['text-anchor']=POSITION_MIDDLE,k['vertical-align']=POSITION_TOP):a<(b+1)/2?(k['text-anchor']=POSITION_END,k['vertical-align']=POSITION_MIDDLE):(k['text-anchor']=POSITION_START,k['vertical-align']=POSITION_MIDDLE),s=K.getRangeValue(n),r=polarToCartesian(q,s),r.x+=I,r.y+=J,A.shiftX&&(k.x+=A.shiftX),A.shiftY&&(k.y+=A.shiftY),C=x.categoryLabel=C||{},v='Label'+(u||a),C[v]=C[v]||{},C[v].config=C[v].config||{},C[v].config.labelBox=t={label:e,lineHeight:j.lineHeight,border:pluckNumber(d.borderthickness,d.labelborderthickness)?pluckNumber(d.borderthickness,d.labelborderthickness,1)+'px solid':'',borderColor:d.bordercolor||d.labelbordercolor?convertColor(d.bordercolor||d.labelbordercolor,pluckNumber(d.borderalpha,d.labelborderalpha,d.alpha,d.labelalpha,100)):BLANKSTRING,borderThickness:pluckNumber(d.borderthickness,d.labelborderthickness),borderPadding:pluckNumber(d.borderpadding,d.labelborderpadding),borderRadius:pluckNumber(d.borderradius,d.labelborderradius),backgroundColor:d.bgcolor||d.labelbgcolor?convertColor(d.bgcolor||d.labelbgcolor,pluckNumber(d.bgalpha,d.labelbgalpha,d.alpha,d.labelalpha,100)):BLANKSTRING,borderDash:pluckNumber(d.borderdashed,d.labelborderdashed,0)?getDashStyle(pluckNumber(d.borderdashlen,d.labelborderdashlen,4),pluckNumber(d.borderdashgap,d.labelborderdashgap,2)):0===pluckNumber(d.borderdashed,d.labelborderdashed)?DASH_DEF:B.borderDash},C[v].config.labelBox['text-bound']=e?[pluck(t.backgroundColor,B.backgroundColor),pluck(t.borderColor,B.borderColor),pluck(t.borderThickness,B.borderThickness),pluck(t.borderPadding,B.borderPadding),pluck(t.borderRadius,B.borderRadius),pluck(t.borderDash,B.borderDash)]:[],k['text-bound']=C[v].config.labelBox['text-bound'],w.components.labels[a].config.props.label.css=j,w.components.labels[a].config.props.label.attr=Object.assign(w.components.labels[a].config.props.label.attr,k))}}_drawCategory(){var a,b,c,d,e,f,g,h,j,k,l,m,n,o=this,p=o.config,q=o.getFromEnv('chart'),r=q.getFromEnv('animationManager'),s=p.labels,t=s.style,u=p.axisContainer,v=p.tickValues.tickValue,w=function(a){return function(b){var c=this;q.plotEventHandler(c,b,a)}},x=o.getFromEnv('toolTipController'),y=0,z=[],A=b=>{for(a=0;a<b.length;++a)k=o.getGraphicalElement(b[a]),k&&o.removeGraphicalElement(k)};if(c=0,b=v?v.length-1:0,p.labels.isDraw){for(a=c,y=0;a<=b;a++)(d=v[a],j=pluckNumber(d.x,d.y,a),p.labels.drawNormalVal||p.labels.drawLimitVal&&(a===c||j===b))&&(p.labels.drawNormalVal||j===c||j===b)&&(p.labels.drawLimitVal||j!==c&&j!==b)&&(m='Label'+(l||a),z.push(m),h=o.components.labels[a].config.props.label.attr,g=o.components.labels[a].config.props.label.css,f=o.getGraphicalElement(m),e=r.setAnimation({css:g,el:f||'text',attr:h,container:u,component:o,label:'polarLabel'}),p.showTooltip&&d.tooltext?x.enableToolTip(e,d.tooltext):x.disableToolTip(e),e.data(EVENTARGS,{link:d.link||d.labellink||t.labelLink,text:h.text,index:y}),f||(o.addGraphicalElement(m,e),e.on('fc-click',w('datalabelclick')).hover(w('dataLabelRollOver'),w('dataLabelRollOut'))),y+=1);p.labelMap=p.labelMap||[],n=diff(p.labelMap,z)}else n=z;p.labelMap=z,A(n)}getTranslation(){if(this)return 0}getReferenceInfo(){return this.config.referenceInfo}setVisibleConfig(a,b){let c,d=this,e=d.config,f=d.getScale();return!(a>=b||a<e.axisRange.min||b>e.axisRange.max)&&(c=f.setDomain([a,b]).getDomain(),e.visibleMin=c[0],e.visibleMax=c[1],d.clearReferenceInfo(),d._parseReferenceVisuals(),d.fireEvent('visiblerangeset',{minValue:a,maxValue:b}),d.asyncDraw(),!0)}_parseReferenceVisuals(){this.config.drawPlotlines&&this._parseCategoryPlotLine()}clearReferenceInfo(){let a=this.config;a.referenceInfo=[]}_setAxisRange(a){var b,c=a.min,d=a.max,e=this.config,f=e.axisRange,g=a.divGap;c>d||(b=(d-c)/(e.categoryNumDivLines+1),this.getScale().setDomain([c,d]),e.ticks=range(c,d,b).concat(d),e._allTicks=e.ticks.slice(),f.min=c,f.max=d,f.tickInterval=g||b,this.setVisibleConfig(f.min,f.max))}}Polar.prototype.setTickValues=setTickValues,Polar.prototype.shiftLabels=shiftLabels,Polar.prototype._createContainer=_createContainer,Polar.prototype.setAxisPadding=setAxisPadding,Polar.prototype.getPixel=getPixel,Polar.prototype.getLabel=getLabel;export default Polar;