UNPKG

quoslibero

Version:

FusionCharts JavaScript charting framework

1 lines 5.01 kB
import{SmartRenderer}from'../../../../fc-core/src/component-interface';import{pluck,pluckNumber}from'../../../../fc-core/src/lib';import isValidNumber from'../../../../fc-utils/src/type/is-valid-number';const VERTICAL='vertical',END='end',MIDDLE='middle',START='start',GUTTER_5=5,M='M',L='L',l='l',h='h',v='v',z='z';class Crossline extends SmartRenderer{__setDefaultConfig(){super.__setDefaultConfig();let a=this.config;a.type=VERTICAL,a.value=void 0,a._defaultLineStyle={stroke:'#9a9a9a',"stroke-width":1,"stroke-opacity":1},a._defaultTextStyle={fill:'#ffffff',"font-size":'10px',"font-weight":'normal',"font-style":'normal',"text-anchor":'middle'},a._defaultTagStyle={fill:'#5f5f5f'},a._defaultPadding=2}configureAttributes(a){super.configureAttributes(a);let b,c,d=this.config,e=this.getFromEnv('baseTextStyle'),f=this.getFromEnv('getStyleDef');for(let b in a)a.hasOwnProperty(b)&&(d[b]=a[b]);b=d.type,c=d.inputStyle,d._lineStyle=Object.assign({},d._defaultLineStyle,f(c.line),f(c[b+'-line'])),d._textStyle=Object.assign({},d._defaultTextStyle,e,f(c.label),f(c[b+'-label'])),d._tagStyle=Object.assign({},d._defaultTagStyle,f(c.tag),f(c[b+'-tag']))}getPathArr(){let a,b=this,c=b.config,d=c.type===VERTICAL,e=c.scale,f=c.value,g=b.getLinkedParent().config,i=g.padding,j=g.canvasLeft-i.left,k=g.canvasTop-i.top,l=g.canvasWidth,m=g.canvasHeight;return a=d?[M,e.getRangeValue(f),k,v,m]:[M,j,e.getRangeValue(f),h,l],a}drawVerticalCrosslineText(){let a,b,c,d=this,e=d.config,f=e.dateRange,g=e.timeFormatterFn({dateRange:f,type:'crossline'}),i=e.value,j=e.scale,k=pluckNumber(e.padding,e._defaultPadding),l=d.getLinkedParent().config,m=l.padding,n=l.canvasLeft-m.left,o=l.canvasTop-m.top,p=l.canvasWidth,q=l.canvasHeight,r=o+q,s=d.getFromEnv('smartLabel'),t=0;isValidNumber(i)&&(s.setStyle(e._textStyle),c=s.getOriSize(g),b=j.getRangeValue(i),d.addGraphicalElement({el:'group',container:{id:'thermo',label:'thermo',isParent:!0},component:d,label:'crossline',attr:{name:'veritcal-crossline-marker-group'},id:'crossline'}),b+c.width/2+2*k>n+p?(a=[M,b,r,L,b,r+k,v,c.height+2*k,h,-(c.width+4*k),v,-(c.height+2*k),L,b-k,r+k,z],e._textStyle['text-anchor']=END,t=-2*k):b-c.width/2-2*k<n?(a=[M,b,r,L,b,r+k,v,c.height+2*k,h,c.width+4*k,v,-(c.height+2*k),L,b+k,r+k,z],e._textStyle['text-anchor']=START,t=2*k):(a=[M,b,r,L,b-k,r+k,L,b-c.width/2-2*k,r+k,v,c.height+2*k,h,c.width+4*k,v,-(c.height+2*k),L,b+k,r+k,z],e._textStyle['text-anchor']=MIDDLE),d.addGraphicalElement({el:'path',attr:{path:a},css:e._tagStyle,id:'vertical-crossline-marker',container:{label:'crossline'}}),d.addGraphicalElement({el:'text',attr:{text:g,x:b+t,y:r+2*k+c.height/2},css:e._textStyle,id:'vertical-crossline-text',container:{label:'crossline'}}))}drawHorizontalCrosslineText(){let a=this,b=a.config,c=b.value,d=b.formatterFn({value:b.text,type:'crossline',prefix:b.prefix,suffix:b.suffix}),e=this.getHorizontalMarkerProps();isValidNumber(c)&&(a.addGraphicalElement({el:'group',container:{id:'strato',label:'strato',isParent:!0},component:a,label:'crossline',attr:{name:'horizontal-crossline-marker-group'},id:'crossline'}),b._tagStyle.fill=pluck(b.markerFill,b._tagStyle.fill),b._tagStyle.stroke=pluck(b._tagStyle.stroke,b.markerFill),a.addGraphicalElement({el:'path',attr:{path:e.markerPath},css:b._tagStyle,id:'horizontal-crossline-marker',container:{label:'crossline'}}),a.addGraphicalElement({el:'text',attr:{text:d,x:e.markerText.x,y:e.markerText.y},css:b._textStyle,id:'horizontal-crossline-text',container:{label:'crossline'}}))}getHorizontalMarkerProps(){let a,b,c,d=this,e=d.config,f=e.value,g=e.scale,i=e.yAxisAlignment,j=pluckNumber(e.padding,e._defaultPadding),k=d.getLinkedParent().config,m=e.formatterFn({value:e.text,type:'crossline',prefix:e.prefix,suffix:e.suffix}),n=k.borderConfig,o=k.padding,p=k.canvasLeft+n.leftBorder-o.left,q=k.canvasWidth-n.rightBorder+o.left,r=p+q,s=d.getFromEnv('smartLabel'),t={},u={};return s.setStyle(e._textStyle),b=s.getSmartText(m),a=g.getRangeValue(f),'left'===i?(c=[M,p,a,h,-5,l,-5,-(b.height/2)-2*j,h,-(b.width+2*j),v,b.height+4*j,h,b.width+2*j,l,GUTTER_5,-b.height/2-2*j],t.x=p-10-(b.width+2*j)/2,t.y=a):'right'===i?(c=[M,r,a,h,GUTTER_5,l,10,-(b.height/2)-2*j,h,b.width+2*j,v,b.height+4*j,h,-(b.width+2*j),l,-10,-b.height/2-2*j],t.x=r+10+(b.width+2*j)/2,t.y=a):void 0,(u.markerPath=c,u.markerText=t,u)}draw(){let a=this,b=a.config,c=+b.value&&a.getPathArr()||[];a.addGraphicalElement({el:'group',container:{id:'strato',label:'strato',isParent:!0},component:a,label:'verticalcrossline',attr:{name:'vertical-crossline-group'},id:'crossline'}),a.addGraphicalElement({el:'group',container:{id:'strato',label:'strato',isParent:!0},component:a,label:'horizontalcrossline',attr:{name:'horizontal-crossline-group'},id:'crossline'}),c.length&&a.addGraphicalElement({el:'path',attr:{path:c},css:b._lineStyle,container:{label:b.type+'crossline'},id:b.type+'-crossline-path',component:a}),b.showMarker&&(b.type===VERTICAL?a.drawVerticalCrosslineText():a.drawHorizontalCrosslineText())}}export default Crossline;