quoslibero
Version:
FusionCharts JavaScript charting framework
1 lines • 4.54 kB
JavaScript
import{parseUnsafeString,pluck,pluckNumber,NORMAL,BOLD,convertColor,getValidValue,setLineHeight,visibleStr,hiddenStr,BLANKSTRING}from'../../../../../fc-core/src/lib';import{ComponentInterface}from'../../../../../fc-core/src/component-interface';import{addDep}from'../../../../../fc-core/src/dependency-manager';import captionAnimation from'./index.animation';let mathMax=Math.max,mathMin=Math.min,mathCeil=Math.ceil,PXSTRING='px',POSITION_RIGHT='right',POSITION_LEFT='left',POSITION_CENTER='center',POSITION_TOP='top',POSITION_BOTTOM='bottom',POSITION_MIDDLE='middle',POSITION_START='start',POSITION_END='end';addDep({name:'captionAnimation',type:'animationRule',extension:captionAnimation});class Caption extends ComponentInterface{getType(){return'caption'}getName(){return'caption'}configure(){var a=this.getFromEnv('chart'),b=a.getFromEnv('chart-attrib'),c=this,d=c.config||{},e=a.getFromEnv('style'),f=e.outCanfontFamily,g=e.outCancolor,h=e.fontSize,i=['top','center'];switch(c.config.text=parseUnsafeString(b.caption),d.style={fontFamily:pluck(b.captionfont,f),color:convertColor(pluck(b.captionfontcolor,g).replace(/^#? ([a-f0-9]+)/ig,'#$1')),fontSize:pluckNumber(b.captionfontsize,h+3)+PXSTRING,fontWeight:0===pluckNumber(b.captionfontbold)?NORMAL:BOLD},d.align||(d.align=''),d.align=pluck(b.captionposition,b.captionalignment,POSITION_CENTER),d.align&&(i=d.align.split('-'),i[0]&&(i[0]=i[0].toLowerCase()),i[1]&&(i[1]=i[1].toLowerCase()),2>i.length&&(i[1]=i[0])),i[0]){case POSITION_TOP:d.isOnTop=1;break;case POSITION_BOTTOM:d.isOnTop=0;break;default:d.isOnTop=pluckNumber(b.captionontop,1);}switch(i[1]){case POSITION_RIGHT:d.align=POSITION_END;break;case POSITION_LEFT:d.align=POSITION_START;break;default:d.align=POSITION_MIDDLE;}d.isOnLeft=!pluckNumber(b.captiononright,0),d.captionPosition=getValidValue(b.captionposition,POSITION_TOP).toLowerCase(),d.alignWithCanvas=pluckNumber(b.aligncaptionwithcanvas,a.config.alignCaptionWithCanvas,1),d.horizontalPadding=pluckNumber(b.captionhorizontalpadding,d.alignWithCanvas?0:15),d.drawCaption=!0,setLineHeight(d.style)}allocatePosition(){var a=this,b=a.getFromEnv('chart');b._manageCaptionPosition()}draw(){var a,b,c=this,d=this.getFromEnv('chart'),e=d.config,f=d.getFromEnv('animationManager'),g=d.config.textDirection,h=d.getChildContainer().captionGroup,i=d.getFromEnv('smartLabel'),j=c.getGraphicalElement('captionElement'),k=c.getFromEnv('toolTipController'),l=c.config,m=l.style,n=l.text,o=l.x,p=l.align;n?(a={text:l.text,fill:m.color,x:o,y:l.y,"text-anchor":p||POSITION_MIDDLE,"vertical-align":l.verticalAlign||POSITION_TOP,visibility:l.drawCaption?visibleStr:hiddenStr,direction:g},j=c.addGraphicalElement('captionElement',f.setAnimation({el:j||'text',attr:a,container:h,state:b,component:c,label:'text'})),j.css(m),e.showtooltip?k.enableToolTip(j,l.originalText):k.disableToolTip(j),i&&(i.useEllipsesOnOverflow(e.useEllipsesWhenOverflow),i.setStyle(m))):j&&f.setAnimation({el:j,component:c,callback:function(){this.hide()},doNotRemove:!0}),e.savedCaption=j}manageSpace(a,b){var c,d,e,f,g,h=this.getFromEnv('chart'),i=h.config,j=h.getChildren('caption')[0],k=h.getChildren('subCaption')[0],l=j.config,m=k.config,n=h.getFromEnv('dataSource').chart,o=h.getFromEnv('smartLabel'),p=a,q=parseUnsafeString(n.caption),r=parseUnsafeString(n.subcaption),s=pluckNumber(n.captionpadding,10),t=s,u=!1,v=0,w=0,x=0,y=0,z=0,A=h.getChildren('canvas'),B=mathMax(A&&A[0].config.canvasBorderThickness,0),C=0,D=0;return 3<p?(s<B&&(s=B+2),q!==BLANKSTRING&&(e=l.style,y=mathCeil(pluckNumber(parseFloat(e.fontHeight,10),parseFloat(e.lineHeight,10),12))),r!==BLANKSTRING&&(g=m.style,z=pluckNumber(parseInt(g.fontHeight,10),parseInt(g.lineHeight,10),12)),(0<y||0<z)&&(p=mathMax(p,0),v=y+z+s,v>p?(w=p-v,u=!0,w<s?s=mathMax(w,5):(w-=s,s=0,z>w?(x=z-w+10,z=0,m._originalText=m.text,m.text=BLANKSTRING):(w-=z,z=0,y>w&&(x=y-w)))):x=p-v,o.useEllipsesOnOverflow(i.useEllipsesWhenOverflow),0<y&&(o.setStyle(e),y+=x,c=o.getSmartText(q,b,y),x=y-c.height,l.height=y=c.height,l.text=c.text,l.originalText=!!c.tooltext&&c.tooltext,C=c.width),0<z&&(o.setStyle(g),z+=x,d=o.getSmartText(r,b,z),x=z-d.height,z=d.height,m.text=d.text,m.height=d.height,m.originalText=!!d.tooltext&&d.tooltext,D=d.width),u&&0<x&&(s+=mathMin(t-s,x)),l.captionPadding=s,l.height=y,l.width=C,m.width=D,m.height=z,v=y+z+s),v>i.canvasHeight?(v=0,l.drawCaption=!1):l.drawCaption=!0,f=l.isOnTop?{top:v}:{bottom:v,top:5}):(f={bottom:0,top:0},l.drawCaption=!1),f}setDimention(a){let b=this,c=b.config;c.x=a.x,c.y=a.y}}export default Caption;