-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathjquery.cspinner.min.js
20 lines (20 loc) · 4.64 KB
/
jquery.cspinner.min.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/*!
* jQuery.cSpinner, v0.3.0
* https://github.com/mrienstra/jQuery.cSpinner
*
* Copyright 2012, Michael Rienstra
* Dual licensed under the MIT or GPL Version 2 licenses.
*
* A jQuery plugin to create animated loading indicators using the canvas element
*
* Date: Wed Jan 18, 2012
*/
(function(e){var Z="cSpinner",u={init:function(c){var b=this,g=function(){var b=document.createElement("canvas");return b.getContext&&b.getContext("2d")?0===b.toDataURL("image/png").indexOf("data:image/png")?2:1:0}();this.each(function(p){var a={speed:1,scale:1,lineWidth:3,lineCap:"round",innerRadius:8.7,outerRadius:14.42,color:"#000",minimumOpacity:0.18,segments:12,dimmestSegments:1,shadow:!1,shadowOffsetX:1,shadowOffsetY:1,shadowBlur:1,shadowColor:"rgba(10, 10, 10, 0.5)",pixelRatio:1,autoStart:!0,
pauseOnBlur:!0,alwaysReplaceTarget:!1,fallbackSourcesArray:void 0,checkExistsInterval:1E3,preserveExisting:["id","class","style"],drawSegment:function(a,b,c,d,e,g,f,h){a.globalAlpha=b();a.rotate(2*Math.PI/c);a.beginPath();a.moveTo(0,f.innerRadius);a.lineTo(0,h);a.stroke()}},r="<canvas /><canvas />",j,d,v,u="lineWidth,innerRadius,outerRadius,shadowOffsetX,shadowOffsetY,shadowBlur".split(","),h,C,D,k,w,y,s,m,f,z=e(this),A,n,B,q,E,x,l,o=[],t,F,G,i=0;c&&e.extend(a,c);if(0===g){if("undefined"===typeof a.fallbackSourcesArray)return!0;
r=""}j=a.pixelRatio;h=a.segments;1!==j&&(a.scale*=j);for(d=0,v=u.length;d<v;d+=1)a[u[d]]*=a.scale;C=1E3/a.speed/h;D=a.outerRadius;k=D+a.lineWidth;if(a.shadow)w=a.shadowOffsetX,y=a.shadowOffsetY,k+=w>y?w:y,k+=a.shadowBlur;k=Math.ceil(k);s=m=2*k;1!==j&&(m/=j);!0===a.alwaysReplaceTarget||"DIV"!==this.nodeName?(f=e("<div>"+r+"</div>"),z.replaceWith(function(){for(d=0,v=a.preserveExisting.length;d<v;d+=1)A=a.preserveExisting[d],z.attr(A)&&f.attr(A,z.attr(A));return f}),j=f[0]):(j=this,f=z,f.html(r));f.css({width:""+
m+"px",height:""+m+"px",overflow:"hidden","background-size":""+m+"px "+(""+m)+"px"});r=f.attr("id");""===r?(n=Z+(""+Math.random()).substring(2),f.attr("id",n),n="#"+n):1!==e("#"+r).length?(n=Z+(""+Math.random()).substring(2),f.addClass(n),n="."+n):n="#"+r;if(0!==g){if(1===g)B=e("canvas:eq(0)",j),q=B[0],q.width=s,q.height=s*h,E=q.getContext("2d"),B.css({width:""+m+"px",height:""+m*h+"px"});q=e("canvas:eq(1)",j);x=q[0];q.css("display","none");x.width=x.height=s;l=x.getContext("2d");
l.translate(k,k);l.lineWidth=a.lineWidth;l.lineCap=a.lineCap;l.strokeStyle=a.color;if(a.shadow)l.shadowOffsetX=w,l.shadowOffsetY=y,l.shadowBlur=a.shadowBlur,l.shadowColor=a.shadowColor}else e.ajax({type:"GET",url:a.fallbackSourcesArray,dataType:"json",success:function(a){o=a;for(d=0,v=o.length;d<v;d+=1)e("<img />").attr("src",o[d])}});2===g&&e("canvas:eq(0)",j).remove();t=a.minimumOpacity;0>=t&&(t=1.0E-4);F=Math.round(a.checkExistsInterval/C);G=function(){var b=(h+d-i)%h;return b>=a.dimmestSegments-
1?(b=b-a.dimmestSegments+1,b*(1-t)/(h-a.dimmestSegments)+t):t};w=function(){l.clearRect(-k,-k,s,s);for(d=0;d<h;d+=1)a.drawSegment(l,G,h,d,i,t,a,D);2===g?(o.push(x.toDataURL("image/png")),e("<img />").attr("src",o[o.length-1])):E.drawImage(x,0,i*s);i+=1};if(0!==g){for(;i<h;)w();i=0;q.remove()}f.data(Z,{originalTarget:this,startAnimating:function(){var a=setInterval(function(){1===g?B.css("margin-top",""+-1*i%h*m+"px"):"undefined"!==typeof o[i%h]&&f.css({"background-image":"url("+
o[i%h]+")"});0===i%F&&1!==e(n).length&&clearInterval(a);i+=1},C);return a},frames:o});!0===a.autoStart&&f.cSpinner("start");!0===a.pauseOnBlur&&e(window).bind("blur.cSpinner",function(){f.cSpinner("stop")}).bind("focus.cSpinner",function(){f.cSpinner("start")});j!==this&&(b[p]=j)});return b},start:function(){return this.each(function(){var c=e(this),b=c.data(Z),g;b&&b.startAnimating&&!b.intervalID&&(g=b.startAnimating(),c.data(Z,{originalTarget:b.originalTarget,startAnimating:b.startAnimating,
frames:b.frames,intervalID:g}))})},stop:function(){return this.each(function(){var c=e(this),b=c.data(Z);b&&b.intervalID&&(clearInterval(b.intervalID),c.data(Z,{originalTarget:b.originalTarget,startAnimating:b.startAnimating,frames:b.frames}))})},restore:function(){e(window).unbind("blur.cSpinner").unbind("focus.cSpinner");return this.each(function(){var c=e(this),b=c.data(Z);b&&b.intervalID&&clearInterval(b.intervalID);b&&b.originalTarget&&c.replaceWith(b.originalTarget)})},
"export":function(){var c,b;return this.each(function(){var g=e(this).data(Z),p;if(g&&g.frames){p="[";for(c=0,b=g.frames.length;c<b;c+=1)p+='"'+g.frames[c]+'"',c+1<b&&(p+=",");e("body").text(p+"]")}})}};e.fn.cSpinner=function(c){if(u[c])return u[c].apply(this,Array.prototype.slice.call(arguments,1));if("object"===typeof c||!c)return u.init.apply(this,arguments);e.error("jQuery.cSpinner: Method \u201c"+c+"\u201d does not exist")}})(jQuery);