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) 11.1 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.11_ES6 */ zingchart.setModule("bubble-pack"),function(){var a=function(a,e,t,r){return[a+t*Math.cos(2*r*Math.PI/360),e+t*Math.sin(2*r*Math.PI/360)]},e=function(a){return 360*a/(2*Math.PI)},t=function(a,e,t){for(var r,n=t.padding,i=0;i<e.length;i++)if(r=Math.sqrt((a.x-e[i].x)*(a.x-e[i].x)+(a.y-e[i].y)*(a.y-e[i].y)),Math.round(r-a.r-e[i].r)<0)return!1;return r=Math.sqrt((a.x-t.x)*(a.x-t.x)+(a.y-t.y)*(a.y-t.y)),!(t.r-r-a.r<n)},r=function(r,n,i){for(var l,o,p,u=r.r,g=i.padding,c=!1,h=[],_=0;_<n.length;_++)for(var d=0;d<n.length;d++){var f=Math.sqrt((n[_].x-n[d].x)*(n[_].x-n[d].x)+(n[_].y-n[d].y)*(n[_].y-n[d].y));if(_!==d&&Math.floor(Math.abs(f-n[_].r-n[d].r))<=g){var s,C,b,Z,x,v=(u+n[d].r)*(u+n[d].r)-(u+n[_].r)*(u+n[_].r),m=n[_].r+n[d].r,y=(v+m*m)/(2*m),z=Math.sqrt((u+n[d].r)*(u+n[d].r)-y*y),M=(l=n[_],o=n[d],void 0,[p=(l.y-o.y)/(l.x-o.x),l.y-p*l.x,Math.atan((o.y-l.y)/(o.x-l.x))]);Z=(b=a(n[d].x,n[d].y,y,e(M[2])))[0],x=b[1],(Z<Math.min(n[_].x,n[d].x)||Z>Math.max(n[_].x,n[d].x)||x<Math.min(n[_].y,n[d].y)||x>Math.max(n[_].y,n[d].y))&&(Z=(b=a(n[d].x,n[d].y,y,e(M[2])+180))[0],x=b[1]),s={x:(C=a(Z,x,z,e(M[2])+90))[0],y:C[1],r:u,padding:g,idx:r.idx,info:r},t(s,n,i)&&(h.push(s),c=!0),s={x:(C=a(Z,x,z,e(M[2])+270))[0],y:C[1],r:u,padding:g,idx:r.idx,info:r},t(s,n,i)&&(h.push(s),c=!0)}}return h.sort(function(a,e){return Math.sqrt((a.x-i.x)*(a.x-i.x)+(a.y-i.y)*(a.y-i.y))-Math.sqrt((e.x-i.x)*(e.x-i.x)+(e.y-i.y)*(e.y-i.y))}),h.length&&n.push(h[0]),c};zingchart.plugins.bubblepack=zingchart.plugins.bubblepack||{},zingchart.plugins.bubblepack.info=zingchart.plugins.bubblepack.info||{},zingchart.plugins.bubblepack.cache=zingchart.plugins.bubblepack.cache||{};var n=function(a,e,t){var n;if(""!==e.uid&&zingchart.plugins.bubblepack.cache[e.uid])return zingchart.plugins.bubblepack.cache[e.uid];var i=e.r,l=e.x,o=e.y,p=e.padding,u=e.maxItems||999,g=e.minSize||1.5,c=zingchart.plugins.bubblepack.info.groups[t]||{};a.sort(function(a,e){return a.group&&e.group?a.group===e.group?parseFloat(e[ZC._[9]])-parseFloat(a[ZC._[9]]):null!==ZC._n_(c[a.group])&&null!==ZC._n_(c[e.group])?c[a.group]-c[e.group]:a.group<e.group?1:a.group>e.group?-1:0:parseFloat(e[ZC._[9]])-parseFloat(a[ZC._[9]])});var h=Math.min(u,a.length),_=0;for(n=0;n<h;n++)a[n].r=a[n]._r_=Math.sqrt(parseFloat(a[n][ZC._[9]])/Math.PI)+p/2,a[n].idx=n,_+=a[n].r*a[n].r*Math.PI;var d=1;if(h>1)if(h<25)d=Math.max(1e-4,(i-3*p)/(a[0].r+a[1].r));else{var f=.8;f=h>=50&&h<75?.85:h>=75&&h<100?.9:h>=100&&h<150?.95:1,d=Math.max(1e-4,Math.sqrt(f*i*i*Math.PI/_))}else 0===p&&(e.padding=p=1),d=Math.max(1e-4,(i-2*p)/a[0].r);var s=d/150,C=1;h>25&&h<=50?(s=d/125,C=1):h>50&&h<=100?(s=d/100,C=1.125):h>100&&h<=200?(s=d/75,C=1.25):h>200&&(s=d/50,C=1.5);for(var b=[],Z=!0;Z;){for(Z=!1,n=0;n<h;n++)a[n].r=a[n]._r_*d;if(b=[],h>1)if(2*a[0].r+2*a[1].r+3*p>2*i)(d-=s)>0&&(Z=!0);else{var x=a[0].r+a[1].r+p/2;for(b.push({x:l-x+a[0].r,y:o,r:a[0].r,idx:0,info:a[0]}),b.push({x:l+x-a[1].r,y:o,r:a[1].r,idx:1,info:a[1]}),n=2;n<h;n++){if(a[n].r>=g)if(!r(a[n],b,e)){var v=n/h,m=1;if(h>100&&(v>=0&&v<.1?m=1.2:v>=.1&&v<.2?m=1.15:v>=.2&&v<.3?m=1.1:v>=.3&&v<.4&&(m=1.05),s+=m*C*s*(1-v)),(d-=s)>0){Z=!0;break}}}}else b.push({x:l,y:o,r:a[0].r-p,idx:0,info:a[0]})}return""!==e.uid&&(zingchart.plugins.bubblepack.cache[e.uid]=b),b},i=function(a,e){var t=ZC.IU(a.x||"0",!1);t<=1&&(t=e.x+e.width*t);var r=ZC.IU(a.y||"0",!1);r<=1&&(r=e.y+e.height*r);var n=ZC.IU(a[ZC._[19]]||"0",!1);n<=1&&(n=e.width*n);var i=ZC.IU(a[ZC._[20]]||"0",!1);return i<=1&&(i=e.height*i),{x:t+n/2,y:r+i/2,r:Math.min(n,i)/2}};zingchart.bind(null,"dataparse",function(a,e){for(var t,r,n,i,l=0,o=e[ZC._[16]].length;l<o;l++)if(e[ZC._[16]][l].type&&"bubble-pack"===e[ZC._[16]][l].type){var p=e[ZC._[16]][l].type;e[ZC._[16]][l]["plugin-type"]=p;var u=e[ZC._[16]][l];zingchart.normalize(u),u.type="null";var g={};u.options&&(g=u.options[p]||u.options),ZC._todash_(g),u[ZC._[11]]=u[ZC._[11]]||[];var c=g["text-attr"]||"text",h=g["value-attr"]||ZC._[9];if(!(u[ZC._[11]]instanceof Array)){var _=[],d={},f=function(a,e){var t=(a.text||a.name||a[c]).toLowerCase().replace(/[^a-z0-9_]+/gi,"");d[t]?t+=d[t]++:d[t]=1;var r={id:t,text:a.text||a.name||a[c]||t,value:a[ZC._[9]]||a[ZC._[21]]||a[h],parent:e||""};if(_.push(r),a.children)for(var n=0;n<a.children.length;n++)f(a.children[n],t)};f(u[ZC._[11]]),u[ZC._[11]]=_}for(t=0;t<u[ZC._[11]].length;t++)u[ZC._[11]][t].text=u[ZC._[11]][t].text||u[ZC._[11]][t].name||u[ZC._[11]][t][c],u[ZC._[11]][t][ZC._[9]]=u[ZC._[11]][t][ZC._[9]]||u[ZC._[11]][t][ZC._[21]]||u[ZC._[11]][t][h];var s=g["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[a.id]=u[ZC._[11]].length,zingchart.plugins.bubblepack.info.groups[a.id]={},t=0;t<s.length;t++)zingchart.plugins.bubblepack.info.groups[a.id][s[t]]=t;var C=s.length;for(t=0;t<u[ZC._[11]].length;t++)if(u[ZC._[11]][t].group&&null===ZC._n_(zingchart.plugins.bubblepack.info.groups[a.id][u[ZC._[11]][t].group])&&(zingchart.plugins.bubblepack.info.groups[a.id][u[ZC._[11]][t].group]=C++),null!==ZC._n_(u[ZC._[11]][t].parent))for(r=0;r<u[ZC._[11]].length;r++)u[ZC._[11]][r].id===u[ZC._[11]][t].parent&&(u[ZC._[11]][t].pidx=r,u[ZC._[11]][r].children=u[ZC._[11]][r].children||[],u[ZC._[11]][r].children.push(t));for(var b=!0,Z=[];b;)for(b=!1,t=0;t<u[ZC._[11]].length;t++)if(null!==ZC._n_(u[ZC._[11]][t].parent)&&(n=u[ZC._[11]][t].parent,-1===ZC.AV(Z,n))){var x=0,v=!0;for(i=-1,r=0;r<u[ZC._[11]].length;r++)u[ZC._[11]][r].id===n&&(i=r,u[ZC._[11]][t].pidx=r),null!==ZC._n_(u[ZC._[11]][r].parent)&&u[ZC._[11]][r].parent===n&&(null!==ZC._n_(u[ZC._[11]][r][ZC._[9]])?x+=ZC._f_(u[ZC._[11]][r][ZC._[9]]):v=!1);if(v&&-1!==i){u[ZC._[11]][i][ZC._[9]]=x,Z.push(n),b=!0;continue}}for(var m=!0;m;)for(m=!1,t=0;t<u[ZC._[11]].length;t++)null===ZC._n_(u[ZC._[11]][t].level)&&(null===ZC._n_(u[ZC._[11]][t].parent)||""===u[ZC._[11]][t].parent?u[ZC._[11]][t].level=0:(i=u[ZC._[11]][t].pidx,null!==ZC._n_(i)&&(null===ZC._n_(u[ZC._[11]][i].level)?m=!0:u[ZC._[11]][t].level=ZC._i_(u[ZC._[11]][i].level)+1)));u.plotarea=u.plotarea||{},ZC._inj_(u.plotarea,{margin:"40 10 10 10","mask-tolerance":[0,0]})}return e});var l=function(a){var e,t,r=zingchart.getLoader(a.loader.id),l=zingchart.getGraph(r,a.graphid),o=l.o;if("bubble-pack"===o["plugin-type"]){var p=zingchart.getGraphInfo(r,o,l.L).plotarea;o.shapes=o.shapes||[];var u={};if(o.options&&(u=o.options["bubble-pack"]||o.options),ZC._todash_(u),a.shape&&null!==ZC._n_(u.active)&&!ZC._b_(u.active))return;var g=u.palette||["#FFEC94","#FFAEAE","#B0E57C","#B4D8E7","#FCCB8E"],c=o[ZC._[11]]||[],h=ZC._f_(ZC._c_(u.padding,1)),_=ZC._i_(ZC._c_(u["min-level"],0)),d=ZC._i_(ZC._c_(u["max-items"],999)),f=u.filter||[],s=u["group-filter"]||[],C=ZC._f_(ZC._c_(u["min-size"],1.5)),b=u.containers||{},Z=u.format||{},x=[].concat(f),v=_,m=a["data-top"]||"";if(""===m){var y="",z=0;for(e=0;e<c.length;e++)c[e].parent&&""!==c[e].parent||(y=c[e].id,z++);1===z&&(m=y)}null!==ZC._n_(a["data-level"])&&(_=a["data-level"],m===a["data-id"]&&_--),null!==ZC._n_(a["data-id"])&&(m===a["data-id"]?(f=[a["data-parent"]],m=a["data-parent"]):(f=[a["data-id"]],m=a["data-id"])),_<v&&(_=v,f=[].concat(x));var M,k,I,w=[],F=ZC._i_(p.x+p.width/2),A=ZC._i_(p.y+p.height/2),E=ZC._i_(Math.min(p.width/2,p.height/2)),q=0;for(e=0;e<c.length;e++)q=Math.max(q,c[e].level);ZC._n_(u["max-level"])&&(q=ZC._i_(u["max-level"]));for(var P=_;P<=q;P++){for(k={},e=0;e<c.length;e++)if(c[e].level===P){if(I=c[e].parent||"0",P===_){var S=c[e].id;I=b[S]?S:"0"}k[I]=k[I]||[],(!f.length||c[e].level!==_||f.length&&-1!==ZC.AV(f,c[e].id))&&(""===c[e].group||!s.length||s.length&&-1!==ZC.AV(s,c[e].group))&&k[I].push(c[e])}for(I in k){var U=m+"/"+I+"/"+_+"/"+q;if(k[I].length){if(P===_)b[I]?((M=i(b[I],p)).padding=h,M.minSize=C,M.uid=""):M={uid:U,x:F,y:A,r:E,level:P,maxItems:d,minSize:C,padding:h};else{M=null;for(var j=0;j<w.length;j++)w[j].info.id===I&&(M={uid:U,x:w[j].x,y:w[j].y,r:w[j].r,level:P,maxItems:d,minSize:C,padding:h})}M&&(w=w.concat(n(k[I],M,a.id)))}}}var B=[];for(e=0;e<w.length;e++){var L=w[e].r-h/2;if(L>=C){var R=w[e].info,V=zingchart.formatNumber(R.value,Z),G=R.text||"",O=G,D=V,N=Math.min(29,Math.floor(2*L*1.45/Math.max(3,G.length)));N<9&&(G=G.substring(0,3)+"...",(N=Math.min(29,Math.floor(2*L*1.45/Math.max(3,G.length))))<9&&(G="",V=""));var T=Math.min(19,Math.floor(2*L*.75/Math.max(3,V.length)));T<9&&(V=""),L<10&&(G=V="");var Y=g[w[e].info.level%g.length];w[e].info.group&&(Y=null!==ZC._n_(t=zingchart.plugins.bubblepack.info.groups[a.id][w[e].info.group])?g[(w[e].info.level+t)%g.length]:"#"+ZC.YA.md5(w[e].info.group).substring(0,6));var H={type:"circle",id:"bp_"+w[e].info.id,"data-id":w[e].info.id,"data-level":w[e].info.level,"data-parent":w[e].info.parent,"data-top":m,cls:"bp_item","border-width":1,"border-color":"#999","background-color":Y,alpha:1,"text-align":"center",cursor:"hand",size:L,x:w[e].x,y:w[e].y,"hover-state":{"border-width":1,"border-color":"#000","background-color":"none"},label:{text:""},tooltip:{text:"%fullname<br>%fullvalue"}};w[e].info.children&&0!==w[e].info.children.length&&w[e].info.level!==q||(H.label={text:'<span style="font-size:'+N+'px">%name</span><br><span style="font-size:'+T+'px">%value</span>'}),ZC._cp_(u.item,H),ZC._cp_(u["item-level-"+w[e].info.level],H),ZC._cp_(u["item-group-"+w[e].info.group],H),ZC._cp_(u["item-id-"+w[e].info.id],H);var J=null;for(var K in H.label.text=H.label.text.replace(/%fullname/g,O).replace(/%name/g,G).replace(/%fullvalue/g,D).replace(/%value/g,V),H.tooltip.text=H.tooltip.text.replace(/%fullname/g,O).replace(/%name/g,G).replace(/%fullvalue/g,D).replace(/%value/g,V),w[e].info)0===K.indexOf("data-")&&(J=new RegExp("%"+K,"g"),H.label.text=H.label.text.replace(J,w[e].info[K]),H.tooltip.text=H.tooltip.text.replace(J,w[e].info[K]));J=new RegExp("%data-([a-zA-Z0-9]+)","g"),H.label.text=H.label.text.replace(J,""),H.tooltip.text=H.tooltip.text.replace(J,""),J=new RegExp("<br><span(.+?)></span>","g"),H.label.text=H.label.text.replace(J,""),B.push(H)}}zingchart.exec(a.id,"removeobject",{type:"shape",cls:"bp_item"}),zingchart.exec(a.id,"addobject",{type:"shape",data:B})}};zingchart.bind(null,"gcomplete",function(a){l(a)}),zingchart.bind(null,"shape_click",function(a){for(var e in ZC.cache.data)-1!==e.indexOf("area-score-"+a.id)&&delete ZC.cache.data[e];zingchart.plugins.bubblepack.info.size[a.id]>500&&zingchart.exec(a.id,"disable",{}),window.setTimeout(function(){l(a),zingchart.exec(a.id,"enable",{})},1)}),zingchart.extendAPI("bubblepack.setdata",function(a,e){zingchart.plugins.bubblepack.cache={},zingchart.plugins.bubblepack.info.groups[a]={},zingchart.plugins.bubblepack.info.size[a]={},zingchart.exec(a,"setdata",{data:e.data||{}})})}();