UNPKG

zingchart

Version:

Our JavaScript charting library is a commercial product. But the full branded version is free to try, forever.

8 lines (7 loc) 16.3 kB
/* All of the code within the ZingChart software is developed and copyrighted by ZingChart, Inc., and may not be copied, replicated, or used in any other software or application without prior permission from ZingChart. All usage must coincide with the ZingChart End User License Agreement which can be requested by email at support@zingchart.com. Build 2.9.16-hf1 */ zingchart.setModule("bubble-pack"),function(){function e(e,t,i,r){this.iX=e,this.iY=t,this.iR=i,this.H5=r}function t(e){this.oNext=null,this.oPrev=null,this.oValue=e}function i(){this.oFirst=null,this.ER=null}i.prototype.setup=function(e){for(var t=0;t<e.length;t++)this.add(e[t])},i.prototype.isEmpty=function(){return null===ZC._n_(this.oFirst)},i.prototype.add=function(e){var i=new t(e);null===ZC._n_(this.oFirst)?(this.oFirst=i,this.ER=i):(i.oPrev=this.ER,this.ER.oNext=i,this.ER=this.ER.oNext)},i.prototype.remove=function(e){if(this.oFirst.oValue===e)null!==ZC._n_(this.oFirst.oNext)?(this.oFirst=this.oFirst.oNext,this.oFirst.oPrev=null):(this.oFirst=null,this.ER=null);else if(this.ER.oValue===e)null!==ZC._n_(this.ER.oPrev)?(this.ER=this.ER.oPrev,this.ER.oNext=null):(this.oFirst=null,this.ER=null);else if(!this.isEmpty())for(var t=this.oFirst;null!==ZC._n_(t);){if(t.oValue===e){t.oPrev.oNext=t.oNext,t.oNext.oPrev=t.oPrev;break}t=t.oNext}},i.prototype.insertAfter=function(e,i){if(!this.isEmpty())for(var r=this.oFirst;null!==ZC._n_(r);){if(r.oValue===i.oValue){var a=new t(e);a.oPrev=r,a.oNext=r.oNext,null!==ZC._n_(r.oNext)&&(r.oNext.oPrev=a),r.oNext=a,null===ZC._n_(a.oNext)&&(this.ER=a);break}r=r.oNext}},i.prototype.iterate=function(e){var t=[];if(!this.isEmpty())for(var i=this.oFirst;null!==ZC._n_(i);)e.call(this,i)&&t.push(i),i=i.oNext;return t};var r=function(){};r.prototype.distanceBetweenNodes=function(e,t){return Math.sqrt((e.iX-t.iX)*(e.iX-t.iX)+(e.iY-t.iY)*(e.iY-t.iY))},r.prototype.distanceFromOrigin=function(e){return Math.sqrt(e.iX*e.iX+e.iY*e.iY)},r.prototype.createNewNode=function(t,i,r){var a=Math.atan2(i.iY-t.iY,i.iX-t.iX),n=Math.acos((this.distanceBetweenNodes(t,i)*this.distanceBetweenNodes(t,i)+(t.iR+r)*(t.iR+r)-(i.iR+r)*(i.iR+r))/(2*(t.iR+r)*this.distanceBetweenNodes(t,i))),o=new e(t.iX+(t.iR+r)*Math.cos(a+n),t.iY+(t.iR+r)*Math.sin(a+n),r,0),l=new e(t.iX+(t.iR+r)*Math.cos(a-n),t.iY+(t.iR+r)*Math.sin(a-n),r,0);return o.H5=this.distanceFromOrigin(o),l.H5=this.distanceFromOrigin(l),[o,l]},r.prototype.setup=function(t,r,a){var n=[new e(0,0,t,0),new e(t+r,0,r,0)],o=this.createNewNode(n[0],n[1],a);o[0].iY<0?n.push(o[0]):n.push(o[1]);var l=t+r,s=t+a,u=r+a,h=(l+s+u)/2,p=Math.sqrt(h*(h-l)*(h-s)*(h-u)),c=l+p/(h-l),g=s+p/(h-s),f=u+p/(h-u),d=c+g+f;g/=d,f/=d;for(var v=(c/=d)*n[2].iX+g*n[1].iX+f*n[0].iX,b=c*n[2].iY+g*n[1].iY+f*n[0].iY,x=0;x<n.length;x++)n[x].iX=n[x].iX-v,n[x].iY=n[x].iY-b,n[x].H5=this.distanceFromOrigin(n[x]);var _=new i;_.setup(n);var m=null,y=Number.MAX_VALUE;return _.iterate(function(e){e.oValue.H5<y&&(y=e.oValue.H5,m=e)}),[n,m,_]},r.prototype.candidateNode=function(e,t,i){var r=e.oNext;null===ZC._n_(r)&&(r=i.oFirst);var a=this.createNewNode(e.oValue,r.oValue,t);return(a[0].iX-e.oValue.iX)*(r.oValue.iY-e.oValue.iY)-(a[0].iY-e.oValue.iY)*(r.oValue.iX-e.oValue.iX)<0?a[0]:a[1]},r.prototype.distanceToNode=function(e,t,i,r,a){for(var n=0,o=t;n+=2*o.oValue.iR,(o=o===r.oFirst?r.ER:o.oPrev)!==e;);return[n,a-n-2*e.oValue.iR]},r.prototype.checkIntersect=function(e,t,i){var r=t.oNext;null===ZC._n_(r)&&(r=i.oFirst);var a=null,n=0,o=this,l=i.iterate(function(t){return o.distanceBetweenNodes(e,t.oValue)-(t.oValue.iR+e.iR)<-1e-8});if(0===l.length)return[a,n];var s=0;i.iterate(function(e){s+=2*e.oValue.iR});for(var u=[],h=[],p=0;p<l.length;p++){var c=this.distanceToNode(l[p],t,r,i,s);u.push(c),h.push(Math.min(c[0],c[1]))}var g=Number.MAX_VALUE,f=[],d=Number.MAX_VALUE;for(p=0;p<h.length;p++)h[p]<d&&(d=h[p],f=u[p],g=p);return[a=l[g],n=f[0]<f[1]?-1:1]},r.prototype.removeNodesAhead=function(e,t,i){for(;t.oNext!==e;)if(t!==i.ER)i.remove(t.oNext.oValue);else{if(i.oFirst===e)break;i.remove(i.oFirst.oValue)}},r.prototype.removeNodesBehind=function(e,t,i){for(;t.oPrev!==e;)if(t!==i.oFirst)i.remove(t.oPrev.oValue);else{if(i.ER===e)break;i.remove(i.ER.oValue)}},r.prototype.modifyFrontChain=function(e,t,i,r){if(0===r)return[t,!1];if(-1===r){var a=t.oNext;null===ZC._n_(a)&&(a=i.oFirst),this.removeNodesBehind(e,a,i),t=e}else this.removeNodesAhead(e,t,i);return[t,!0]},r.prototype.resolveIntersections=function(e,t,i){for(var r,a=!0;a;){r=this.candidateNode(e,t,i);var n=this.checkIntersect(r,e,i),o=n[0],l=n[1],s=this.modifyFrontChain(o,e,i,l);e=s[0],a=s[1]}return[e,r]},r.prototype.getClosestNode=function(e,t){var i=this.distanceFromOrigin(e.oValue),r=this;return t.iterate(function(t){var a=r.distanceFromOrigin(t.oValue);a<i&&(e=t,i=a)}),e},r.prototype.pack=function(e){for(var t,i=this.setup(e[0],e[1],e[2]),r=i[0],a=i[1],n=i[2],o=[],l=0;l<e.length;l++){var s=e[l];if(l<3)o.push([r[l].iX,r[l].iY,r[l].iR]);else{a=this.getClosestNode(a,n);var u=this.resolveIntersections(a,s,n);a=u[0],t=u[1],n.insertAfter(t,a),o.push([t.iX,t.iY,t.iR])}}return o};var a=function(e,t,i,r){return[e+i*Math.cos(2*r*Math.PI/360),t+i*Math.sin(2*r*Math.PI/360)]},n=function(e){return 360*e/(2*Math.PI)},o=function(e,t,i){i.padding;for(var r,a=0;a<t.length;a++)if(r=Math.sqrt((e.x-t[a].x)*(e.x-t[a].x)+(e.y-t[a].y)*(e.y-t[a].y)),Math.round(r-e.r-t[a].r)<0)return!1;return!0},l=function(e,t,i){for(var r,l,s,u=e.r,h=i.padding,p=!1,c=[],g=0;g<t.length-1;g++)for(var f=g;f<t.length;f++){var d=Math.sqrt((t[g].x-t[f].x)*(t[g].x-t[f].x)+(t[g].y-t[f].y)*(t[g].y-t[f].y));if(g!==f&&Math.floor(Math.abs(d-t[g].r-t[f].r))<=h){var v,b,x,_,m,y=(u+t[f].r)*(u+t[f].r)-(u+t[g].r)*(u+t[g].r),C=t[g].r+t[f].r,Z=(y+C*C)/(2*C),z=Math.sqrt((u+t[f].r)*(u+t[f].r)-Z*Z),M=(r=t[g],l=t[f],void 0,[s=(r.y-l.y)/(r.x-l.x),r.y-s*r.x,Math.atan((l.y-r.y)/(l.x-r.x))]);_=(x=a(t[f].x,t[f].y,Z,n(M[2])))[0],m=x[1],(_<Math.min(t[g].x,t[f].x)||_>Math.max(t[g].x,t[f].x)||m<Math.min(t[g].y,t[f].y)||m>Math.max(t[g].y,t[f].y))&&(_=(x=a(t[f].x,t[f].y,Z,n(M[2])+180))[0],m=x[1]),v={x:(b=a(_,m,z,n(M[2])+90))[0],y:b[1],r:u,padding:h,idx:e.idx,info:e},o(v,t,i)&&(c.push(v),p=!0),v={x:(b=a(_,m,z,n(M[2])+270))[0],y:b[1],r:u,padding:h,idx:e.idx,info:e},o(v,t,i)&&(c.push(v),p=!0)}}return c.sort(function(e,t){return Math.sqrt((e.x-i.x)*(e.x-i.x)+(e.y-i.y)*(e.y-i.y))-Math.sqrt((t.x-i.x)*(t.x-i.x)+(t.y-i.y)*(t.y-i.y))}),c.length&&t.push(c[0]),p};zingchart.plugins.bubblepack=zingchart.plugins.bubblepack||{},zingchart.plugins.bubblepack.info=zingchart.plugins.bubblepack.info||{},zingchart.plugins.bubblepack.cache=zingchart.plugins.bubblepack.cache||{};var s=function(e,t,i){if(""!==t.uid&&zingchart.plugins.bubblepack.cache[t.uid])return zingchart.plugins.bubblepack.cache[t.uid];var a=t.r,n=t.x,o=t.y,s=t.padding,u=t.maxItems||999,h=t.minSize||1.5,p=zingchart.plugins.bubblepack.info.groups[i]||{};e.sort(function(e,t){return e.group&&t.group?e.group===t.group?parseFloat(t.value)-parseFloat(e.value):null!==ZC._n_(p[e.group])&&null!==ZC._n_(p[t.group])?p[e.group]-p[t.group]:e.group<t.group?1:e.group>t.group?-1:0:parseFloat(t.value)-parseFloat(e.value)});var c=Math.min(u,e.length),g=[];for(b=0;b<c;b++)e[b].r=e[b]._r_=Math.sqrt(parseFloat(e[b].value)/Math.PI)+s/2,e[b].idx=b,g[b]=e[b].r;var f="fast"===t.mode||"auto"===t.mode&&c>128;c<3&&(f=!1),0===s&&(t.padding=s=1);var d=[];if(f)for(var v=(new r).pack(g),b=0;b<v.length;b++)d.push({x:v[b][0],y:v[b][1],r:v[b][2],idx:b,info:e[b]});else if(c>1){var x=e[0].r+e[1].r+s/2;for(d.push({x:n-x+e[0].r,y:o,r:e[0].r,idx:0,info:e[0]}),d.push({x:n+x-e[1].r,y:o,r:e[1].r,idx:1,info:e[1]}),b=2;b<c;b++)e[b].r>=h&&l(e[b],d,t)}else d.push({x:n,y:o,r:e[0].r-s,idx:0,info:e[0]});if(f){var _=[0,0,0];for(b=0;b<d.length;b++){var m=Math.PI*d[b].r*d[b].r;_[0]+=d[b].x*m,_[1]+=d[b].y*m,_[2]+=m}var y=_[0]/_[2],C=_[1]/_[2];for(b=0;b<d.length;b++)d[b].x-=y,d[b].y-=C}var Z,z,M,N=0;for(b=0;b<d.length;b++)Z=d[b].x,z=d[b].y,f||(Z-=n,z-=o),M=Math.sqrt(Z*Z+z*z),N=Math.max(N,M+d[b].r);var k=a/N;for(b=0;b<d.length;b++)if(f){F=t.x,R=t.y;Z=d[b].x,z=d[b].y;E=Math.atan2(z,Z);M=Math.sqrt(Z*Z+z*z),M*=k,d[b].x=F+M*Math.cos(E),d[b].y=R+M*Math.sin(E),d[b].r=d[b].r*k}else{var F=t.x-a,R=t.y-a;d[b].x-=a,d[b].y-=a,Z=d[b].x-F,z=d[b].y-R;var E=Math.atan2(z,Z);M=Math.sqrt(Z*Z+z*z),M*=k,d[b].x=F+M*Math.cos(E)+a,d[b].y=R+M*Math.sin(E)+a,d[b].r=d[b].r*k}return""!==t.uid&&(zingchart.plugins.bubblepack.cache[t.uid]=d),d},u=function(e,t){var i=ZC.IO(e.x||"0",!1);i<=1&&(i=t.x+t.width*i);var r=ZC.IO(e.y||"0",!1);r<=1&&(r=t.y+t.height*r);var a=ZC.IO(e.width||"0",!1);a<=1&&(a=t.width*a);var n=ZC.IO(e.height||"0",!1);return n<=1&&(n=t.height*n),{x:i+a/2,y:r+n/2,r:Math.min(a,n)/2}};zingchart.bind(null,"dataparse",function(e,t){for(var i,r,a,n,o=0,l=t.graphset.length;o<l;o++)if(t.graphset[o].type&&"bubble-pack"===t.graphset[o].type){var s=t.graphset[o].type;t.graphset[o]["plugin-type"]=s;var u=t.graphset[o];zingchart.normalize(u),u.type="null";var h={};u.options&&(h=u.options[s]||u.options),ZC._todash_(h),u.series=u.series||[];var p=h["text-attr"]||"text",c=h["value-attr"]||"value";if(!(u.series instanceof Array)){var g=[],f={},d=function(e,t){var i=(e.text||e.name||e[p]).toLowerCase().replace(/[^a-z0-9_]+/gi,"");f[i]?i+=f[i]++:f[i]=1;var r={id:i,text:e.text||e.name||e[p]||i,value:e.value||e.size||e[c],parent:t||""};if(g.push(r),e.children)for(var a=0;a<e.children.length;a++)d(e.children[a],i)};d(u.series),u.series=g}for(i=0;i<u.series.length;i++)u.series[i].text=u.series[i].text||u.series[i].name||u.series[i][p],u.series[i].value=u.series[i].value||u.series[i].size||u.series[i][c];var v=h["group-filter"]||[];for(zingchart.plugins.bubblepack.info.groups=zingchart.plugins.bubblepack.info.groups||{},zingchart.plugins.bubblepack.info.size=zingchart.plugins.bubblepack.info.size||{},zingchart.plugins.bubblepack.info.size[e.id]=u.series.length,zingchart.plugins.bubblepack.info.groups[e.id]={},i=0;i<v.length;i++)zingchart.plugins.bubblepack.info.groups[e.id][v[i]]=i;var b=v.length;for(i=0;i<u.series.length;i++)if(u.series[i].group&&null===ZC._n_(zingchart.plugins.bubblepack.info.groups[e.id][u.series[i].group])&&(zingchart.plugins.bubblepack.info.groups[e.id][u.series[i].group]=b++),null!==ZC._n_(u.series[i].parent))for(r=0;r<u.series.length;r++)u.series[r].id===u.series[i].parent&&(u.series[i].pidx=r,u.series[r].children=u.series[r].children||[],u.series[r].children.push(i));for(var x=!0,_=[];x;)for(x=!1,i=0;i<u.series.length;i++)if(null!==ZC._n_(u.series[i].parent)&&(a=u.series[i].parent,-1===ZC.AV(_,a))){var m=0,y=!0;for(n=-1,r=0;r<u.series.length;r++)u.series[r].id===a&&(n=r,u.series[i].pidx=r),null!==ZC._n_(u.series[r].parent)&&u.series[r].parent===a&&(null!==ZC._n_(u.series[r].value)?m+=ZC._f_(u.series[r].value):y=!1);if(y&&-1!==n){u.series[n].value=m,_.push(a),x=!0;continue}}for(var C=!0;C;)for(C=!1,i=0;i<u.series.length;i++)null===ZC._n_(u.series[i].level)&&(null===ZC._n_(u.series[i].parent)||""===u.series[i].parent?u.series[i].level=0:(n=u.series[i].pidx,null!==ZC._n_(n)&&(null===ZC._n_(u.series[n].level)?C=!0:u.series[i].level=ZC._i_(u.series[n].level)+1)));u.plotarea=u.plotarea||{},ZC._inj_(u.plotarea,{margin:"40 10 10 10","mask-tolerance":[0,0]})}return t});var h=function(e){var t,i,r=zingchart.getLoader(e.loader.id),a=zingchart.getGraph(r,e.graphid),n=a.o;if("bubble-pack"===n["plugin-type"]){var o=zingchart.getGraphInfo(r,r.o,a.L),l=o.plotarea;n.shapes=n.shapes||[];var h={};if(n.options&&(h=n.options["bubble-pack"]||n.options),ZC._todash_(h),e.shape&&null!==ZC._n_(h.active)&&!ZC._b_(h.active))return;var p=h.palette||["#FFEC94","#FFAEAE","#B0E57C","#B4D8E7","#FCCB8E"],c=n.series||[],g=ZC._f_(ZC._c_(h.padding,1)),f=ZC._c_(h.mode,"auto"),d=ZC._i_(ZC._c_(h["min-level"],0)),v=ZC._i_(ZC._c_(h["max-items"],999)),b=h.filter||[],x=h["group-filter"]||[],_=ZC._f_(ZC._c_(h["min-size"],.5)),m=h.containers||{},y=h.format||{},C=[].concat(b),Z=d,z=e["data-top"]||"";if(""===z){var M="",N=0;for(t=0;t<c.length;t++)c[t].parent&&""!==c[t].parent||(M=c[t].id,N++);1===N&&(z=M)}null!==ZC._n_(e["data-level"])&&(d=e["data-level"],z===e["data-id"]&&d--),null!==ZC._n_(e["data-id"])&&(z===e["data-id"]?(b=[e["data-parent"]],z=e["data-parent"]):(b=[e["data-id"]],z=e["data-id"])),d<Z&&(d=Z,b=[].concat(C));var k,F,R,E=[],V=ZC._i_(l.x+l.width/2),w=ZC._i_(l.y+l.height/2),X=ZC._i_(Math.min(l.width/2,l.height/2)),Y=0;for(t=0;t<c.length;t++)Y=Math.max(Y,c[t].level);ZC._n_(h["max-level"])&&(Y=ZC._i_(h["max-level"]));for(var P=d;P<=Y;P++){for(F={},t=0;t<c.length;t++)if(c[t].level===P){if(R=c[t].parent||"0",P===d){var A=c[t].id;R=m[A]?A:"0"}F[R]=F[R]||[],(!b.length||c[t].level!==d||b.length&&-1!==ZC.AV(b,c[t].id))&&(""===c[t].group||!x.length||x.length&&-1!==ZC.AV(x,c[t].group))&&F[R].push(c[t])}for(R in F){var I=z+"/"+R+"/"+d+"/"+Y;if(F[R].length){if(P===d)m[R]?((k=u(m[R],l)).padding=g,k.minSize=_,k.uid="",k.mode=f):k={uid:I,x:V,y:w,r:X,level:P,maxItems:v,minSize:_,padding:g,mode:f};else{k=null;for(var O=0;O<E.length;O++)E[O].info.id===R&&(k={uid:I,x:E[O].x,y:E[O].y,r:E[O].r,level:P,maxItems:v,minSize:_,padding:g,mode:f})}k&&(E=E.concat(s(F[R],k,e.id)))}}}var q=[],B={};for(t=0;t<E.length;t++){var H=E[t].info.level;null===ZC._n_(B[H])&&(B[H]=0),B[H]=Math.max(B[H],E[t].r)}for(t=0;t<E.length;t++){var L=E[t].r-g/2;if(L>=_){var S=E[t].info,j=zingchart.formatNumber(S.value,y),T=S.text||"",U=T,G=j,D=1;""!==T&&(D=Math.min(29,Math.floor(2*L*1.25/Math.max(3,T.length)))),D<10&&(T=T.substring(0,3)+"...",(D=Math.min(29,Math.floor(2*L*1.25/Math.max(3,T.length))))<10&&(T="",j=""));var J=1;""!==j&&(J=Math.min(19,Math.floor(2*L*1.25/Math.max(3,j.length)))),J<10&&(j=""),L<10&&(T=j="");var K=p[E[t].info.level%p.length];E[t].info.group&&(K=null!==ZC._n_(i=zingchart.plugins.bubblepack.info.groups[e.id][E[t].info.group])?p[(E[t].info.level+i)%p.length]:"#"+ZC.XR.md5(E[t].info.group).substring(0,6));var Q={type:"circle",id:"bp_"+E[t].info.id,"data-id":E[t].info.id,"data-level":E[t].info.level,"data-parent":E[t].info.parent,"data-top":z,cls:"bp_item","border-width":1,"border-color":"#999","background-color":K,alpha:1,"text-align":"center",cursor:"hand",size:L,x:E[t].x,y:E[t].y,"hover-state":{"border-width":1,"border-color":"#000","background-color":"none"},label:{fontSize:J,text:""},tooltip:{text:"%fullname<br>%fullvalue"}};E[t].info.children&&0!==E[t].info.children.length&&E[t].info.level!==Y||(Q.label={text:"%name<br>%value"}),ZC._cp_(h.item,Q),ZC._cp_(h["item-level-"+E[t].info.level],Q),ZC._cp_(h["item-group-"+E[t].info.group],Q),ZC._cp_(h["item-id-"+E[t].info.id],Q);H=E[t].info.level;var W=40*E[t].r/B[H];K=Q["background-color"],Q["background-color"]=ZC.AO.PP(K,W);var $=null;for(var ee in Q.label.text=Q.label.text.replace(/%fontsizename/g,D).replace(/%fontsizevalue/g,J).replace(/%fullname/g,U).replace(/%name/g,T).replace(/%fullvalue/g,G).replace(/%value/g,j),Q.tooltip.text=Q.tooltip.text.replace(/%fullname/g,U).replace(/%name/g,T).replace(/%fullvalue/g,G).replace(/%value/g,j),E[t].info)0===ee.indexOf("data-")&&($=new RegExp("%"+ee,"g"),Q.label.text=Q.label.text.replace($,E[t].info[ee]),Q.tooltip.text=Q.tooltip.text.replace($,E[t].info[ee]));$=new RegExp("%data-([a-zA-Z0-9]+)","g"),Q.label.text=Q.label.text.replace($,""),Q.tooltip.text=Q.tooltip.text.replace($,""),$=new RegExp("<br><span(.+?)></span>","g"),Q.label.text=Q.label.text.replace($,""),(D<8||"<br>"===Q.label.text)&&(Q.label.text=""),q.push(Q)}}zingchart.exec(e.id,"removeobject",{type:"shape",graphid:o.graph.index,cls:"bp_item"}),zingchart.exec(e.id,"addobject",{type:"shape",graphid:o.graph.index,data:q})}};zingchart.bind(null,"gcomplete",function(e){h(e)}),zingchart.bind(null,"shape_click",function(e){if(!e["data-flat"]){for(var t in ZC.cache.data)-1!==t.indexOf("area-score-"+e.id)&&delete ZC.cache.data[t];zingchart.plugins.bubblepack.info.size[e.id]>500&&zingchart.exec(e.id,"disable",{}),window.setTimeout(function(){h(e),zingchart.exec(e.id,"enable",{})},1)}}),zingchart.extendAPI("bubblepack.setdata",function(e,t){zingchart.plugins.bubblepack.cache={},zingchart.plugins.bubblepack.info.groups[e]={},zingchart.plugins.bubblepack.info.size[e]={},zingchart.exec(e,"setdata",{data:t.data||{}})}),zingchart.extendAPI("bubblepack.clearcache",function(e,t){zingchart.plugins.bubblepack.cache={},zingchart.plugins.bubblepack.info.groups[e]={},zingchart.plugins.bubblepack.info.size[e]={}})}();