quoslibero
Version:
FusionCharts JavaScript charting framework
1 lines • 14.7 kB
JavaScript
import Column from'../../../../fc-charts/src/dataset/column';import{extend2,parseConfiguration,pluck,pluckNumber,getFirstValue,parseTooltext,setLineHeight,TRACKER_FILL,getValidValue,parseUnsafeString,convertColor,toRaphaelColor,crispBound,getDarkColor,getFirstColor}from'../../../../fc-core/src/lib';import{addDep}from'../../../../fc-core/src/dependency-manager';import taskAnimation from'./task.animation';import{priorityList}from'../../../../fc-core/src/schedular';let UNDEF;const BLANK='',BOLD='bold',ITALIC='italic',NORMAL='normal',PROCESS='PROCESS_',ROLLOVER='DataPlotRollOver',ROLLOUT='DataPlotRollOut',align={left:'start',right:'end',center:'middle'},xAlign={left:0,right:1,center:.5,undefined:.5},alignGutter={left:5,right:-5,center:0,undefined:0},stylePropValues={fontWeight:['normal','bold'],fontStyle:['normal','italic']},hideFn=function(){this.hide()},defined=a=>a!==UNDEF&&null!==a,extractLabelStyle=a=>{let b,c;for(c in a)a[c]!==UNDEF&&(b=b||{},b[c]='fontWeight'===c||'fontStyle'===c?stylePropValues[c][a[c]]:a[c]);return b},isPercent=a=>/%/g.test(a),checkInvalidValue=function(){let a,b=0,c=arguments.length,d=!1;for(b=0;b<c;b++){if(a=arguments[b],isNaN(a))return!1;d=!0}return d};addDep({name:'taskAnimation',type:'animationRule',extension:taskAnimation});class Task extends Column{constructor(){super(),this.components={}}getName(){return'task'}__setDefaultConfig(){super.__setDefaultConfig();let a=this.config;a.showpercentlabel=UNDEF,a.showlabels=UNDEF,a.showborder=1,a.borderthickness=1,a.font='',a.fontcolor='',a.fontsize='',a.color='',a.alpha='100',a.angle=270,a.slackfillcolor=UNDEF,a.borderalpha='100',a.hoverfillcolor='',a.hoverfillalpha='100',a.slackhoverfillalpha='100',a.showstartdate=UNDEF,a.showenddate=UNDEF}configureAttributes(){let a=this,b=a.getFromEnv('dataSource'),c=extend2({},b.tasks&&b.tasks.length?b.tasks[0]:b.tasks||{});parseConfiguration(c,a.config,a.getFromEnv('chart').config,{task:!0}),a.components||(a.components={}),a._setConfigure(),a.setState('dirty',!0)}_setConfigure(a){let b,c,d,e,f,g,h,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F=this,G=F.config,H=F.getFromEnv('chart'),I=H.getChildren('yAxis')[0],J=I.config,K=F.getFromEnv('dataSource'),L=K.chart,M=K.tasks&&K.tasks.length?K.tasks[0]:K.tasks||{},N=a||M.length?M:M.task,O=N&&N.length,P=F.getFromEnv('color-manager'),Q=H.config,R=F.getFromEnv('number-formatter'),S=Q.taskbarfillmix,T=Q.taskbarfillratio,U=Q.showslackasfill,V=F.components.data,W=J.processes.processMap,X=J.processes.process.process,Y=Q.dateintooltip,Z={right:'right',left:'left',undefined:'center',center:'center'},$=H.components.tasksMap={},_=Q.style.inCanvasStyle,aa=pluckNumber(L.showtooltip,1),ba=Q.dataLabelStyle;if(V||(V=F.components.data=[]),G.showlabels=pluck(M.showlabels,M.showlabels,M.showname,L.showtasklabels,L.showtasknames,0),D=G.labelStyle=extractLabelStyle({fontSize:G.fontSize,fontFamily:G.font}),setLineHeight(G.labelStyle),O)for(e=0;e<O;e+=1)m=N[e],n=pluck(m.processid),n&&'string'==typeof n&&(n=n.toLowerCase()),B=m.id,b=m.percentcomplete,o=pluckNumber(m.alpha,G.alpha),s=pluck(m.color,G.color,P.getColor('plotFillColor')),p=pluckNumber(m.borderalpha,G.borderalpha,'100'),q=pluck(m.bordercolor,G.bordercolor,P.getColor('plotBorderColor')),r=getFirstValue(pluck(m.label,m.name),BLANK),g=P.parseColorMix(s,S),h=P.parseAlphaList(o.toString(),g.length),j=P.parseRatioList(T,g.length),t=pluckNumber(m.angle,G.angle),l=V[e]||(V[e]={config:{}}),C=l.config,C.index=e,C.link=m.link,C.processId=PROCESS+e,C.textColor=getFirstColor(pluck(m.fontcolor,G.fontcolor,_.color)),C.style=extractLabelStyle({fontSize:m.fontsize,fontFamily:m.font}),setLineHeight(C.style),E=C.style,C.lineHeight=pluck(E&&E.lineHeight,D&&D.lineHeight,ba&&ba.lineHeight),C.startMs=R.getDateValue(m.start).ms,C.endMs=R.getDateValue(m.end).ms,d=R.getFormattedDate(C.startMs),c=R.getFormattedDate(C.endMs),C.tAlpha=o,C.tBorderColor=q,C.tBorderAlpha=p,k=BLANK,C.percentComplete=b=Math.min(pluckNumber(m.percentcomplete,-1),100),C.labelAlign=Z[[pluck(m.labelalign,Q.tasklabelsalign).toLowerCase()]],C.showAsGroup=pluckNumber(m.showasgroup,0),u=C.showPercentLabel=pluckNumber(m.showpercentlabel,G.showpercentlabel),pluckNumber(m.showlabel,m.showname,G.showlabels)&&(k=r),u&&-1!==b&&(k+=' '+b+'%'),C.percentComplete=b,y={FCcolor:{color:g.join(),alpha:h,ratio:j,angle:t}},x=P.parseColorMix(pluck(m.slackfillcolor,G.slackfillcolor,Q.slackfillcolor),S),x=U?{FCcolor:{color:x.join(),alpha:h,ratio:j,angle:t}}:TRACKER_FILL,z={FCcolor:{color:P.parseColorMix(pluck(m.hoverfillcolor,G.hoverfillcolor,Q.taskhoverfillcolor,getDarkColor(s,80)),S).join(),alpha:P.parseAlphaList(pluck(m.hoverfillalpha,G.hoverfillalpha).toString(),g.length),ratio:j,angle:t}},A=convertColor(pluck(m.hoverbordercolor,G.hoverbordercolor,getDarkColor(q,80)),pluck(m.hoverborderalpha,G.hoverborderalpha,p)),w=U?{FCcolor:{color:P.parseColorMix(getDarkColor(pluck(m.slackhoverfillcolor,G.slackhoverfillcolor,Q.slackfillcolor),80),S).join(),alpha:P.parseAlphaList(pluck(m.slackhoverfillalpha,G.slackhoverfillalpha,'100').toString(),g.length),ratio:j,angle:t}}:TRACKER_FILL,C.color=toRaphaelColor(y),C.slackColor=toRaphaelColor(x),C.hoverFillColor=toRaphaelColor(z),C.hoverBorderColor=A,C.slackHoverColor=toRaphaelColor(w),C.showHoverEffect=pluckNumber(m.showhovereffect,G.showhovereffect,L.showhovereffect,1),C.taskHeight=pluck(m.height,'35%'),C.topPadding=pluck(m.toppadding,'35%'),C.showPercentLabel=u,C.endDate=pluckNumber(m.showenddate,G.showenddate)?c:UNDEF,C._endDate=c,C.startDate=pluckNumber(m.showstartdate,G.showstartdate)?d:UNDEF,C._startDate=d,C.shadow={opacity:Math.max(o,p)/100,inverted:!0},C.id=n,C.taskId=B,C.borderColor=convertColor(q,p),C.borderThickness=pluckNumber(m.showborder,G.showborder)?pluckNumber(m.borderthickness,G.borderthickness):0,v=getValidValue(parseUnsafeString(pluck(m.tooltext,G.hovertext,G.plottooltext,L.plottooltext))),aa&&(v===UNDEF?v=(r===BLANK?BLANK:r+(Y?', ':BLANK))+(Y?d+' - '+c:BLANK):(f=W[n]?W[n].catObj.label||W[n].catObj.name:X[e]&&(X[e].label||X[e].name),v=parseTooltext(v,[3,28,29,30,31],{end:c,start:d,label:r,percentComplete:-1===b?BLANK:R.percentValue(b),processName:f},G))),C.label=k,C.toolText=v,'string'==typeof B&&(B=B.toLowerCase()),B!==UNDEF&&($[B]=V[e]);pluckNumber(M.visible,1)?F.setState('visible',!0):F.setState('visible',!1)}slackElemHandlers(a,b){var c=this;a&&a.on('fc-click',function(a){let c=this;b.plotEventHandler(c,a)}).hover(function(a){let d=this,e=d.data('dataObj');b.plotEventHandler(d,a,ROLLOVER),e.config.showHoverEffect&&c.taskHoverHandler.call(d,b)},function(a){let d=this,e=d.data('dataObj');b.plotEventHandler(d,a,ROLLOUT),e.config.showHoverEffect&&c.taskHoverOutHandler.call(d,b)})}trimData(a){if(!this.config.JSONData)return;let b,c,d=this,e=d.config,f=e&&e.context,g=f&&f.prevCatlen,h=d.getFromEnv('xAxis'),i=h.getProcessLen(),j=g-i,k=e.JSONData,l=k.task&&k.task.length,m=a.task&&a.task.length||0,n=l-m;j>n?(b=j,c=i):(b=n,c=m),0<b&&this.removeData(c,b,!1)}getAxisValuePadding(){return this.config.defaultPadding}drawLabel(){var a,b,c,d,e,f,g,h,j,k,l,m,n,o,p=this,q=p.getFromEnv('chart'),r=p.getFromEnv('animationManager'),s=p.components.data,t=p.getContainer('dataLabelContainer'),u=s.length;for(o=0;o<u;o++)j=s[o],g=j.config,h=j.graphics,k=g.eventArgs,a=h.valElem,defined(g.label)&&g.label!==BLANK?(l=g._labelTextAttr,d=h.valElem=r.setAnimation({el:a||'text',attr:l,container:t,component:p}),a?(d.removeCSS(),d.show()):(d.data('dataset',p),p.slackElemHandlers(d,q)),d.css(g.style),d.data('dataObj',j).data('dataObj',j).data('eventArgs',k)):a&&r.setAnimation({el:a,component:p,callback:hideFn,doNotRemove:!0}),b=h.startValElem,defined(g.startDate)&&g.startDate!==BLANK?(m=g._startLabelTextAttr,e=h.startValElem=r.setAnimation({el:b||'text',attr:m,container:t,component:p}),b?(e.removeCSS(),e.show()):(e.data('dataset',p),p.slackElemHandlers(e,q)),e.css(g.style),e.data('dataObj',j).data('chart',q).data('eventArgs',k)):b&&r.setAnimation({el:b,component:p,callback:hideFn,doNotRemove:!0}),c=h.endValElem,defined(g.endDate)&&g.endDate!==BLANK?(n=g._endLabelTextAttr,f=h.endValElem=r.setAnimation({el:c||'text',attr:n,container:t,component:p}),c?(f.removeCSS(),f.show().css(g.style)):(f.data('dataset',p),p.slackElemHandlers(f,q)),f.data('dataObj',j).data('chart',q).data('eventArgs',k)):c&&r.setAnimation({el:c,component:p,callback:hideFn,doNotRemove:!0})}taskHoverHandler(){let a=this,b=a.data('dataObj')||{},c=a.data('dataset'),d=c.components.data,e=b.config||{},f=e.index,g=d[f]&&d[f].graphics,h={fill:e.hoverFillColor,stroke:e.hoverBorderColor};-1===e.percentComplete||e.showAsGroup||(g.slackElem.attr({fill:e.slackHoverColor}),g.taskFill.attr({fill:e.hoverFillColor}),delete h.fill),g.element.attr(h)}taskHoverOutHandler(){let a=this,b=a.data('dataObj')||{},c=a.data('dataset')||{},d=c.components.data,e=b.config||{},f=e.index,g=d[f]&&d[f].graphics,h={fill:e.color,stroke:e.borderColor,"stroke-width":e.borderThickness,"stroke-dasharray":e.dashedStyle};-1===e.percentComplete||e.showAsGroup||(g.slackElem.attr({fill:e.slackColor}),g.taskFill.attr({fill:e.color}),delete h.fill),g.element.attr(h)}parsePlotAttributes(a,b){let c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,y,z,A,B,C,D=this,E=D.getFromEnv('chart'),F=E.getFromEnv('dataSource'),G=E.config,H=G.canvasTop,I=E.getChildren('xAxis')[0],J=E.getChildren('yAxis')[0],K=b,L=G.datepadding,M=G.viewPortConfig,N=M.x,x=F.processes.process&&F.processes.process.length,O=M.scaleX,P=G.taskbarroundradius;if(c=a&&a.config,a.graphics||(a.graphics={}),e=c&&c.startMs,f=c&&c.endMs,'undefined'!=typeof a&&'undefined'!=typeof e&&null!==f)return v=c.taskHeight,g=c.link,o=c.borderThickness,i=c.id,t=c.color,C=c.lineHeight,K>x-1&&(K=0),B='undefined'==typeof c.id?J.getProcessPositionByIndex(K):J.getProcessPositionById(i),K++,j=B.height,u=j*(isPercent(c.topPadding)&&.01*parseFloat(c.topPadding,10))||pluckNumber(c.topPadding,j),h=c.height=j*(isPercent(v)&&.01*parseFloat(v,10))||pluckNumber(v,j),m=c.xPos=I.getPixel(c.startMs)+N*O,d=I.getPixel(c.endMs)+N*O,k=c.width=Math.abs(l=d-m),n=B.bottom+H-j,n=c.yPos=n+Math.min(u,j-h),r=.5*h,q=crispBound(m,n,k,h,o),m=q.x,n=q.y,k=q.width,h=q.height,!1===checkInvalidValue(m,n,k,h)?void(c.inValidValue=!0):void(c.props={element:{},perComElem:{},slackElem:{}},p=c.showAsGroup?{path:['M',m,n,'V',n+h,'L',m+r,n+r,'H',m+k-r,'L',m+k,n+h,'V',n,'H',m]}:{x:q.x,y:q.y,width:q.width||1,height:h},Object.assign(p,{fill:t,stroke:c.borderColor,cursor:g?'pointer':BLANK,r:P,"stroke-width":o,width:q.width||1}),c.eventArgs={processId:c.processId,taskId:c.taskId,start:c._startDate,end:c._endDate,showAsGroup:c.showAsGroup,link:c.link,sourceType:'task',percentComplete:-1!==c.percentComplete},-1!==c.percentComplete&&!c.showAsGroup&&(l=.01*(k*c.percentComplete),t=TRACKER_FILL,c.props.perComElem={attr:{x:m,y:n,height:h,width:l,fill:c.color,cursor:g?'pointer':BLANK,"stroke-width":0}},c.props.slackElem={attr:{x:m+l||1,y:n,width:k-l,height:h,fill:c.slackColor,cursor:g?'pointer':BLANK,"stroke-width":0}},p.fill=t),s=c.labelAlign,w=c._labelTextAttr||(c._labelTextAttr={}),c.props.element.attr=p,w.x=m+k*xAlign[s]+alignGutter[s],w.y=n-.5*parseInt(C,10)-G.tasklabelspadding,w.text=c.label,w.direction=G.textDirection,w['text-anchor']=align[s],w.cursor=A,w.fill=c.textColor,w['line-height']=C,z=c._startLabelTextAttr||(c._startLabelTextAttr={}),z.x=m-2-L,z.y=n+.5*h,z.text=c.startDate,z['text-anchor']='end',z.cursor=A,z.direction=G.textDirection,z.fill=c.textColor,z['line-height']=C,y=c._endLabelTextAttr||(c._endLabelTextAttr={}),y.x=m+k+2+L,y.y=n+.5*h,y.text=c.endDate,y.cursor=A,y.direction=G.textDirection,y['text-anchor']='start',y.fill=c.textColor,y['line-height']=C,c.cursor=A)}allocatePosition(){let a,b,c=this,d=c.components.data||[],e=d.length;for(a=0;a<e;a++)b=d[a],c.parsePlotAttributes(b,a)}_removeDataVisuals(a){let b,c,d,e=this,f=e.getFromEnv('animationManager');if(a)for(b in c=a.graphics,c)d=c[b],d&&f.setAnimation({el:d,component:e})}draw(){let a,b,c,d,e,f,g,h,j,k,l,m,n,o,p,q,r=this,s=r.getState('visible'),t=r.getFromEnv('chart'),u=r.getFromEnv('toolTipController'),v=t.config,w=t.getChildren('canvas')[0],x=r.getFromEnv('animationManager'),y=w.getChildContainer('taskGroup'),z=r.components,A=z.data,B=z.removeDataArr,C=B&&B.length,D=t.getChildContainer('datalabelsGroup'),E=w.getContainer('labelsGroup'),F=r.getContainer('dataLabelContainer'),G=r._contextChanged(),H=r.getContainer('taskColumnContainer'),I=r.getContainer('taskColumnShadowContainer'),J=v.showshadow,K=r.config;if(r.getState('removed')||r.getState('dirty')||G&&s){for(H||(H=r.addContainer('taskColumnContainer',x.setAnimation({el:'group',attr:{name:'columns'},container:y,component:r}))),s?H.show():H.hide(),E||(E=w.addContainer('labelsGroup',x.setAnimation({el:'group',attr:{name:'task-plot-labels'},container:D,component:w}))),F?F.removeCSS():F=r.addContainer('dataLabelContainer',x.setAnimation({el:'group',attr:{name:'labels'},container:E,component:r})),s?F.show():F.hide(),E=x.setAnimation({el:E,attr:{transform:'T'+-t.config.xOffset+',0'},component:w}),F.css(K.labelStyle),I||(I=r.addContainer('taskColumnShadowContainer',x.setAnimation({el:'group',attr:{name:'shadow'},container:y,component:r}).toBack()),!s&&I.hide()),b=A.length,a=0;a<b;a++)(c=A[a],d=c&&c.config,c.graphics||(c.graphics={}),e=c.graphics,f=d&&d.startMs,g=d&&d.endMs,'undefined'!=typeof c&&'undefined'!=typeof f&&null!==g)&&(h=d.toolText,!d.inValidValue)&&(j=e.element,o=d.showAsGroup?'path':'rect',j&&j.type!==o&&(j.remove(),j=e.element=null),p=d.props.element.attr,e.element=x.setAnimation({el:j||o,label:o,attr:p,container:H,component:r}),j||(j=e.element,j.data('dataset',r),r.slackElemHandlers(j,t)),q=d.eventArgs,-1===d.percentComplete||d.showAsGroup?(e.taskFill&&x.setAnimation({el:e.taskFill,component:r,callback:hideFn,doNotRemove:!0}),e.slackElem&&x.setAnimation({el:e.slackElem,component:r,callback:hideFn,doNotRemove:!0})):(l=e.taskFill,n=e.slackElem,k=e.taskFill=x.setAnimation({el:l||'rect',attr:d.props.perComElem.attr,container:H,component:r}),!l&&r.slackElemHandlers(k,t),m=e.slackElem=x.setAnimation({el:n||'rect',attr:d.props.slackElem.attr,container:H,component:r}),!n&&r.slackElemHandlers(m,t),k.show(),k.data('chart',t).data('dataObj',c).data('dataset',r),u.enableToolTip(k,h),m.show(),k&&k.data('eventArgs',q),m&&m.data('eventArgs',q).data('dataObj',c).data('dataset',r).data('chart',t)),j.show().shadow({opacity:J},I).data('dataObj',c).data('chart',t).data('dataset',r).data('eventArgs',q),u.enableToolTip(j,h));for(r.drawn?r.drawLabel():r.addJob('drawLabel',r.drawLabel.bind(r),priorityList.label),r.drawn=!0,a=0;a<C;a++)r._removeDataVisuals(B.shift())}}}export{checkInvalidValue,extractLabelStyle,hideFn};export default Task;