quoslibero
Version:
FusionCharts JavaScript charting framework
1 lines • 10.3 kB
JavaScript
import{computePlotBounds,computeSliceBounds,compute3DSliceBounds,arrangeItems,DEFAULT_MACRO_SEPARATOR,xyCalculator,axisMacroParser}from'./utils';import{pluck,UNDEF,extend2}from'../../../fc-core/src/lib';import{addDep,getDep}from'../../../fc-core/src/dependency-manager';import annotationAnimation from'./annotation-animation';import raphaelShapesRingpath from'../../../fc-core/src/_internal/redraphael/redraphael-shapes/redraphael-shapes.ringpath';import raphaelShapesArcpath from'../../../fc-core/src/_internal/redraphael/redraphael-shapes/redraphael-shapes.arcpath';import AnnotationGroup from'./shapes/annotation-group';import{SmartRenderer}from'../../../fc-core/src/component-interface';const circular2D=['pie2d','doughnut2d'],circular3D=['pie3d','doughnut3d'],getSnapPoints=a=>{let b,c,d,e,f=a.config,g=a.getChildren(),h=g.caption[0],i=g.subCaption[0],j=g.legend&&g.legend[0]||{},k=g.gLegend&&g.gLegend[0]||{},l=h.config,m=i.config,n=l.width||0,o=m.width||0;return'end'===l.align?(b=l.x-n,d=l.x-o):'start'===l.align?b=d=l.x:(b=l.x-n/2,d=l.x-o/2),c=f.gLegendEnabled?k.conf:j.config,e={canvasendx:f.canvasRight,canvasendy:f.canvasBottom,canvasheight:f.canvasHeight,canvasstartx:f.canvasLeft,canvasstarty:f.canvasTop,canvaswidth:f.canvasWidth,canvascenterx:f.canvasCenterX||f.canvasLeft+(f.canvasRight-f.canvasLeft)/2,canvascentery:f.canvasCenterY||f.canvasTop+(f.canvasBottom-f.canvasTop)/2,chartcenterx:f.width/2,chartcentery:f.height/2,chartstartx:0,chartstarty:0,chartendx:f.width,chartendy:f.height,chartheight:f.height,chartwidth:f.width,chartleftmargin:f.marginLeft,chartrightmargin:f.marginRight,chartbottommargin:f.marginBottom,charttopmargin:f.marginTop,captionendx:b+l.width,captionendy:l.y+l.height,captionheight:l.height,captionstartx:b,captionstarty:l.y,captionwidth:n,subcaptionendx:d+m.width,subcaptionendy:m.y+m.height,subcaptionheight:m.height,subcaptionstartx:d,subcaptionstarty:m.y,subcaptionwidth:o,legendendx:c&&c.xPos+c.width,legendendy:c&&c.yPos+c.height,legendheight:c&&c.height,legendstartx:c&&c.xPos,legendstarty:c&&c.yPos,legendwidth:c&&c.width,dataset:function(b){let c,d,e,f=b.split(DEFAULT_MACRO_SEPARATOR).slice(1),g=[],h=[];return a.iterateComponents(function(a){'dataset'===a.getType()&&h.push(a)}),h.sort((c,a)=>c.getJSONIndex()-a.getJSONIndex()),d=h[+f[0]],g=d.components.data,c=g[+f[2]],-1<circular2D.indexOf(d.getName().toLowerCase())?computeSliceBounds(f[3],c.config):-1<circular3D.indexOf(d.getName().toLowerCase())?compute3DSliceBounds(f[3],c.config):(e=computePlotBounds(c,d.getName()),xyCalculator(f[3],e))},xaxis:axisMacroParser(a,'xAxis'),yaxis:axisMacroParser(a,'yAxis'),gaugestartx:f.gaugeStartX,gaugestarty:f.gaugeStartY,gaugeendx:f.gaugeEndX,gaugeendy:f.gaugeEndY,gaugecenterx:f.gaugeCenterX,gaugecentery:f.gaugeCenterY,gaugestartangle:f.gaugeStartAngle,gaugeendangle:f.gaugeEndAngle,gaugeradius:f.gaugeRadius,plotwidth:f.plotWidth,plotsemiwidth:f.plotSemiWidth},e},getBoolean=a=>0!==parseInt(a,10),parseShapeConfiguration=(a,b={},c={})=>{let d={};for(let e in d.annotationType='shape',d.id=a.id,d.type=a.type&&a.type.toLowerCase(),d.toolText=pluck(a.tooltext,a.toolText),d.animationLabel=pluck(a.animationlabel,a.animationLabel),d.dashed=a.dashed,d.dashLen=pluck(a.dashlen,a.dashLen),d.dashGap=pluck(a.dashgap,a.dashGap),d.thickness=a.thickness,d.showBorder=pluck(a.showborder,a.showBorder),d.borderColor=pluck(a.bordercolor,a.borderColor),d.borderAlpha=pluck(a.borderalpha,a.borderAlpha),d.borderThickness=pluck(a.borderthickness,a.borderThickness),d.alpha=a.alpha,d.color=a.color,d.fillColor=pluck(a.fillcolor,a.fillColor),d.fontColor=pluck(a.fontcolor,a.fontColor),d.fillAlpha=pluck(a.fillalpha,a.fillAlpha),d.fillAngle=pluck(a.fillangle,a.fillAngle),d.fillRatio=pluck(a.fillratio,a.fillRatio),d.fillPattern=pluck(a.fillpattern,a.fillPattern),d.sides=a.sides,d.radius=a.radius,d.yRadius=pluck(a.yradius,a.yRadius),d.innerRadius=pluck(a.innerradius,a.innerRadius),d.endAngle=pluck(a.endangle,a.endAngle),d.startAngle=pluck(a.startangle,a.startAngle),d.isVisible=!0===getBoolean(a.visible),d.x=a.x,d.y=a.y,d.xPos=pluck(a.xpos,a.xPos),d.yPos=pluck(a.ypos,a.yPos),d.toY=pluck(a.toy,a.toY),d.toX=pluck(a.tox,a.toX),d.autoScale=pluck(a.autoscale,a.autoScale),d.path=a.path,d.css=a.css,d.wrap=a.wrap,d.text=a.text!==UNDEF&&null!==a.text&&a.text.toString()||UNDEF,d.font=pluck(a.font,b.font,c.basefont),d.bold=pluck(a.bold,a.isbold,a.bold,a.isBold),d.label=a.label,d.align=a.align,d.italic=a.italic,d.vAlign=pluck(a.valign,a.vAlign),d.bgColor=pluck(a.bgcolor,a.bgColor),d.fontSize=pluck(a.fontsize,a.fontSize,b.fontSize,c.basefontsize),d.wrapWidth=pluck(a.wrapwidth,a.wrapWidth),d.leftMargin=pluck(a.leftmargin,a.leftMargin),d.rotateText=pluck(a.rotatetext,a.rotateText),d.wrapHeight=pluck(a.wrapheight,a.wrapHeight),d.showShadow=pluck(a.showshadow,a.showShadow),d.link=a.link,d.url=a.url,d.link=a.link,d.width=a.width,d.height=a.height,d.xScale=pluck(a.xscale,a.xScale),d.yScale=pluck(a.yscale,a.yScale),d.onload=a.onload,d.onerror=a.onerror,'object'==typeof a.component&&(d.component=a.component),d)if(d.hasOwnProperty(e)){let a=d[e];'undefined'==typeof a&&delete d[e]}return d},parseConfiguration=(a,b)=>{let c={},d=a.items;for(let e in d=a.items=arrangeItems(d),c.annotationType='group',c.id=a.id,c.showBelow='undefined'==typeof a.showbelow||null===a.showbelow?1:+a.showbelow,c.x=a.x,c.y=a.y,c.animationLabel=pluck(a.animationlabel,a.animationLabel),c.xPos=pluck(a.xpos,a.xPos),c.yPos=pluck(a.ypos,a.yPos),c.grpXShift=pluck(a.grpxshift,a.grpXShift),c.grpYShift=pluck(a.grpyshift,a.grpYShift),c.xShift=pluck(a.xshift,a.xShift),c.yShift=pluck(a.yshift,a.yShift),c.color=a.color,c.alpha=a.alpha,c.isVisible=1===+(a.visible||1),c.font=pluck(a.font,b.basefont),c.link=a.link,c.fontSize=pluck(a.fontsize,a.fontSize,b.basefontsize),c.textAlign=pluck(a.textalign,a.textAlign),c.textVAlign=pluck(a.textvalign,a.textVAlign),c.rotateText=pluck(a.rotatetext,a.rotateText),c.wrapText=pluck(a.wraptext,a.wrapText),c.toolText=pluck(a.tooltext,a.toolText),c.link=a.link,c.showShadow=pluck(a.showshadow,a.showShadow),c.items=a.items,c.css=a.css,c.autoScale=pluck(a.autoscale,a.autoScale),c.scaleText=pluck(a.scaletext,a.scaleText),c.xScale=pluck(a.xscale,a.xScale),c.yScale=pluck(a.yscale,a.yScale),c.scaleImages=pluck(a.scaleimages,a.scaleImages),c.constrainedScale=pluck(a.constrainedscale),c.origH=pluck(a.origh,a.origH,b.origh),c.origW=pluck(a.origw,a.origW,b.origw),c.onAnnotationClick=a.onAnnotationClick,c.onAnnotationRollover=a.onAnnotationRollover,c.onAnnotationRollout=a.onAnnotationRollout,'object'==typeof a.component&&(c.component=a.component),c)if(c.hasOwnProperty(e)){let a=c[e];'undefined'==typeof a&&delete c[e]}return Array.isArray(d)&&(c.itemConfigs=d.map(function(a){return parseShapeConfiguration(a,c,b)})),c},mergeConfig=(a,b)=>{b.css=b.css||a.css,b.autoscale=pluck(b.autoscale,a.autoscale),b.animationLabel=pluck(b.animationLabel,a.animationLabel),b.constrainedscale=pluck(b.constrainedscale,a.constrainedscale),b.scaletext=pluck(b.scaletext,a.scaletext),b.scaleimages=pluck(b.scaleimages,a.scaleimages),b.xshift=pluck(b.xshift,a.xshift),b.yshift=pluck(b.yshift,a.yshift),b.grpxshift=pluck(b.grpxshift,a.grpxshift),b.grpyshift=pluck(b.grpyshift,a.grpyshift),b.origw=pluck(b.origw,a.origw),b.origh=pluck(b.origh,a.origh),b.showbelow=pluck(b.showbelow,a.showbelow,1),b.onAnnotationClick=a.onAnnotationClick,b.onAnnotationRollover=a.onAnnotationRollover,b.onAnnotationRollout=a.onAnnotationRollout},isRootGroupConfig=(a,b)=>'itemConfigs'!==b,getParsedConfig=(a={groups:[]},b={})=>{let c=a.groups||[];return c.map(c=>(mergeConfig(a,c),parseConfiguration(c,b)))};class AnnotationManager extends SmartRenderer{constructor(a){super(a),addDep({name:'annotationAnimation',type:'animationRule',extension:annotationAnimation}),raphaelShapesRingpath(getDep('redraphael','plugin')),raphaelShapesArcpath(getDep('redraphael','plugin')),this.groups=[],this.config.dependencies={},this._rawJSON={groups:[]}}getName(){return'annotation'}getType(){return'extension'}configureAttributes(a={groups:[]}){let b=this,c=b.config,d=b.getFromEnv('chart');b._rawJSON=extend2({},b._rawJSON,a),c.parsedConfigs=a.groups?getParsedConfig(a,d.config):[],c.parsedConfigs.forEach(a=>{b.attachChild(AnnotationGroup,'group',a.id).configure(a)}),b.groups=b.getChildren('group')||[]}addItem(a,b={}){let c,d,e,f=this,g=f._rawJSON;for(c in g.groups)if(g.groups[c].id===a){d=g.groups[c];break}return d?d.items=d.items||[]:(d={id:a,items:[]},g.groups.push(d)),d.items.push(b),f.setData(g,!0),e=f.retrieveGroup(a).items,e[e.length-1]}addGroup(a={}){let b,c=this,d=c._rawJSON;return d.groups.push(a),c.setData(d,!0),b=c.groups.length,c.groups[b-1]}addCustomGroup(a){a&&(this.config.customGroup=a)}update(a,b){let c,d,e,f,g=this,h={};if(a){for(d in b)h[d.toLowerCase()]=b[d]&&b[d].toString();return(c=g.retrieveItem(a)||g.retrieveGroup(a),!c||!c.getElement())?void 0:('undefined'==typeof h.visible&&(h.visible=c.config.isVisible),e=c.rawConfig,e=Object.assign(e,h),f=parseShapeConfiguration(e),f.isVisible=h.visible,c.setData(f),c)}}destroy(a){let b,c,d,e,f,g,h=this,k=h._rawJSON,l=!1;if(a){for(b=0,d=k.groups.length;b<d;b++)for(f=k.groups[b],c=0,e=(f.items||[]).length;c<e;c++)if(g=f.items[c],g.id===a){f.items.splice(c,1),l=!0;break}if(!l)for(b=0,d=k.groups.length;b<d;b++)f=k.groups[b],f.id===a&&k.groups.splice(b,1)}else k=h._rawJSON={groups:[]};h.setData(k)}clear(){this.destroy()}retrieveItem(a){let b,c,d;for(d in this.groups)if(b=this.groups[d].retrieveItem(a),b){c=b;break}return c}retrieveGroup(a){let b,c,d=this;for(b=0,c=d.groups.length;b<c;b++)if(d.groups[b].getId()===a)return d.groups[b]}show(a){let b;a?(b=this.retrieveItem(a)||this.retrieveGroup(a),b&&b.show()):this.groups.forEach(a=>{a.show()})}hide(a){let b;a?(b=this.retrieveItem(a)||this.retrieveGroup(a),b&&b.hide()):this.groups.forEach(a=>{a.hide()})}draw(){let a=this;a.addToEnv('snapPoints',getSnapPoints(a.getFromEnv('chart'))),a.addGraphicalElement({el:'group',attr:{name:'upperannotations'},component:a,container:{label:'group',id:'abovePlotGroup',isParent:!0},id:'upperAnnotationGroup',label:'group'}),a.addGraphicalElement({el:'group',attr:{name:'lowerannotations'},component:a,container:{label:'group',id:'belowPlotGroup',isParent:!0},id:'lowerAnnotationGroup',label:'group'})}}export default AnnotationManager;