quoslibero
Version:
FusionCharts JavaScript charting framework
1 lines • 6.48 kB
JavaScript
import SmartRenderer from'../../../../fc-core/src/component-interface/smart-renderer';import{convertColor}from'../../../../fc-core/src/lib/lib-graphics';import{pluckNumber,pluck}from'../../../../fc-core/src/lib';import timeMarkerFactory from'../factories/time-marker-factory';import refLineFactory from'../factories/reference-line-factory';import gridLineFactory from'../factories/grid-line-factory';import mouseTracker from'../factories/mouse-tracker-factory';import MouseActionFactory from'../factories/tooltip-and-hover-factory';import wheelFactory from'../factories/interactions/wheel-factory';import dbTapFactory from'../factories/interactions/db-tap-factory';import swipeFactory from'../factories/interactions/swipe-factory';import pinchZoomFactory from'../factories/interactions/pinch-zoom-factory';import datasetFactory from'../factories/dataset-factory-v2';import verticalCrosslineFactory from'../factories/vertical-crossline-factory';import horizontalCrosslineFactory from'../factories/horizontal-crossline-factory';let M='M',H='H',V='V',HORIZONTAL='horizontal',DEFAULT_BORDER_WIDTH=2;class Canvas extends SmartRenderer{constructor(){super(),this.registerFactory('dataset',datasetFactory),this.registerFactory('gridLine',gridLineFactory),this.registerFactory('timeMarker',timeMarkerFactory),this.registerFactory('referenceLine',refLineFactory),this.registerFactory('mouseTracker',mouseTracker),this.registerFactory('tooltip',MouseActionFactory,['mouseTracker']),this.registerFactory('wheel',wheelFactory),this.registerFactory('dbTap',dbTapFactory),this.registerFactory('swipe',swipeFactory),this.registerFactory('pinchZoom',pinchZoomFactory),this.registerFactory('verticalCrossline',verticalCrosslineFactory,['dataset']),this.registerFactory('horizontalCrossline',horizontalCrosslineFactory,['dataset'])}__setDefaultConfig(){super.__setDefaultConfig(),this.config.padding={left:0,right:0,top:0,bottom:0},this.config.multiSeriesDatasetMap={}}getName(){return'canvas'}getType(){return'canvas'}configureAttributes(a){var b=this,c=b.config,d=b.getFromEnv('dataSource'),e=d.chart&&d.chart.style||{},f={},g=b.getFromEnv('getStyleDef'),h=c.borderConfig||(c.borderConfig={});a.xConfigs&&(b.config.xConfigs=a.xConfigs),a.yConfigs&&(b.config.yConfigs=a.yConfigs),a.plotConfigs&&(b.config.plotConfigs=a.plotConfigs),a.tableMap&&(b.config.tableMap=a.tableMap),a.enableGridLines&&(b.config.enableGridLines=a.enableGridLines),a.isContext&&(b.config.isContext=a.isContext),f=g(e.canvas),['leftBorder','topBorder','rightBorder','bottomBorder'].forEach(b=>{h[b]=a[b]?pluckNumber(f['stroke-width'],DEFAULT_BORDER_WIDTH):h[b]||0}),c.canvasBorderColor=convertColor(pluck(f.stroke,'D6D6D6'),pluckNumber(100*f['stroke-opacity'],100)),c.canvasBGColor=convertColor(pluck(f.fill,'ffffff'),pluckNumber(100*f['fill-opacity'],100)),c.opacity=f.opacity,c.enableMouseTracking=pluckNumber(a.enableMouseTracking,1),c.enableMarkers=pluckNumber(a.enableMarkers,1),c.enableTimeMarkers=pluckNumber(a.enableTimeMarkers,1),c.enableReferenceLine=pluckNumber(a.enableReferenceLine,1),c.enableInteraction=pluckNumber(a.enableInteraction,0),c.includeLegend=pluckNumber(a.includeLegend,1),c.gridLineDirection=pluck(a.gridLineDirection,HORIZONTAL),c.styleGridLines=pluckNumber(a.styleGridLines,1),c.gridLineStyle=pluck(a.gridLineStyle)}setDimension(a={}){var b=Math.max;let c=this,d=c.config,e=d.borderConfig,f=c.getFromEnv('chartConfig');d.canvasTop=a.top||0,d.canvasLeft=a.left||0,d.canvasWidth=a.width||f.origRenderWidth,d.canvasHeight=a.height||f.origRenderHeight,d.canvasBGTop=d.canvasTop+e.topBorder,d.canvasBGLeft=d.canvasLeft+e.leftBorder,d.canvasBGWidth=b(0,d.canvasWidth-e.rightBorder-e.leftBorder),d.canvasBGHeight=b(0,d.canvasHeight-e.bottomBorder)}isWithinCanvas(a,b){var c=Math.floor;let d=this,e=d.config,f=e.canvasBGLeft,g=c(f+e.canvasBGWidth),h=e.canvasBGTop,i=e.padding,j=c(h+e.canvasBGHeight),k=d.getTranslation();return a=a-(k.x||0)+(i.left||0),b=b-(k.y||0)+(i.top||0),a>f&&a<g&&b>h&&b<j}draw(){let a=this;a._createGroup(),a._drawCanvas(),a.config.isContext||a._setTooltipBounding()}_setTooltipBounding(){let a=this,b=a.config,c=a.getTranslation(),d=a.getFromEnv('toolTipController'),e=b.canvasLeft+(c.x||0),f=b.canvasTop+(c.y||0);d._setRelativePosition({left:e,right:e+b.canvasWidth,top:f,bottom:f+b.canvasHeight,canvas:this})}_drawCanvas(){var a,b=this,c=b.config,d=c.borderConfig,e=c.canvasTop+d.topBorder/2,f=c.canvasLeft+d.leftBorder/2,g=c.canvasWidth-(d.rightBorder/2+d.leftBorder/2),h=c.canvasHeight-(d.bottomBorder/2+d.topBorder/2),i={leftBorder:[M,f,e,V,e+h],rightBorder:[M,f+g,e,V,e+h],topBorder:[M,f,e,H,f+g],bottomBorder:[M,f,e+h,H,f+g]};for(a in b.addGraphicalElement({el:'rect',component:b,label:'canvas',container:{id:'tropo',label:'group',isParent:!1},attr:{y:c.canvasBGTop,x:c.canvasBGLeft,width:c.canvasBGWidth,height:c.canvasBGHeight,fill:c.canvasBGColor,"stroke-width":0,stroke:'none',opacity:c.opacity},id:'background'},!0),d)b.addGraphicalElement({el:'path',component:b,label:'canvas',container:{id:'tropo',label:'group',isParent:!1},attr:{path:i[a],stroke:c.canvasBorderColor,"stroke-width":d[a],opacity:c.opacity},id:'border'},!0)}_createGroup(){let a=this,b=a.config,c=b.padding,d=b.canvasBGLeft-c.left,e=b.canvasBGTop-c.top,f=b.canvasBGWidth,g=b.canvasBGHeight,h=[`M${d},${e}`,`L${d+f},${e}`,`L${d+f},${e+g}`,`L${d},${e+g}Z`];a.addGraphicalElement({el:'group',container:{id:'tropo',label:'group',isParent:!0},component:a,label:'group',attr:{name:'canvas-tropo',transform:b.canvasTranslation},id:'tropo'}),a.addGraphicalElement({el:'group',container:{id:'strato',label:'group',isParent:!0},component:a,label:'strato',attr:{name:'canvas-strato',transform:b.translate},id:'strato'}),a.addGraphicalElement({el:'group',container:{id:'meso',label:'group',isParent:!0},component:a,label:'meso',attr:{name:'canvas-meso',transform:b.translate,"clip-path":h},id:'meso'}),a.addGraphicalElement({el:'group',container:{id:'thermo',label:'group',isParent:!0},component:a,label:'thermo',attr:{name:'canvas-thermo',transform:b.translate},id:'thermo'}),a.addToEnv('dsGroupclipPath',h)}setTranslation(a,b){const c=this.config,d=c.borderConfig,e=c.padding;c._translateX=a+d.leftBorder,c._translateY=b+d.topBorder,c.canvasTranslation='t'+c._translateX+','+c._translateY,c._translateX+=e.left,c._translateY+=e.top,c.translate='t'+c._translateX+','+c._translateY}getCanvasBorder(){return this.config.borderConfig}setPadding(a={}){Object.assign(this.config.padding,a)}}export default Canvas;