1 line
7.8 KiB
JavaScript
1 line
7.8 KiB
JavaScript
|
!function(e){var i=10,s=.95;var t={series:{pie:{show:!1,radius:"auto",innerRadius:0,startAngle:1.5,tilt:1,shadow:{left:5,top:15,alpha:.02},offset:{top:0,left:"auto"},stroke:{color:"#fff",width:1},label:{show:"auto",formatter:function(e,i){return"<div style='font-size:x-small;text-align:center;padding:2px;color:"+i.color+";'>"+e+"<br/>"+Math.round(i.percent)+"%</div>"},radius:1,background:{color:null,opacity:0},threshold:0},combine:{threshold:-1,color:null,label:"Other"},highlight:{opacity:.5}}}};e.plot.plugins.push({init:function(r){var a=null,l=null,n=null,o=null,p=null,h=!1,g=null,c=[];function u(i,s,r){h||(h=!0,a=i.getCanvas(),l=e(a).parent(),t=i.getOptions(),i.setData(function(e){for(var i=0,s=0,r=0,a=t.series.pie.combine.color,l=[],n=0;n<e.length;++n){var o=e[n].data;Array.isArray(o)&&1==o.length&&(o=o[0]),Array.isArray(o)?!isNaN(parseFloat(o[1]))&&isFinite(o[1])?o[1]=+o[1]:o[1]=0:o=!isNaN(parseFloat(o))&&isFinite(o)?[1,+o]:[1,0],e[n].data=[o]}for(var n=0;n<e.length;++n)i+=e[n].data[0][1];for(var n=0;n<e.length;++n){var o=e[n].data[0][1];o/i<=t.series.pie.combine.threshold&&(s+=o,r++,a||(a=e[n].color))}for(var n=0;n<e.length;++n){var o=e[n].data[0][1];(r<2||o/i>t.series.pie.combine.threshold)&&l.push({data:[[1,o]],color:e[n].color,label:e[n].label,angle:o*Math.PI*2/i,percent:o/(i/100)})}return r>1&&l.push({data:[[1,s]],color:a,label:t.series.pie.combine.label,angle:s*Math.PI*2/i,percent:s/(i/100)}),l}(i.getData())))}function d(r,a){if(l){var c=r.getPlaceholder().width(),u=r.getPlaceholder().height(),d=l.children().filter(".legend").children().width()||0;g=a,h=!1,n=Math.min(c,u/t.series.pie.tilt)/2,p=u/2+t.series.pie.offset.top,o=c/2,"auto"==t.series.pie.offset.left?t.legend.position.match("w")?o+=d/2:o-=d/2:o+=t.series.pie.offset.left,o<n?o=n:o>c-n&&(o=c-n);var v=r.getData(),b=0;do{b>0&&(n*=s),b+=1,w(),t.series.pie.tilt<=.8&&k()}while(!A()&&b<i);b>=i&&(w(),l.prepend("<div class='error'>Could not draw pie with labels contained inside canvas</div>")),r.setSeries&&r.insertLegend&&(r.setSeries(v),r.insertLegend())}function w(){g.clearRect(0,0,c,u),l.children().filter(".pieLabel, .pieLabelBackground").remove()}function k(){var e=t.series.pie.shadow.left,i=t.series.pie.shadow.top,s=t.series.pie.shadow.alpha,r=t.series.pie.radius>1?t.series.pie.radius:n*t.series.pie.radius;if(!(r>=c/2-e||r*t.series.pie.tilt>=u/2-i||r<=10)){g.save(),g.translate(e,i),g.globalAlpha=s,g.fillStyle="#000",g.translate(o,p),g.scale(1,t.series.pie.tilt);for(var a=1;a<=10;a++)g.beginPath(),g.arc(0,0,r,0,2*Math.PI,!1),g.fill(),r-=a;g.restore()}}function A(){var i=Math.PI*t.series.pie.startAngle,s=t.series.pie.radius>1?t.series.pie.radius:n*t.series.pie.radius;g.save(),g.translate(o,p),g.scale(1,t.series.pie.tilt),g.save();for(var r=i,a=0;a<v.length;++a)v[a].startAngle=r,h(v[a].angle,v[a].color,!0);if(g.restore(),t.series.pie.stroke.width>0){for(g.save(),g.lineWidth=t.series.pie.stroke.width,r=i,a=0;a<v.length;++a)h(v[a].angle,t.series.pie.stroke.color,!1);g.restore()}return f(g),g.restore(),!t.series.pie.label.show||function(){for(var s=i,r=t.series.pie.label.radius>1?t.series.pie.label.radius:n*t.series.pie.label.radius,a=0;a<v.length;++a){if(v[a].percent>=100*t.series.pie.label.threshold&&!h(v[a],s,a))return!1;s+=v[a].angle}return!0;function h(i,s,a){if(0==i.data[0][1])return!0;var n,h=t.legend.labelFormatter,g=t.series.pie.label.formatter;n=h?h(i.label,i):i.label,g&&(n=g(n,i));var d=(s+i.angle+s)/2,f=o+Math.round(Math.cos(d)*r),v=p+Math.round(Math.sin(d)*r)*t.series.pie.tilt,b="<span class='pieLabel' id='pieLabel"+a+"' style='position:absolute;top:"+v+"px;left:"+f+"px;'>"+n+"</span>";l.append(b);var w=l.children("#pieLabel"+a),k=v-w.height()/2,A=f-w.width()/2;if(w.css("top",k),w.css("left",A),0-k>0||0-A>0||u-(k+w.height())<0||c-(A+w.width())<0)return!1;if(0!=t.series.pie.label.background.opacity){var M=t.series.pie.label.background.color;null==M&&(M=i.color);var P="top:"+k+"px;left:"+A+"px;";e("<div class='pieLabelBackground' style='position:absolute;width:"+w.width()+"px;height:"+w.height()+"px;"+P+"background-color:"+M+";'></div>").css("opacity
|