quoslibero
Version:
FusionCharts JavaScript charting framework
1 lines • 4.5 kB
JavaScript
import AnnotationShape from'./annotation-shape';import{pluckNumber,pluck,setLineHeight,pluckFontSize,toRaphaelColor,getSuggestiveRotation,parseUnsafeString}from'../../../../fc-core/src/lib';const POSITION_BOTTOM='bottom',POSITION_TOP='top',POSITION_MIDDLE='middle',BOLD='bold',DEFAULT_RADIUS=0,DEFAULT_BORDER_PADDING=2,DEFAULT_BORDER_THICKNESS=1,DEFAULT_COLOR='#FF0000',DEFAULT_ALPHA=100,FULL_ANGLE_DEGREES=360,RADIAL='radial',DEFAULT_FILL_ANGLE=0,DEFAULT_FONT_SIZE=10,ITALIC='italic',NORMAL='normal',TEXT_ALIGN_OPTIONS={left:'start',right:'end',center:'middle'},TEXT_V_ALIGN_OPTIONS={top:'bottom',middle:'middle',bottom:'top'},TEXT_ROTATION_OPTIONS={0:'0',1:'270',right:'90',cw:'90',left:'270',ccw:'270'},applyTextBound=(a,b)=>{if(!a||'none'===a)return!1;return 0!==b};function isValidColor(a){return /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(a)?a:/(^[0-9A-F]{6}$)|(^[0-9A-F]{3}$)/i.test(a)&&'#'+a}class AnnotaionText extends AnnotationShape{getName(){return'text'}configureAttributes(a={}){super.configureAttributes(a);let b=this,c=b.rawConfig,d=b.groupConfig;b.config.text=parseUnsafeString(pluck(c.text,c.label,'')),b.config.font=pluck(c.font,d.font,'Verdana, sans'),b.config.fontSize=pluckFontSize(c.fontSize,d.fontSize,DEFAULT_FONT_SIZE),b.config.align=pluck(TEXT_ALIGN_OPTIONS[c.align&&c.align.toLowerCase()],TEXT_ALIGN_OPTIONS[d.textAlign&&d.textAlign.toLowerCase()],'middle'),b.config.vAlign=pluck(TEXT_V_ALIGN_OPTIONS[c.vAlign&&c.vAlign.toLowerCase()],TEXT_V_ALIGN_OPTIONS[d.textVAlign&&d.textVAlign.toLowerCase()],'middle'),b.config.radius=pluckNumber(parseFloat(c.radius),DEFAULT_RADIUS),b.config.fontWeight=pluckNumber(c.bold,0)?BOLD:NORMAL,b.config.fontStyle=pluckNumber(c.italic,0)?ITALIC:NORMAL,b.config.bgColor=isValidColor(c.bgColor)?c.bgColor:'none',b.config.borderThickness=pluckNumber(parseFloat(b.rawConfig.borderThickness),parseFloat(b.rawConfig.thickness),DEFAULT_BORDER_THICKNESS),b.config.rotateText=pluck(c.rotateText,d.rotateText,'0'),b.config.rotateAngle=TEXT_ROTATION_OPTIONS[b.config.rotateText&&b.config.rotateText.toLowerCase()],b.config.wrap=pluckNumber(c.wrap,d.wrapText,c.wrapHeight,c.wrapWidth,1),b.config.wrap&&(b.config.wrapWidth=pluckNumber(c.wrapWidth),b.config.wrapHeight=pluckNumber(c.wrapHeight)),b.config.leftMargin=pluckNumber(c.leftMargin,0),b.config.elementType='text'}getText(){let a,b=this,c=b.config,d=b.getFromEnv('smartLabel'),e=c.wrap,f=b.getLinkedParent(),g=f&&f._getConfig('scaleText'),h=g?b.getScaledVal(c.wrapWidth,!0):c.wrapWidth,i=g?b.getScaledVal(c.wrapHeight,!1):c.wrapHeight,j={fontStyle:c.fontStyle,fontFamily:c.font,fontWeight:c.fontWeight,fontSize:c.fontSize+'px',"text-anchor":c.align,"vertical-align":c.vAlign};return setLineHeight(j),d&&d.setStyle(j),a=d&&e?d.getSmartText(c.text,h,i,0).text:c.text,a}_getFillColor(a,b){let c=this,d=c.config.type,e={color:'',alpha:'',angle:'',ratio:'',radialGradient:'circle'===d||'arc'===d};return e.color=a.fontColor||a.fillColor||a.color||b.color||DEFAULT_COLOR,e.alpha=pluck(a.fillAlpha,parseFloat(a.alpha),b.alpha,DEFAULT_ALPHA),e.angle=FULL_ANGLE_DEGREES-pluckNumber(a.fillAngle,DEFAULT_FILL_ANGLE),e.ratio=pluck(a.fillRatio),a.fillPattern&&(e.radialGradient=a.fillPattern===RADIAL||pluckNumber(a.fillPattern)),e.radialGradient&&(e.gradientUnits='objectBoundingBox',e.cx=.5,e.cy=.5,e.fx=.5,e.fy=.5),c.config.rawColor=e.color,c.config.rawAlpha=e.alpha,c.config.rawAngle=e.angle,c.config.rawFillPattern=e.radialGradient?'radial':'linear',c.config.rawRatio=e.ratio,toRaphaelColor(e)}updateAttr(){let a,b=this,c=b.config,d=c.calculatedAttrs,e=pluckNumber(d.x,b.getScaledVal(c.x,!0)),f=pluckNumber(d.y,b.getScaledVal(c.y,!0));'0'!==c.rotateText&&(a=getSuggestiveRotation(parseFloat(c.rotateAngle),e,f)),b._setConfig('attr',{x:e,y:f,transform:a})}_getAnnotationAttrs(){let a=this,b=a.config,c=a._getConfig('attr')||{},d=a.getText(),e=a.getScaledVal(b.x,!0),f=a.getScaledVal(b.y,!1);return c.x=('undefined'==typeof c.x?e:c.x)+b.leftMargin/2,c.y='undefined'==typeof c.y?f:c.y,c.text=d,c.fill=b.color,c['text-bound']=applyTextBound(a.rawConfig.borderColor,a.rawConfig.borderAlpha)?[toRaphaelColor(b.bgColor),b.borderColor,b.borderThickness,DEFAULT_BORDER_PADDING,b.radius,b.dashArrayStr]:[],c['font-style']=b.fontStyle,c['font-weight']=b.fontWeight,c['font-family']=b.font,c['font-size']=a.getScaledFont(b.fontSize),c['text-anchor']=b.align,c['vertical-align']=b.vAlign,'0'!==b.rotateText&&(c.transform=c.transform||getSuggestiveRotation(parseFloat(b.rotateAngle),e,f)),c}}export default AnnotaionText;