forked from benpickles/peity
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjquery.peity.min.js
13 lines (13 loc) · 3.26 KB
/
jquery.peity.min.js
1
2
3
4
5
6
7
8
9
10
11
12
13
// Peity jQuery plugin version 2.0.1
// (c) 2014 Ben Pickles
//
// http://benpickles.github.io/peity
//
// Released under MIT license.
(function(e,q,k){var n=function(a,b){var c=q.createElementNS("http://www.w3.org/2000/svg",a);e.each(b,function(a,b){c.setAttribute(a,b)});return c},s="createElementNS"in q&&n("svg",{}).createSVGRect,i=e.fn.peity=function(a,b){s&&this.each(function(){var c=e(this),d=c.data("peity");if(d)a&&(d.type=a),e.extend(d.opts,b);else{var f=i.defaults[a],g={};e.each(c.data(),function(a,b){a in f&&(g[a]=b)});var m=e.extend({},f,g,b),d=new r(c,a,m);c.change(function(){d.draw()}).data("peity",d)}d.draw()});return this},
r=function(a,b,c){this.$el=a;this.type=b;this.opts=c},l=r.prototype;l.draw=function(){i.graphers[this.type].call(this,this.opts)};l.fill=function(){var a=this.opts.fill,b=a;e.isFunction(b)||(b=function(b,d){return a[d%a.length]});return b};l.prepare=function(a,b){var c;this.svg?c=e(this.svg).empty():(this.svg=n("svg",{"class":"peity"}),this.$el.hide().after(this.svg),c=e(this.svg).data("peity",this));this.svg.setAttribute("height",b);this.svg.setAttribute("width",a);return c};l.values=function(){return e.map(this.$el.text().split(this.opts.delimiter),
function(a){return parseFloat(a)})};i.defaults={};i.graphers={};i.register=function(a,b,c){this.defaults[a]=b;this.graphers[a]=c};i.register("pie",{delimiter:null,diameter:16,fill:["#ff9900","#fff4dd","#ffc66e"]},function(a){if(!a.delimiter){var b=this.$el.text().match(/[^0-9\.]/);a.delimiter=b?b[0]:","}b=this.values();if("/"==a.delimiter)var c=b[0],b=[c,k.max(0,b[1]-c)];for(var d=0,c=b.length,f=0;d<c;d++)f+=b[d];for(var a=this.prepare(a.width||a.diameter,a.height||a.diameter),d=a.width(),g=a.height(),
a=d/2,g=g/2,m=k.min(a,g),e=k.PI,o=this.fill(),h=-e/2,d=0;d<c;d++){var i=b[d],j=i/f,p;if(0!=j){if(1==j)p=n("circle",{cx:a,cy:g,r:m});else{p=2*j*e;var j=h+p,l=m*k.cos(h)+a,h=m*k.sin(h)+g,q=m*k.cos(j)+a,r=m*k.sin(j)+g;p=n("path",{d:["M",a,g,"L",l,h,"A",m,m,0,p>e?1:0,1,q,r,"Z"].join(" ")});h=j}p.setAttribute("fill",o.call(this,i,d,b));this.svg.appendChild(p)}}});i.register("line",{delimiter:",",fill:"#c6d9fd",height:16,max:null,min:0,stroke:"#4d89f9",strokeWidth:1,width:32},function(a){var b=this.values();
1==b.length&&b.push(b[0]);for(var c=k.max.apply(k,b.concat([a.max])),d=k.min.apply(k,b.concat([a.min])),f=this.prepare(a.width,a.height),g=f.width(),f=f.height()-a.strokeWidth,m=g/(b.length-1),e=f/(c-d),i=f+d*e,c=[0,i],h=0;h<b.length;h++)c.push(h*m,f-e*(b[h]-d)+a.strokeWidth/2);c.push(g,i);b=n("polygon",{fill:a.fill,points:c.join(" ")});this.svg.appendChild(b);a.strokeWidth&&(a=n("polyline",{fill:"transparent",points:c.slice(2,c.length-2).join(" "),stroke:a.stroke,"stroke-width":a.strokeWidth,"stroke-linecap":"square"}),
this.svg.appendChild(a))});i.register("bar",{delimiter:",",fill:["#4D89F9"],gap:1,height:16,max:null,min:0,width:32},function(a){for(var b=this.values(),c=k.max.apply(k,b.concat([a.max])),d=k.min.apply(k,b.concat([a.min])),f=this.prepare(a.width,a.height),g=f.width(),f=f.height(),e=c-d,e=0==e?0:f/e,a=a.gap,g=(g+a)/b.length,i=this.fill(),o=0;o<b.length;o++){var h=b[o],l=f-e*(h-d),j;if(h==d){if(j=1/(window.devicePixelRatio||1),0<=d||0<c)l-=j}else j=e*h;0>j&&(l+=j,j=-j);h=n("rect",{fill:i.call(this,
h,o,b),x:o*g,y:l,width:g-a,height:j});this.svg.appendChild(h)}})})(jQuery,document,Math);