UNPKG

quoslibero

Version:

FusionCharts JavaScript charting framework

1 lines 11.6 kB
import GanttAxis,{getCrispPath}from'./gantt';import{pluck,pluckNumber,setLineHeight,extend2,convertColor,getFirstColor}from'../lib';import{addDep}from'./../dependency-manager';import ganttCommonAnimation from'./gantt-common.animation';let UNDEF,lastHoverEle,hoverTimeout;const PXSTRING='px',NONE='none',UND_LINE='underline',HALF_SECOND=500,_hasElements=(a,b)=>{let c;for(c=0;c<a.length;c++)if(a[c].id===b)return a[c];return!1},_getAttribAsObj=a=>{var b,c={};for(b in a)a.hasOwnProperty(b)&&'string'==typeof a[b]&&!!a[b]&&(c[b]=a[b]);return c};function extractAttribToEnd(a,b){for(var c in a._attrib=extend2({},b),a._attrib=extend2(a._attrib,_getAttribAsObj(a)),a)a.hasOwnProperty(c)&&!!a[c]&&'object'==typeof a[c]&&'_attrib'!==c&&extractAttribToEnd(a[c],a._attrib)}addDep({name:'ganttCommonAnimation',type:'animationRule',extension:ganttCommonAnimation});class GantCommonAxis extends GanttAxis{constructor(){super(),this.components={}}getName(){return'GanttCommon'}_drawPlotLine(){var a,b,c,d,e=this,f=e.config,g=e.getFromEnv('chart'),h=g.getChildren('canvas')[0],j=g.config,k=e.getContainer('ganttPlotLineContainer'),l=h.canvasBottom||j.canvasBottom,m=h.canvasLeft||j.canvasLeft,n=h.canvasRight||j.canvasRight,o=h.canvasTop||j.canvasTop,p=e.getFromEnv('animationManager'),q=f.gridArr,r=e.getGraphicalElement('plotLine'),s=[];for(c=0,d=q.length;c<d;c+=1)q[c].x===UNDEF?s.push('M',m,q[c].y,'L',n,q[c].y):s.push('M',q[c].x,o,'L',q[c].x,l);a={"stroke-dasharray":f.plotLineDashStyle,"stroke-width":f.plotLineThickness,stroke:f.plotLineColor,path:s},b=p.setAnimation({el:r&&r[0]||'path',attr:a,container:k,label:'path',component:e}),r&&r[0]||e.addGraphicalElement('plotLine',b,!0)}_drawTrendLine(){var a,b,c,d,e,f,g,h,j,k,l,m,n,o,p,q,r,s,t,u,v=this,w=v.getComponentInfo('trend'),x=v.getFromEnv('toolTipController'),y=v.config,z=y.isOpposit,A=y.labelPadding,B=v.getFromEnv('chart'),C=B.getFromEnv('animationManager'),D=B.config,E=B.getChildren('canvas')[0],F=E.config.canvasTop+E.config.canvasHeight,G=E.config.canvasLeft||D.canvasLeft,H=E.config.canvasRight||D.canvasRight,I=E.config.canvasTop||D.canvasTop,J=y.drawTrendLabels,K=v.getGraphicalElement('trendlabels')||[],L=y.axisTrendContainerTop,M=y.axisTrendContainerBottom,N=y.axisDimention||{},O=v._isZoomed(),P=v.getVisibleConfig(),Q=-1*D.xOffset,R=v.getGraphicalElement('trendElems'),S=v.getGraphicalElement('trendlabels'),T=y.trendLines,U=y.vTrendLines;for(R||(R=[]),S||(S=[]),a=0;a<R.length;a++)t=_hasElements(R,a),t&&t.remove();if(U?l=z?(N.opposite||F)-(y.trendBottomPadding||0):(N.y||F)+(y.trendBottomPadding||0):(l=z?(N.opposite||G)+(A||0):(N.x||G)-(A||0),m=z?(N.x||H)+(A||0):(N.opposite||H)+(A||0)),O&&(p=Math.max(v.getPixel(P.minValue,{wrtVisible:!0}),v.getPixel(P.maxValue,{wrtVisible:!0})),q=Math.min(v.getPixel(P.minValue,{wrtVisible:!0}),v.getPixel(P.maxValue,{wrtVisible:!0}))),T||U)for(a=0;a<w.length;a++)b=w[a].marker,c=w[a].label,d={fill:b.fill||'',stroke:b.stroke||'',"stroke-width":b.strokeWidth,"stroke-dasharray":b.strokeDashArray,"shape-rendering":b.shapeRendering},e={fill:c.fill||'',text:c.text,"text-anchor":c.textAnchor,"text-bound":c.textBound},g=b.isZone,j=b.startValue,k=b.endValue,U?(f=v.getPixel(y.hasBreakPoints?v._getRelativeBreakValue(j):j,{wrtVisible:!0}),h=k?v.getPixel(y.hasBreakPoints?v._getRelativeBreakValue(k):k,{wrtVisible:!0}):0,f+=Q,h+=Q,e.y=l,e['vertical-align']='top',void 0!==k&&''!==k&&k!==j&&g?(d.path=['M',f,I,'L',f,F,'L',h,F,'L',h,I,'Z'],e.x=f+(h-f)/2):(n=k?getCrispPath(['M',f,I,'L',h,F],b.strokeWidth):getCrispPath(['M',f,I,'L',f,F],b.strokeWidth),d.path=n.path,e.x=k?h:f),O&&(!J||e.x>p||e.x<q)?(e.text='',e.visibility='hidden'):e.visibility='visible'):T&&(f=v.getPixel(j,{wrtVisible:!0}),h=k?v.getPixel(k,{wrtVisible:!0}):0,s=c.valueOnRight,k!==UNDEF&&''!==k&&k!==j&&g?(d.path=['M',G,f,'L',H,f,'L',H,h,'L',G,h,'Z'],e.x=s?m:l,e.y=f+(h-f)/2):(n=k?getCrispPath(['M',G,f,'L',H,h,'Z'],b.strokeWidth):getCrispPath(['M',G,f,'L',H,f,'Z'],b.strokeWidth),d.path=n.path,e.x=s?m:l,e.y=k?s?h:f:f),O&&(!J||e.y>p||e.y<q)?(e.text='',e.visibility='hidden'):e.visibility='visible'),r=w[a].showOnTop,o=B.config.is3D||1!==r&&1!==y.showTrendlinesOnTop?M:L,t=_hasElements(R,a),t=C.setAnimation({el:t||'path',attr:d,container:o,label:'path',component:v}).show(),u=S[a],u&&C.setAnimation({el:u,attr:e,label:'text',component:v}),_hasElements(R,a)||v.addGraphicalElement('trendElems',t,!0),t.id=a,''===c.toolText?x.disableToolTip(t):x.enableToolTip(t,c.toolText);else for(a=0;a<R.length;a++)t=_hasElements(R,a),t&&(t.remove(),K[a]&&K[a].remove())}_drawProcessAndDataTableStyleParser(a){let b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w=this,x=w.config,y=w.getFromEnv('chart'),z=w.getFromEnv('smartLabel'),A=w.getFromEnv('color-manager'),B=x.labels,C=B.style,D=a.elem||{},E=a.dimension,F=D._attrib||{},G=E.left,H=E.right,I=E.top,J=E.bottom;switch(a.type){case'category':case'datatable':case'process':b=pluck(F.font,C.fontFamily),c=pluck(F.fontsize,C.fontSize).replace(/px/i,'')+PXSTRING,e=pluck(+F.isitalic?'italic':UNDEF,C.fontStyle),f=convertColor(pluck(F.bgcolor?getFirstColor(F.bgcolor):UNDEF,A.getColor('categoryBgColor')),pluckNumber(F.bgalpha,100)),n=pluck(F.fontcolor?getFirstColor(F.fontcolor):UNDEF,C.color),o=pluckNumber(F.isunderline,0)&&UND_LINE||NONE,l=pluck(F.valign,'center').toLowerCase(),m=pluck(F.align,'middle').toLowerCase(),i=D.drawLabel||'',d=pluck(+F.isbold?'bold':UNDEF,C.fontWeight),u=D.link;break;case'header':b=pluck(F.headerfont,C.fontFamily),c=pluck(F.headerfontsize,C.fontSize).replace(/px/i,'')+PXSTRING,d=pluck(1===+F.headerisbold?'bold':F.headerisbold===UNDEF?'bold':UNDEF,C.fontWeight),n=pluck(F.headerfontcolor?getFirstColor(F.headerfontcolor):UNDEF,C.color),o=pluckNumber(F.headerisunderline,0)&&UND_LINE||NONE,e=pluck(F.headerisitalic?'italic':UNDEF,C.fontStyle),f=convertColor(pluck(F.headerbgcolor?getFirstColor(F.headerbgcolor):UNDEF,A.getColor('categoryBgColor')),pluckNumber(F.headerbgalpha,100)),l=pluck(F.headervalign,'center').toLowerCase(),m=pluck(F.headeralign,'middle').toLowerCase(),i=D.drawLabel||'',u=D.headerlink;}switch(a.type){case'category':x.gridLinePath+='M'+G+','+I+'L'+G+','+J+'L'+H+','+J,d=pluck(1===+F.isbold?'bold':F.isbold===UNDEF?'bold':UNDEF,C.fontWeight);break;case'datatable':case'process':x.gridLinePath+='M'+G+','+J+'L'+H+','+J+'L'+H+','+I;break;case'header':x.gridLineHeaderPath+='M'+G+','+J+'L'+H+','+J+'L'+H+','+I;}return p=pluck(D._attrib.hoverbandcolor,x.hoverColor),q=pluckNumber(D._attrib.hoverbandalpha,x.hoverAlpha),'left'===m?(g=G+2,m='start'):'right'===m?(g=G+(H-G)-2,m='end'):(m='middle',g=G+(H-G)/2),'top'===l?h=I-2:'bottom'===l?h=I+(J-I)-2:(l='middle',h=I+(J-I)/2),C={fontFamily:b,fontSize:c,fontWeight:d,fontStyle:e,textDecoration:o},v=setLineHeight(C),v=+v.replace(/px/i,''),v=J-I>v?J-I:v,z.useEllipsesOnOverflow(y.config.useEllipsesWhenOverflow),z.setStyle(C),k=z.getSmartText(i,H-G,v),j={textAttr:{x:g,y:h,text:k.text,fill:n,"text-anchor":m,"vertical-align":l,cursor:u?'pointer':y.getFromEnv('paper').canvas.style.cursor},css:C,rectAttr:{x:G,y:I,width:G<H?H-G:0,height:I<J?J-I:0,fill:f,"stroke-width":0,cursor:u?'pointer':y.getFromEnv('paper').canvas.style.cursor},eventArgs:{isHeader:'header'===a.type,label:i,vAlign:l,align:m,link:u,id:D.id},tooltext:k.oriText},'datatable'===a.type||'process'===a.type||'category'===a.type?(t=convertColor(p,q),r=pluckNumber(D._attrib.showhoverband,x.useHover),s=pluckNumber(D._attrib.showganttpanehoverband,x.usePlotHover,r),j.dataArgs={rollOverColor:t,useHover:r,usePlotHover:s,dimension:E,hoverEle:D,type:a.type,pos:a.pos,axis:w,groupId:a.elemIndex}):j.dataArgs={rollOverColor:UNDEF,useHover:0,usePlotHover:0,dimension:E,hoverEle:D,type:a.type,pos:a.pos,axis:w,groupId:a.elemIndex},j}_drawProcessAndDataTableElement(a){var b,c,d,e,f,g=this,h=g.config,i=g.getFromEnv('chart'),j=g.components.categoryElement||[],k=h.hoverElemsArr||(h.hoverElemsArr=[]),l=g.getFromEnv('animationManager'),m=a.elemIndex,n=h.labelHoverEventName,o=g.getFromEnv('toolTipController'),p=i.config.showtooltip,q=function(a){var b=this;i.plotEventHandler(b,a,n.click)},r=function(a){var b=this;hoverTimeout=clearTimeout(hoverTimeout),(!lastHoverEle||lastHoverEle.removed)&&(lastHoverEle=null),lastHoverEle&&g._gridOutHandler.call(lastHoverEle),g._gridHoverHandler.call(b),i.plotEventHandler(b,a,n.rollOver)},s=function(a){lastHoverEle=this,hoverTimeout=clearTimeout(hoverTimeout),hoverTimeout=setTimeout(()=>g._gridOutHandler.call(lastHoverEle),HALF_SECOND),i.plotEventHandler(lastHoverEle,a,n.rollOut)};'header'===a.type?(c=g.getContainer('headerBackContainer'),d=g.getContainer('headerTextContainer')):(c=g.getContainer('labelBackContainer'),d=g.getContainer('labelTextContainer')),b=g._drawProcessAndDataTableStyleParser(a),e=l.setAnimation({el:j[m]&&j[m].graphics.rect||'rect',attr:b.rectAttr,container:c,label:'rect',component:g}),f=l.setAnimation({el:j[m]&&j[m].graphics.label||'text',attr:b.textAttr,container:d,label:'text',component:g}),j[m]?(f.removeCSS(),c.appendChild(e),d.appendChild(f)):(g.addGraphicalElement('rectElement',e,!0),g.addGraphicalElement('textElement',f,!0),j[m]={},j[m].graphics={},j[m].config={},j[m].graphics.label=f,j[m].graphics.rect=e,e.hover(r,s).on('fc-click',q),f.hover(r,s).on('fc-click',q)),f.css(b.css),'header'!==a.type&&(!k[a.pos]&&(k[a.pos]=[]),k[a.pos].push({bgElem:e,bgColor:b.rectAttr.fill})),e.data('dataObj',a.elem).data('eventArgs',b.eventArgs).data('data',b.dataArgs),f.data('dataObj',a.elem).data('eventArgs',b.eventArgs).data('data',b.dataArgs),p?o.enableToolTip(f,b.tooltext):o.disableToolTip(f),g.components.categoryElement=j}_drawGridLine(){let a,b,c,d,e=this,f=e.config,g=e.getFromEnv('animationManager'),h=e.getGraphicalElement('gridLine')||[],j=0,k=0,l=2;for(a={"stroke-dasharray":f.lineDashStyle,"stroke-width":f.lineThickness,stroke:f.lineColor};k<l;k+=1){if(0==k)c=f.gridLinePath,d=e.getContainer('labelLineContainer');else if(c=f.gridLineHeaderPath,d=e.getContainer('headerLineContainer'),!c)continue;a.path=c,b=g.setAnimation({el:h&&h[j]||'path',attr:a,container:d,label:'path',component:e}),h&&h[j]||e.addGraphicalElement('gridLine',b,!0),j+=1}for(k=j,l=e.getGraphicalElement('gridLine').length;k<l;k+=1)e.getGraphicalElement('gridLine')[k].attr({path:'M0,0'})}_gridHoverHandler(){var a,b,c,d=this.data('data'),e=d.type,f=d.dimension,g=d.axis,h=g.getFromEnv('chart'),j=h.config,k=g.getFromEnv('animationManager'),l=g.config.hoverElemsArr||[],m=g.getContainer('ganttPlotHoverBandContainer'),n=g.getGraphicalElement('plotHoverElement'),o=n?1:0;if(a='category'===e?{x:f.left,y:j.canvasTop,width:f.left<f.right?f.right-f.left:0,height:j.height,fill:d.rollOverColor,"stroke-width":0}:{y:f.top,x:j.canvasLeft,height:f.top<f.bottom?f.bottom-f.top:0,width:j.width,fill:d.rollOverColor,"stroke-width":0},d.usePlotHover&&(n=k.setAnimation({el:n||'rect',attr:a,component:g,label:'rect',container:m}),o?n.show():g.addGraphicalElement('plotHoverElement',n)),d.useHover&&l[d.pos])for(b=0,c=l[d.pos].length;b<c;b+=1)k.setAnimation({el:l[d.pos][b].bgElem||'rect',attr:{fill:d.rollOverColor},label:'rect'})}_gridOutHandler(){var a,b,c,d=this.data('data'),e=d.axis,f=e.config.hoverElemsArr||[],g=e.getFromEnv('animationManager'),h=e.getGraphicalElement('plotHoverElement');if(d.usePlotHover&&h&&h.hide(),d.useHover&&f[d.pos])for(a=0,b=f[d.pos].length;a<b;a+=1)c=f[d.pos][a],g.setAnimation({el:c.bgElem||'rect',attr:{fill:c.bgColor},label:'rect'})}_disposeExtraProcessAndDataTableElement(a){var b,c,d=this,e=d.components.categoryElement||[];for(b=a,c=e.length;b<c;b+=1)e[b].graphics.label.attr({text:''}),e[b].graphics.rect.attr({x:0,y:0,width:0,heigth:0})}}export default GantCommonAxis;export{extractAttribToEnd};