quoslibero
Version:
FusionCharts JavaScript charting framework
1 lines • 10.9 kB
JavaScript
import LineDataset from'../../../../fc-charts/src/dataset/line';import{pluck,pluckNumber,toRaphaelColor,getDashStyle,hasTouch,TOUCH_THRESHOLD_PIXELS,CLICK_THRESHOLD_PIXELS,fcEach,polyPathToPath}from'../../../../fc-core/src/lib';import{addDep}from'../../../../fc-core/src/dependency-manager';import kagiAnimation from'./index.animation';let UNDEF,POSITION_TOP='top',POSITION_BOTTOM='bottom',POSITION_MIDDLE='middle',POSITION_RIGHT='right',ROUND='round',EVENTARGS='eventArgs',SETROLLOVERATTR='setRolloverAttr',SETROLLOUTATTR='setRolloutAttr',defined=function(a){return a!==UNDEF&&null!==a},M='M',H='H',V='V',HTP=hasTouch?TOUCH_THRESHOLD_PIXELS:CLICK_THRESHOLD_PIXELS,NONE='none';addDep({name:'kagiAnimation',type:'animationRule',extension:kagiAnimation});class KagiDataset extends LineDataset{constructor(){super(),this.manageSpace=function(){},this.drawCommonElements=function(){}}getType(){return'dataset'}getName(){return'kagi'}_parseShadowOptions(){var a=this,b=a.getFromEnv('chart'),c=a.config,d=b.getFromEnv('dataSource').chart;return{opacity:pluckNumber(d.showshadow,1)?c.alpha/100:0}}configureAttributes(a){var b=Math.abs;super.configureAttributes(a);var c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P=this,Q=P.getFromEnv('chart'),R=P.getFromEnv('xAxis'),S=0,T=[],U=0;for(c=P.components,e=c.data,f=P.config,g=P.config.JSONData.data,h=Q.getFromEnv('dataSource').chart,i=f.maxValue,j=f.minValue,d=c.removeDataArr||(c.removeDataArr=[]),k=!1,l=0,m=pluckNumber(h.reversalvalue,-1),n=pluckNumber(h.reversalpercentage,5),w=0;w<e.length;w+=1)e[w].config.__nullCount=U,null===e[w].config.setValue&&(d.push(e.splice(w,1)[0]),U++,w-=1);if(e.length){for(f.rallyColor=pluck(h.rallycolor,'FF0000'),f.rallyAlpha=pluckNumber(h.rallyalpha,h.linealpha,100),f.declineColor=pluck(h.declinecolor,'0000FF'),f.declineAlpha=pluckNumber(h.declinealpha,h.linealpha,100),f.canvasPadding=pluckNumber(h.canvaspadding,15),f.maxHShiftPercent=pluckNumber(h.maxhshiftpercent,10),f.rallyThickness=pluckNumber(h.rallythickness,h.linethickness,2),o=pluckNumber(h.rallydashlen,h.linedashlen,5),p=pluckNumber(h.rallydashgap,h.linedashgap,4),f.declineThickness=pluckNumber(h.declinethickness,h.linethickness,2),q=pluckNumber(h.declinedashlen,h.linedashlen,5),r=pluckNumber(h.declinedashgap,h.linedashgap,4),f.lineDashed={true:pluckNumber(h.rallydashed,h.linedashed,0),false:pluckNumber(h.declinedashed,h.linedashed,0)},f.rallyDashed=pluckNumber(h.rallydashed,h.linedashed,0)?getDashStyle(o,p):NONE,f.declineDashed=pluckNumber(h.declinedashed,h.linedashed,0)?getDashStyle(q,r):NONE,f.canvasPadding=pluckNumber(h.canvaspadding,this.canvasPadding,15),m=0<m?m:n*(i-j)/100,s=e[0].config.setValue,u=function(a,b){for(var c,d=1,f=e[0].config.setValue;d<a;)c=e[d].config.setValue,b?c<=f&&(e[d].config.isDefined=!1):c>=f&&(e[d].config.isDefined=!1),d+=1;e[0].config.vAlign=b?POSITION_BOTTOM:POSITION_TOP,e[0].config.align='center'},v=g.length,(w=0,x=0);x<v;x+=1,w+=1)if((y=g[x],!(y&&y.vline))&&(C=e[w]&&e[w].config,z&&(z=!1),C&&(C.isDefined=!0),w&&C)){if(C.isShift=UNDEF,A=e[w-1].config,C.vAlign=POSITION_MIDDLE,C.align=POSITION_RIGHT,C.showLabel=!1,B=null,F=C.setValue,D=e[w+1]&&e[w+1].config.setValue,E=b(s-F),k?F<H&&G?G=!1:F>I&&!G&&(G=!0):(F>s&&E>m?(G=!0,H=s,I=null,J=!0,k=!0,u(w,G)):F<s&&E>m?(G=!1,H=null,I=s,J=!1,k=!0,u(w,G)):(G=null,J=null,k=!1),defined(A)&&(A.isRally=G),null!==G&&(e[0].config.isRally=G)),C.isRally=G,(J&&F<s||!J&&F>s)&&(B=s),L=B||F,E=b(L-D),K=null===J?null:J?L>D&&E>=m:L<D&&E>=m,A&&A.isShift)for(J?(H=s,N=POSITION_BOTTOM):!J&&(I=s,N=POSITION_TOP),O='center',M=w;1<M;M-=1)if(e[M].y==s){e[M].vAlign=N,e[M].align=O,e[M].showLabel=!0;break}K?(l+=1,z=!0,J=!J,C.isShift=!0,s=L,T.push(g[w+C.__nullCount]),S=P._appendCategory(S,w,T,0)):J&&F>s||!J&&F<s?s=F:B=s,C.plotValue=B,C.objParams={isRally:G,lastHigh:I,lastLow:H,isRallyInitialised:k}}P._appendCategory(S,w,T,1),T.push(y),R.setTickValues(T),f.shiftCount=l+1}}_appendCategory(a,b,c,d){var e,f,g,h,j=this,k=j.config.JSONData.catData;if(a<k.length)for(e=a;e<k.length;e+=1,a=e){if(f=k[e],g=f.data,h=f.index-(e+1),h<b)g.lineposition=pluckNumber(g.lineposition,d);else if(h>b)break;c.push(g)}return a}_getHoveredPlot(a,b){var c,d,e,f,g,h,k,l=this,m=l.getFromEnv('xAxis'),n=l.config,o=n.trackIndex,p=l.components.data,q=p.length;for(a+=m.getTranslation(),g=Math.floor(Math.max(m.getValue(a-n.maxRadius),0)),h=Math.ceil(Math.min(m.getValue(a+n.maxRadius),q-1)),d=h;d>=g;d--)for(k=o[d],q=k&&k.length,c=q;0<=c;c--)if(e=k[c],f=l.isWithinShape(p[e],e,a,b),f)return f}getClip(a){let b=this,c=b.getFromEnv('chart'),d=c.getChildren('canvas')[0],e=d.config,f=[e.canvasLeft,e.canvasTop,0,e.canvasTop+e.canvasHeight];return f[2]+='init'===a?0:e.canvasLeft+e.canvasWidth,f}parsePlotAttributes(a,b){let c,d,e,f,g,h,j,k,l,m,n,o,p,q,r,s,t=b,i=this,u=i.config.JSONData,v=i.config,w=i.getFromEnv('xAxis'),x=i.components.data,y={},z=i.getState('visible');a=a.config,l=x[t],r=l.config,c=a.trackerConfig={},p=r.hoverEffects,h=r.setValue,k=r.displayValue,d=l._xPos=w.getPixel(a.plotX),e=l._yPos=a.plotY,l._index=a.plotX,y=r.anchorProps,q=y.symbol,f=a.finalTooltext=a.toolText,g=r.setLink,e!==UNDEF&&!isNaN(e)&&a.isDefined&&(j=a.eventArgs=a.eventArgs||{},j.index=t,j.link=g,j.value=h,j.displayValue=k,j.categoryLabel=r.label,j.toolText=f,j.id=v.userID,j.datasetIndex=0,j.datasetName=u.seriesname,j.visible=z,m=n={},y.imageUrl&&(r.anchorImageLoaded=!1),s={path:polyPathToPath([q[1]||2,d,e,y.radius,y.startAngle,0]),fill:toRaphaelColor({color:y.bgColor,alpha:y.bgAlpha}),stroke:toRaphaelColor({color:y.borderColor,alpha:y.borderAlpha}),"stroke-width":y.borderThickness,visibility:y.radius?z:'hidden'},o=Math.max(y.radius,p&&p.anchorRadius||0,HTP)+y.borderThickness/2,c.trackerRadius=o,p.enabled&&(n={path:polyPathToPath([p.anchorSides||2,d,e,p.anchorRadius,p.startAngle,p.dip]),fill:toRaphaelColor({color:p.anchorColor,alpha:p.anchorBgAlpha}),stroke:toRaphaelColor({color:p.anchorBorderColor,alpha:p.anchorBorderAlpha}),"stroke-width":p.anchorBorderThickness},m={path:polyPathToPath([y.sides,d,e,y.radius,y.startAngle,0]),fill:toRaphaelColor({color:y.bgColor,alpha:y.bgAlpha}),stroke:toRaphaelColor({color:y.borderColor,alpha:y.borderAlpha}),"stroke-width":y.borderThickness},p.attrs={hoverEnabled:p.enabled,anchorRadius:y.radius,anchorHoverRadius:p.anchorRadius},p.attrs[SETROLLOVERATTR]=n,p.attrs[SETROLLOUTATTR]=m,y.isAnchorHoverRadius=p.attrs.anchorRadius)),a.props={element:{attr:s}}}parseLabelAttributes(a,b){var c,d,e,f,g,h,j,k,l,m,n,o,p,q,r,s,t,u,v=this,w=v.getFromEnv('chart'),x=w.config,y=v.getFromEnv('smartLabel'),z=w.config.dataLabelStyle,A='',B=x.rotatevalues?270:0,C=x.canvasTop,D=x.canvasHeight,E=C+D,F={},G={},H=b,i=v.components.data.length;return m=a&&a.config,t=m&&m.setValue,a===UNDEF||t===UNDEF||null===t||!0===m.labelSkip?void(m&&delete m.labelSkip):void(0<b&&(G={x:v.components.data[H-1]._xPos,y:v.components.data[H-1]._yPos}),b<i-1&&(F={x:v.components.data[H+1]._xPos,y:v.components.data[H+1]._yPos}),l=m.anchorProps,e=a.graphics,p=a._yPos||a.config._Py,o=a._xPos||a.config._Px,s=e.element?e.image&&.5*e.element.attr('height')||l.radius-3:0,c=x.valuepadding+2+s,A=m.displayValue,r=m.showValue,defined(A)&&''!==A&&null!==q&&r&&(u={text:A,fill:z.color,"text-bound":[z.backgroundColor,z.borderColor,z.borderThickness,z.borderPadding,z.borderRadius,z.borderDash]},d=y.getOriSize(A),B?(m._state={labelWidth:d.height,labelHeight:d.width},m._rotated=!0):(m._state={labelWidth:d.width,labelHeight:d.height},m._rotated=!1),f=g=B?d.width:d.height,f+=c,k=.5*g+c,h=p,j=o,f+=4,n=1<=+B?d.height:d.width,m._valueBelowPoint=0,F.y>h?G.y<h?j-=c+3+.5*n:p-f<C?(j-=c+3+.5*n,h=C+f/2):h-=k:G.y>h?j-=c+3+.5*n:p+f>E?(j-=c+3+.5*n,h=E-f/2):(h+=k+2,m._valueBelowPoint=1),u.x=j,u.y=h),m.props=m.props||{},m.props.label={attr:u})}allocatePosition(){var a=Math.round;let b,c,d,e,f,g,h,j,k,l,m,n=this,o=n.config,p=n.components,q=p.data,r=q&&q.length,s=n.getFromEnv('xAxis'),t=n.components.data,u=s.getPixel(0),v=s.getPixel(1),w=v-u,x=o.rallyThickness,y=o.declineThickness,z={true:x,false:y},A=s.getPixel(0),B=q[0]&&!!q[0].isRally,C=u-w/2;if(o.imagesLoaded=0,!!q.length){if(f=o.rallyPath=[],g=o.declinePath=[],t=n.components.data=t||[],!q[0].config.setValue){for(b=1;b<r;b+=1)if(c=q[b].config.setValue,c){j=q[b].config.plotY;break}}else j=q[0].config.plotY;for(B=!!q[0].config.isRally,k=a(j)+z[B]%2/2,B?f.push(M,C,k,H,A):g.push(M,C,k,H,A),fcEach(q,function(b,k){b=b.config,d=t[k],e=d.config,c=e.setValue,l=q[k+1]&&q[k+1].config||{},l&&(m=[M,A,j],B=b.isRally,b.isShift&&(A+=w,j=b.graphY,m.push(H,A),m[2]=a(m[2])+z[B]%2/2,m=m.toString(),B?f.push(m):g.push(m),m=[M,A,j]),l.isChanged&&(j=l.ty,m.push(V,j),m[1]=a(m[1])+z[!!B]%2/2,m=m.toString(),B?f.push(m):g.push(m),m=[M,A,j]),h=l.isRally,l.graphY!==m[2]&&l.graphY!==UNDEF&&(m.push(V,l.graphY),m[1]=a(m[1])+z[!!h]%2/2,m=m.toString(),h?f.push(m):g.push(m)),l.graphY&&(j=l.graphY)),n.parsePlotAttributes(d,k)}),b=0;b<q.length;b++)n.parseLabelAttributes(t[b],b)}}drawPlots(){let a,b,c,d,e,f,g,h,i,j,k,l=this,m=l.getGraphicalElement(),n=l.getFromEnv('animationManager'),o=l.config,p=o.trackIndex={},q=l.components,r=q.data,s=l.components.data,t=o.shadow,u={},v=o.rallyThickness,w=o.declineThickness,x={stroke:toRaphaelColor({color:o.rallyColor,alpha:o.rallyAlpha}),"stroke-linecap":ROUND,"stroke-linejoin":ROUND,"stroke-width":v,"stroke-dasharray":o.rallyDashed},y={stroke:toRaphaelColor({color:o.declineColor,alpha:o.declineAlpha}),"stroke-linecap":ROUND,"stroke-linejoin":ROUND,"stroke-width":w,"stroke-dasharray":o.declineDashed},z=m.rallyElem,A=m.declineElem,B=l.getContainer('commonElemsGroup'),C=l.getContainer('plotGroup'),D=l.getContainer('shadowGroup');if(!r.length)return h&&h.hide(),void(i&&i.hide());h&&h.show(),i&&i.show();fcEach(r,function(h,m){h=h.config,d=s[m],g=d.config,a=d.graphics,k=a.image,e=g.hoverEffects,b=d._yPos,p[h.plotX]||(p[h.plotX]=[]),p[h.plotX].push(m),d._index=h.plotX,u=g.anchorProps,f=u.shadow,b!==UNDEF&&!isNaN(b)&&h.isDefined?(u.imageUrl?l.drawAnchorImage(d):(k&&k.hide(),c=a.element,j=h.props.element.attr,c=a.element=n.setAnimation({el:c||'path',attr:j,container:C,component:l,label:'anchor'}),c.show().shadow(f,D).data('anchorRadius',u.radius).data('anchorHoverRadius',e.anchorRadius).data('hoverEnabled',e.enabled).data(EVENTARGS,h.eventArgs)),e.enabled&&c&&c.data('anchorRadius',u.radius).data('anchorHoverRadius',e.anchorRadius).data('hoverEnabled',e.enabled).data(SETROLLOVERATTR,e.attrs[SETROLLOVERATTR]).data(SETROLLOUTATTR,e.attrs[SETROLLOUTATTR]).data(EVENTARGS,h.eventArgs)):(a.element&&a.element.hide(),k&&k.hide())}),x.path=o.rallyPath,h=n.setAnimation({el:z||'path',attr:x,container:B,component:l,label:'line'}),h.shadow(v&&t,D),z||l.addGraphicalElement('rallyElem',h),y.path=o.declinePath,i=n.setAnimation({el:A||'path',attr:y,container:B,component:l,label:'line'}),i.shadow(w&&t,D),A||l.addGraphicalElement('declineElem',i)}}export default KagiDataset;