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