UNPKG

quoslibero

Version:

FusionCharts JavaScript charting framework

1 lines 9.44 kB
import{UNDEF,pluckNumber,extent,POSITION_START,parseUnsafeString,POSITION_BOTTOM,POSITION_TOP,POSITION_END,extend2,toPrecision,parseTooltext,getSuggestiveRotation}from'../lib';import difference from'ramda/src/difference';let queryOptions={wrtVisible:!0},LABEL_ID='_label',NORMALSTRING='normal',extractStyleInfo=function(a,b){var c,d,e,f,g,h,i,j={labelfont:['fontFamily'],labelfontcolor:['fontColor'],labelfontsize:['fontSize',function(a){return a?pluckNumber(a)+'px':UNDEF}],labelfontbold:['fontWeight',function(a){return a?'bold':NORMALSTRING}],labelfontitalic:['fontStyle',function(a){return a?'italic':NORMALSTRING}],labelfontalpha:['fontAlpha']},k=b.getFromEnv('dataSource').categories,l=k&&k[0]||{},m=function(a){return a},n=!1,o={};for(c in l)'category'===c||c in a||(d=l[c],a[c]=d);for(c in j)f=j[c],g=f[0],h=f[1]||m,d=a[c],e=a[g.toLowerCase()],(d!==UNDEF||e!==UNDEF)&&((i=h(d))!==UNDEF||(i=h(e))!==UNDEF)&&(o[g]=i,n=!0),n&&(a.style=o)},setAxisDimention=function(a){var b=this,c=b.getScale(),d=b.config,e=b.getFromEnv('chart'),f=e.config,g=d.axisDimention||(d.axisDimention={}),h=d.isReverse;g.opposite=pluckNumber(a.opposite,g.opposite),g.x=pluckNumber(a.x,g.x,f.canvasLeft),g.y=pluckNumber(a.y,g.y,f.canvasTop),g.axisLength=pluckNumber(a.axisLength,g.axisLength),d.isVertical?h?c.setRange([g.y+g.axisLength,g.y]):c.setRange([g.y,g.y+g.axisLength]):h?c.setRange([g.x+g.axisLength,g.x]):c.setRange([g.x,g.x+g.axisLength]),d.translation=b._computeTranslation()},setDataLimit=function(a,b){var c,d,e,f,g=this,h=g.config,i=g.getFromEnv('dataSource').categories,j=i&&i[0]&&i[0].category,k=h.startPad||0,l=h.endPad||0,m=h.xAxisLabelMode;('categories'===m||'mixed'===m)&&([c,d]=extent(j,a=>+a.x)),[e,f]=g.getTrendLineLimits(),[b,a]=extent([e,f,c,d,b,a],b=>+b),h.originalMax=a,h.originalMin=b,a=h.isPercent?100:a+l,b=h.isPercent?0:b-k,g._setAxisRange({min:b,max:a}),h.axisRange.tickInterval!==UNDEF&&g._adjustNumberFormatter(h.axisRange.tickInterval)},getTrendLineLimits=function(){let a,b,c,d,e=this.config,f=e.trendLines||e.vTrendLines||e.trendPoints,g=f&&f[0]&&f[0].line||f&&f.point;return e.trendLimits?e.trendLimits:([a,b]=extent(g,a=>''===a.startvalue?UNDEF:+a.startvalue),[c,d]=extent(g,a=>''===a.endvalue?UNDEF:+a.endvalue),e.trendLimits=extent([a,b,c,d],b=>+b),e.trendLimits)},getPixel=function(a){return this.getScale().getRangeValue(a)},_drawLabel=function(){var a,b,c,d,e,f,g,h,k,l,m,n=this,o=n.config,p=n.getFromEnv('animationManager'),q=this.getFromEnv('toolTipController'),r=o.axisRange,s=o.labels,t=s.style,u=n.components,v=r.max,w=r.min,x=o.axisContainer,y=o.extremeLabels,z=o.ticks,A=[],B={fontFamily:t.fontFamily,fontSize:t.fontSize,fontWeight:t.fontWeight,fontStyle:t.fontStyle,lineHeight:t.lineHeight};if(o.labels.isDraw)for(m=u.labels,l=u.labelIndexArr,x.css(B),(b=0,c=l&&l.length);b<c;b+=1)a=l[b],h=z[a],e=`${h}${LABEL_ID}`,d=n.getGraphicalElement(e),g=m[a].config.props.label.attr,d=n.addGraphicalElement(e,p.setAnimation({el:d||'text',attr:g,container:x,data:{value:h},component:n,label:'text'})),g.tooltext?q.enableToolTip(d,g.tooltext):q.disableToolTip(d),h===v?y.lastLabel.graphic=d:h===w&&(y.firstLabel.graphic=d),A.push(e);for(k=difference(o.prevIntervalArr,A),a=0,c=k.length;a<c;a++)f=n.getGraphicalElement(k[a]),f&&n.removeGraphicalElement(f);o.prevIntervalArr=A},_parseLabel=function(){var a,b,c,d,e,f,g,h,j,k,l,m,n,o,p,q,r=Math.ceil,s=this,t=s.config,u=s.getLinkedItem('canvas').getEffectiveDimensions(),v=t.axisDimention,w=s.getFromEnv('chart'),x=w.config,y=t.axisRange,z=t.isOpposit,A=t.labels,B=s.components,C=B.labels,D=A.style,E=w.getFromEnv('smartLabel'),F=t.isVertical,G=y.max,H=y.min,I=s.getFromEnv('number-formatter'),J=u.top,K=u.left,L=J+u.height,M=K+u.width,N=t.labelPadding,O=t.extremeLabels,P=F?v.x:v.y,Q=v.opposite,R=t.labelMaxH,S=t.labelMaxW,T=y.tickInterval,U=Math.abs(s.getPixel(H,queryOptions)-s.getPixel(H+T,queryOptions)),V=[],W=t.ticks,X=0,Y=t.isReverse,Z=pluckNumber(s.getFromEnv('chart-attrib').showzeroplanevalue),$=!0,_=s.getLimit();if(E.useEllipsesOnOverflow(x.useEllipsesWhenOverflow),E.setStyle({fontSize:D.fontSize,fontFamily:D.fontFamily,lineHeight:D.lineHeight,fontWeight:D.fontWeight}),d=D.lineHeight,d&&-1!==d.indexOf('px')&&(d=parseFloat(d.replace('px',''))),0===Z&&($=!1),t.labels.isDraw){if(t.drawLabelsOpposit&&(z=!z,P=Q),j={fill:D.color,"line-height":d,"font-size":D.fontSize,opacity:1},c=t.labels.rotation,F?(t.labelMaxH>U&&!t.tickValues&&(g=r(t.labelMaxH/U)),j['text-anchor']=z?POSITION_START:POSITION_END):(t.labelMaxW>U&&!t.tickValues&&(g=r(t.labelMaxW/U)),c?(j['text-anchor']=z?POSITION_START:POSITION_END,j['vertical-align']='middle'):j['vertical-align']=z?POSITION_BOTTOM:POSITION_TOP,l=K,m=x.width-M),g>t.labels.step&&(t.labels.step=g),h=t.numberFormatterFn?I[t.numberFormatterFn]:t.isPercent?I.yAxisPercentValue:F?I.yAxis:I.xAxis,O.firstLabel={},O.lastLabel={},q=W.filter((a,b,c)=>0!==a||t.showZeroPlaneValue?(F||b===c.length-1||!(s.getPixel(a,queryOptions)+t.labelMaxW>M))&&(0==b%t.labels.step?(V[X++]=b,!0):!!(t.labels.drawLimitVal&&(0===b||b===c.length-1))&&(V[X++]=b,!0)):$&&(!$||_.max===a||_.min===a)&&(V[X++]=b,!0)),t.isZeroTickForced&&-1!==q.indexOf(0)){let a;X=0,V=[],p=s.getPixel(0),q=q.filter((b,c,d)=>(a=s.getPixel(b),0===d[c+1]||0===d[c-1]?F?!(a+R>=p&&p>=a-R)&&(V[X++]=c,!0):!(a+S>=p&&p>=a-S)&&(V[X++]=c,!0):(V[X++]=c,!0)))}for(e=(F?S:U/2)*t.labels.step,f=F?U/2:R,B.labelIndexArr=V.slice(),(a=0,b=q.length);a<b;a+=1)n=q[a],C[V[a]]=C[V[a]]||{config:{props:{label:{}}}},k=Object.assign({},j),o=UNDEF,t.labels.drawNormalVal||n===H||n===G?t.labels.drawLimitVal||n!==H&&n!==G?n===H&&t.lowerLimitDisplay&&t.labels.drawLimitVal?(o=E.getSmartText(t.lowerLimitDisplay,e,f+d/2),k.text=o.text,k.tooltext=o.tooltext):n===G&&t.upperLimitDisplay&&t.labels.drawLimitVal?(o=E.getSmartText(t.upperLimitDisplay,e,f+d/2),k.text=o.text,k.tooltext=o.tooltext):(k.text=''+h.call(I,n,t.axisIndex),o=E.getOriSize(k.text)):k.text='':k.text='',F?(k.x=z?(P||M)+N:(P||K)-N,k.y=s.getPixel(n,queryOptions),(Y&&n===H&&t.lowerLimitDisplay||!Y&&n===G&&t.upperLimitDisplay)&&o&&o.height>d&&(k['vertical-align']=POSITION_BOTTOM),(Y&&n===G&&t.upperLimitDisplay||!Y&&n===H&&t.lowerLimitDisplay)&&o&&o.height>d&&(k['vertical-align']=POSITION_TOP),t.placeValuesInside&&(k['text-anchor']=z?POSITION_END:POSITION_START)):(k.x=s.getPixel(n,queryOptions),k.y=z?(P||J)-N:(P||L)+N,(!Y&&n===H||Y&&n===G)&&o&&o.width>2*l&&(k['text-anchor']=POSITION_START),(!Y&&n===G||Y&&n===H)&&o&&o.width>2*m&&(k['text-anchor']=POSITION_END),k['vertical-align']=t.placeValuesInside?z?POSITION_TOP:POSITION_BOTTOM:z?POSITION_BOTTOM:POSITION_TOP),A.shiftX&&(k.x+=A.shiftX),A.shiftY&&(k.y+=A.shiftY),k.transform=getSuggestiveRotation(c,k.x,k.y),C[V[a]].config.props.label.attr=k}},setTickValues=function(a){var b,c,d=a&&a.length,e=this.config,f=e.startPad||0,g=this.getFromEnv('chart'),h=0,i=e.tickValues={},j=i.tickValue=[],k=i.vline=[],l=i.tickIdMap={},m=e.endPad||0;for(e.hasCategory=1,b=0;b<d;b+=1)c=extend2({},a[b]),c.vline?(c.startIndex=j.length-1,k.push(c)):(c.id&&(l[c.id.toLowerCase()]={tickObj:c,index:h}),(e.mapTickValuesById&&c.id||!e.mapTickValuesById)&&(extractStyleInfo(c,g),j.push(c),j[h].label=parseUnsafeString(j[h].label),h+=1));e.oriCatLen=h,this._setAxisRange({max:+toPrecision(h-1+m,10),min:+toPrecision(0-f,10),tickInterval:+toPrecision(1,10)})},shiftLabels=function(a,b){var c=this,d=c.config,e=d.labels;e.shiftX=a,e.shiftY=b},_createContainer=function(){let a,b,c,d,e,f=this,g=f.config,h=g.isVertical,i=f.getLinkedParent(),j=i.getChildContainer(),k=j.axisBottomGroup,l=j.axisTopGroup,m=-f.getTranslation(),n=h?`T0,${m}`:`T${m},0`;b=f.createContainer('axisNameGroup',{name:'dataset-Name-group'},k),a=f.createContainer('axisLineGroup',{name:'axis-Line-group'},l),c=f.createContainer('axisTrendGroupTop',{name:'dataset-Trend-group-top'},l),d=f.createContainer('axisLabelGroup',{name:'dataset-Label-group'},k),e=f.createContainer('axisLabelGroupTop',{name:'dataset-Label-group'},l),f.getGraphicalElement('scrollbarContainer')||f.addGraphicalElement('scrollbarContainer',f.createGroup('scrollbarContainer',{name:'scrollbar-container'},a,'scrollbar')),g.axisContainer=f.createGroup('axisContainer',{name:'dataset-axis',transform:n},d),g.axisLabelContainerTop=f.createGroup('axisLabelContainerTop',{name:'dataset-top-label',transform:n},e),g.axisAxisLineContainer=f.createGroup('axisAxisLineContainer',{name:'axis-line-tick'},a),g.axisTrendLabelContainer=f.createGroup('axisTrendLabelContainer',{name:'dataset-axis-trend-label'},c),g.axisNameContainer=f.createGroup('axisNameContainer',{name:'dataset-axis-name'},b),g.axisAxisLineContainerBottom=f.createGroup('axisAxisLineContainerBottom',{name:'axis-line-tick-bottom'},k)},setAxisPadding=function(a=0,b=0){var c,d=Math.max,e=this,f=e.config,g=e.getScale(),[h,i]=g.getDomain();1===f.oriCatLen&&(0===a&&(a=.5),0===b&&(b=.5)),c=a-f.startPad,f.startPad=d(f.startPad,a),f.endPad=d(f.endPad,b),0<c&&(f.setPadding=!0,e._setAxisRange({min:h-c,max:i+c})),!f.tickValues&&f.originalMax&&f.originalMin&&e.setDataLimit(f.originalMax,f.originalMin)},getLabel=function(a){var b=this,c=b.config,d=c.tickValues&&c.tickValues.tickValue[a],e={};return d&&d.tooltext&&(e.label=d.label,d.tooltext=parseTooltext(d.tooltext,[3],e)),{label:d&&(d.oriLabel||d.label),tooltext:d&&d.tooltext}};export{setAxisDimention,setDataLimit,getTrendLineLimits,getPixel,_drawLabel,setTickValues,shiftLabels,_createContainer,setAxisPadding,getLabel,extractStyleInfo,_parseLabel};