quoslibero
Version:
FusionCharts JavaScript charting framework
1 lines • 10.3 kB
JavaScript
import{ComponentInterface}from'../../../../../fc-core/src/component-interface';import{pluckNumber,pluck,preDefStr,toRaphaelColor,chartPaletteStr,canvasBorderColorStr,canvasBGAlphaStr,convertColor}from'../../../../../fc-core/src/lib';import{addDep}from'../../../../../fc-core/src/dependency-manager';import canvasAnimation from'./canvas.animation';let mathMax=Math.max,MAX_MITER_LINEJOIN=2,miterStr=preDefStr.miterStr,NONE=preDefStr.noneStr,ROUND=preDefStr.ROUND,clipSumValue='clip-sum-value',clipCanvasInitStr='clip-canvas-init',clipCanvasStr='clip-canvas',createGroup=function(a,b,c){var d=c.getFromEnv('animationManager');return d.setAnimation({el:'group',attr:{name:a},container:b,component:c,label:'group'})};addDep({name:'canvasAnimation',type:'animationRule',extension:canvasAnimation});class Canvas extends ComponentInterface{constructor(){super();let a=this;a.config={},a.config.axes=a.config.axes||[],a.setLinkedItem('axes',[]),a.setLinkedItem('primaryAxis',{}),a.addToEnv('canvasConfig',this.config)}getName(){return'canvas'}getType(){return'canvas'}createGroup(){var a=this,b=a.getFromEnv('chart'),c=b.getChildContainer(),d=b.getContainer('parentgroup'),e=a.getEffectiveDimensions(),f=a.getFromEnv('chart-attrib'),g=pluckNumber(f.areaovercolumns,1),h=a.getChildContainer('axisReferenceVisualsFloor'),i=a.getChildContainer('axisReferenceVisualsBottom'),j=a.getChildContainer('axisReferenceVisualsMiddle'),k=a.getChildContainer('axisReferenceVisualsTop'),l=a.getChildContainer('axisReferenceVisualsCeil'),m=a.getChildContainer('areaGroup'),n=a.getChildContainer('areaShadowGroup'),o=a.getChildContainer('columnGroup'),p=a.getChildContainer('columnShadowGroup'),q=c.plotGroup,r=[e.left,e.top,e.width,e.height].toString();a.getContainer('canvasGroup')||a.addContainer('canvasGroup',createGroup('canvas',d,a)).insertAfter(c.backgroundGroup),i||(i=a.addChildContainer('axisReferenceVisualsBottom',createGroup('axisReferenceVisualsBottom',d,a)).insertAfter(c.axisBottomGroup)),h||(h=a.addChildContainer('axisReferenceVisualsFloor',createGroup('axisReferenceVisualsFloor',d,a)).insertAfter(c.axisBottomGroup)),h.attr({"clip-rect":r}),a.getChildContainer('crossline')||a.addChildContainer('crossline',createGroup('crossline',d,a)).insertBefore(c.plotGroup),a.getChildContainer('crosslineBottom')||a.addChildContainer('crosslineBottom',createGroup('crosslineBottom',d,a)).insertBefore(c.plotGroup),a.getChildContainer('crosslineTop')||a.addChildContainer('crosslineTop',createGroup('crosslineTop',d,a)).insertBefore(c.abovePlotGroup),a.getChildContainer('datalabelsGroup')||a.addChildContainer('datalabelsGroup',createGroup('canvasdatalabel',b.getChildContainer('datalabelsGroup'),a)),j||(j=a.addChildContainer('axisReferenceVisualsMiddle',createGroup('axisReferenceVisualsMiddle',d,a)).insertBefore(c.plotGroup)),j.attr({"clip-rect":r}),k||(k=a.addChildContainer('axisReferenceVisualsTop',createGroup('axisReferenceVisualsTop',d,a)).insertBefore(c.datalabelsGroup)),a.getChildContainer('quadrantGroup')||a.addChildContainer('quadrantGroup',createGroup('quadrant',d,a)).insertAfter(j),l||a.addChildContainer('axisReferenceVisualsCeil',createGroup('axisReferenceVisualsCeil',d,a)).insertBefore(c.datalabelsGroup),a.getChildContainer('sumLabelsLayer')||a.addChildContainer('sumLabelsLayer',c.sumLabelsLayer),p||(p=a.addChildContainer('columnShadowGroup',createGroup('column-shadow-group',q,a))),o||(o=a.addChildContainer('columnGroup',createGroup('column',q,a))),n||(n=a.addChildContainer('areaShadowGroup',createGroup('area-shadow-group',q,a))),m||(m=a.addChildContainer('areaGroup',createGroup('area',q,a))),g?(p.insertBefore(n),o.insertBefore(n)):(n.insertBefore(p),m.insertBefore(p)),a.getChildContainer('lineShadowGroup')||a.addChildContainer('lineShadowGroup',createGroup('line-shadow-group',q,a)),a.getChildContainer('lineGroup')||a.addChildContainer('lineGroup',createGroup('line',q,a)),a.getChildContainer('defaultShadowGroup')||a.addChildContainer('defaultShadowGroup',createGroup('default-shadow-group',q,a)),a.getChildContainer('defaultGroup')||a.addChildContainer('defaultGroup',createGroup('default',q,a))}isWithinCanvas(a,b){let c=this,d=c.config,e=d.canvasLeft,f=e+d.canvasWidth,g=d.canvasTop,h=g+d.canvasHeight;return a>=e&&a<=f&&b>=g&&b<=h}setCanvasPadding(){var a,b=this,c=b.config;a=b.getCanvasPadding(),c.canvasPaddingLeft=mathMax(c.canvasPaddingLeft,a.paddingLeft||0),c.canvasPaddingRight=mathMax(c.canvasPaddingRight,a.paddingRight||0),c.canvasPaddingTop=mathMax(c.canvasPaddingTop,a.paddingTop||0),c.canvasPaddingBottom=mathMax(c.canvasPaddingBottom,a.paddingBottom||0)}getEffectiveDimensions(){let a=this,b=a.config,c=b.canvasLeft,d=b.canvasTop,e=b.canvasWidth,f=b.canvasHeight,g=b.canvasPaddingLeft,h=b.canvasPaddingTop,i=b.canvasPaddingRight,j=b.canvasPaddingBottom;return{left:c,top:d,width:e,height:f,paddingLeft:g,paddingTop:h,paddingRight:i,paddingBottom:j}}setDimension(a){let b=this,c=b.config;c.canvasTop=a.top,c.canvasLeft=a.left,c.canvasWidth=a.width,c.canvasHeight=a.height}getCanvasPadding(){var a,b,c,d,e=this,f=e.getFromEnv('chartConfig'),g=f.canvasWidth,h=e.config,i=h.maxPaddingPercent*g/100,j={paddingLeft:0,paddingRight:0,paddingTop:0,paddingBottom:0};return e._mapChildren(c=>{for(b in a=c.getCanvasPadding&&c.getCanvasPadding()||{},a)a.hasOwnProperty(b)&&(j[b]=mathMax(a[b],j[b]))}),c=j.paddingLeft||0,d=j.paddingRight||0,i<c&&(j.paddingLeft=i),i<d&&(j.paddingRight=i),j}configureAttributes(a={}){var b,c,d,e,f,g=this,h=g.getLinkedParent(),i=g.getFromEnv('chartConfig'),j=g.config,k=g.getFromEnv('chart-attrib'),l=g.getFromEnv('color-manager'),m=i.is3D,n=m?chartPaletteStr.chart3D:chartPaletteStr.chart2D,o=j.isRoundEdges=pluckNumber(k.useroundedges,0),p=pluckNumber(k.showxaxisline,k.showyaxisline,k.showaxislines,0),q=p?0:1;j.canvasBorderRadius=pluckNumber(k.plotborderradius,o?2:0),d=j.showCanvasBorder=!!pluckNumber(k.showcanvasborder,q,b,o?0:1),f=j.oriCanvasBorderThickness=mathMax(pluckNumber(k.canvasborderthickness,o?0:pluckNumber(h.canvasborderthickness,2),0)),b=j.canvasBorderWidth=m?0:d?f:0,j.canvasBorderColor=convertColor(pluck(k.canvasbordercolor,l.getColor(canvasBorderColorStr)),pluck(k.canvasborderalpha,l.getColor('canvasBorderAlpha'))),c=j.canBGAlpha=pluck(k.canvasbgalpha,l.getColor(canvasBGAlphaStr)),j.canBGColor={FCcolor:{color:pluck(k.canvasbgcolor,l.getColor(n.canvasBgColor)),alpha:pluck(k.canvasbgalpha,100),angle:pluck(k.canvasbgangle,0),ratio:pluck(k.canvasbgratio)}},e=j.shadow=pluckNumber(k.showshadow,o,0)&&o?{enabled:!0,opacity:c/100}:0,j.shadowOnCanvasFill=e&&e.enabled,j.canvasPadding=pluckNumber(k.canvaspadding,0),j.origCanvasTopPad=pluckNumber(k.canvastoppadding,0),j.origCanvasBottomPad=pluckNumber(k.canvasbottompadding,0),j.origCanvasLeftPad=pluckNumber(k.canvasleftpadding,0),j.origCanvasRightPad=pluckNumber(k.canvasrightpadding,0),Object.assign(j,a),g.config.inputComponents=[],g.config.maxPaddingPercent=12.5,g._mapChildren(a=>{a.getState('removed')||a.getType&&'dataset'===a.getType()||'axisRefVisuals'===a.getType()||a.configure&&a.configure()})}disposeAllInputs(){this.config.inputComponents.forEach(function(a){a.dispose()}),this.config.inputComponents.length=0}axisExists(a){let b,c,d=this.getLinkedItem('axes'),e=!1;for(b=0,c=d.length;b<c;b++)if(d[b].axis===a){e=!0;break}return e}attachAxis(a,b,c){var d=this.getLinkedItem('axes'),e=b?'yAxis':'xAxis',f=this.getFromEnv(e)||[];return this.axisExists(a)||(d.push({axis:a,isY:b,config:c||{}}),f.push(a),this.addToEnv(e,f)),this}setPrimaryAxis(a,b){var c=this.getLinkedItem('primaryAxis');c[a]=this.getLinkedItem('axes').find(a=>a.axis===b)}getAxes(){var a;return Object.keys(a=this.getLinkedItem('primaryAxis')).length?[a.xAxis,a.yAxis]:this.getLinkedItem('axes').slice(0)}detachAxis(a,b){var c=this.getLinkedItem('axes'),d=1/0;return b?c.splice(b,1):(c.forEach((b,c)=>{b.axis===a&&(d=c)}),c.splice(d,1))}preDraw(){this._mapChildren(a=>{!a.getState('removed')&&a.preDraw&&a.preDraw()})}draw(){this.createGroup(),this.getFromEnv('chart').config.skipCanvasDrawing||this.drawCanvas()}drawCanvas(){let a,b,c,d,e,f,g,h=this,i=h.getFromEnv('chart'),j=i.isBar,k=i.getFromEnv('dataSource'),l=k.chart,m=h.getFromEnv('animationManager'),n=i.config,o=h.config,p=o.clip={},q=i.getChildContainer('plotGroup'),r=i.getChildContainer('datalabelsGroup'),s=h.getGraphicalElement('canvasBorderElement'),t=h.getGraphicalElement('canvasElement'),u=o.canvasLeft||(o.canvasLeft=n.canvasLeft),v=o.canvasTop||(o.canvasTop=n.canvasTop),w=o.canvasWidth||(o.canvasWidth=n.canvasWidth),x=o.canvasHeight||(o.canvasHeight=n.canvasHeight),y=o.xDepth=n.xDepth||0,z=o.yDepth=n.yDepth||0,A=h.getContainer('canvasGroup'),B=h.getChildContainer('quadrantGroup'),C=o.canvasBorderRadius,D=o.canvasBorderWidth,E=.5*D,F=o.canvasBorderColor,G=o.canBGColor,H=o.canBGAlpha,I=o.shadow,J=o.showCanvasBG=!!pluckNumber(l.showcanvasbg,1),K=o.shadowOnCanvasFill,L=o.showCanvasBorder;d=G,e={x:u-E,y:v-E,width:w+D,height:x+D,r:C,"stroke-width":D,stroke:F,"stroke-linejoin":D>MAX_MITER_LINEJOIN?ROUND:miterStr},L?(s&&s.show(),b=m.setAnimation({el:s||'rect',component:h,attr:{x:u-E,y:v-E,width:w+D,height:x+D,r:C,"stroke-width":D,stroke:F,"stroke-linejoin":D>MAX_MITER_LINEJOIN?ROUND:miterStr},label:'rect',container:A}).shadow(I),!s&&h.addGraphicalElement('canvasBorderElement',b)):s&&(h.removeGraphicalElement(s),m.setAnimation({el:s,component:h,callback:()=>{s.hide()}})),f=L?0:o.oriCanvasBorderThickness,p[clipCanvasStr]=[mathMax(0,u-y-f),mathMax(0,v-z-f),mathMax(1,w+2*y+2*f),mathMax(1,x+z+2*f)],p[clipSumValue]=[mathMax(0,u-y),j?v:0,mathMax(1,j?n.width-u:w+2*y),mathMax(1,j?x+z:v+x)],p[clipCanvasInitStr]=[mathMax(0,u-y),mathMax(0,v-z),1,mathMax(1,x+2*z)],a=p[clipCanvasStr].slice(0),g=function(a,b){m.setAnimation({el:a,attr:{"clip-rect":b},label:'container',component:h,state:a.attrs['clip-rect']?'updating':'appearing'})},n.skipClipping||(g(q,a),g(r,a),g(B,a),g(h.getChildContainer('sumLabelsLayer'),p[clipSumValue])),J?(e={x:u,y:v,width:w,height:x,r:C,"stroke-width":0,stroke:NONE,fill:toRaphaelColor(d)},t&&t.show(),c=m.setAnimation({el:t||'rect',attr:e,label:'rect',container:A,component:h}),!t&&h.addGraphicalElement('canvasElement',c),K?c.shadow({opacity:H/100}):c.shadow(!1)):t&&m.setAnimation({el:t,component:h,callback:()=>{t.hide()}})}}export default Canvas;