| 1 |
window.CoolClock=function(a){return this.init(a)};CoolClock.config={tickDelay:1000,defaultRadius:85,renderRadius:100,defaultColor:"black",defaultAlpha:1,defaultFont:"15px monospace",defaultFontColor:"#333",skin:{outerBorder:{lineWidth:2,radius:95,fillColor:"white"},smallIndicator:{lineWidth:2,startAt:88,endAt:92},largeIndicator:{lineWidth:4,startAt:79,endAt:92},hourHand:{lineWidth:8,startAt:-15,endAt:50},minuteHand:{lineWidth:7,startAt:-15,endAt:75},secondHand:{lineWidth:1,startAt:-20,endAt:85,color:"red"},secondDecoration:{lineWidth:1,startAt:70,radius:4,fillColor:"red",color:"red"}},skins:{},isIE:!!document.all,clockTracker:{},noIdCount:0};CoolClock.tick=function(){this.tickTimeout=setTimeout(CoolClock.tick,CoolClock.config.tickDelay);for(var b in CoolClock.config.clockTracker){var a=CoolClock.config.clockTracker[b];if(a.stillHere()&&a.active&&!a.busy){a.refreshDisplay()}}};CoolClock.prototype={init:function(a){this.canvasId=a.canvasId;this.skinId=a.skinId;this.font=a.font||CoolClock.config.defaultFont;this.fontColor=a.fontColor||CoolClock.config.defaultFontColor;this.displayRadius=a.displayRadius||CoolClock.config.defaultRadius;this.renderRadius=a.renderRadius||CoolClock.config.renderRadius;this.showSecondHand=typeof a.showSecondHand=="boolean"?a.showSecondHand:true;this.gmtOffset=(a.gmtOffset!=null&&a.gmtOffset!="")?parseFloat(a.gmtOffset):null;this.showDigital=typeof a.showDigital=="boolean"?a.showDigital:false;this.showDigital24=typeof a.showDigital24=="boolean"?a.showDigital24:false;this.showSecs=typeof a.showSecs=="boolean"?a.showSecs:false;this.showDate=typeof a.showDate=="boolean"?a.showDate:false;this.showText=typeof a.showText=="boolean"?a.showText:false;this.logClock=typeof a.logClock=="boolean"?a.logClock:false;this.logClockRev=typeof a.logClock=="boolean"?a.logClockRev:false;this.text=a.text||"";this.dynamicSkin=typeof a.dynamicSkin=="boolean"?a.dynamicSkin:false;this.canvas=document.getElementById(this.canvasId);this.canvas.setAttribute("width",this.displayRadius*2);this.canvas.setAttribute("height",this.displayRadius*2);this.canvas.style.width=this.displayRadius*2+"px";this.canvas.style.maxWidth="100%";this.canvas.style.height="auto";this.scale=this.displayRadius/this.renderRadius;this.ctx=this.canvas.getContext("2d");this.ctx.scale(this.scale,this.scale);CoolClock.config.clockTracker[this.canvasId]=this;this.start();return this},fullCircleAt:function(a,c,b){this.ctx.save();this.ctx.globalAlpha=b.alpha||CoolClock.config.defaultAlpha;this.ctx.strokeStyle=b.color||CoolClock.config.defaultColor;this.ctx.lineWidth=b.lineWidth;if(CoolClock.config.isIE){this.ctx.lineWidth=this.ctx.lineWidth*this.scale}this.ctx.beginPath();this.ctx.arc(a,c,b.radius,0,2*Math.PI,false);if(CoolClock.config.isIE){this.ctx.arc(a,c,b.radius,-0.1,0.1,false)}if(b.fillColor){this.ctx.fillStyle=b.fillColor;this.ctx.fill()}this.ctx.stroke();this.ctx.restore()},drawTextAt:function(b,a,e,d){if(!d){d=this.getSkin()}this.ctx.save();this.ctx.font=d.font||this.font;var c=this.ctx.measureText(b);if(!c.height){c.height=0;this.ctx.textBaseline="middle"}this.ctx.fillStyle=d.fontColor||this.fontColor;this.ctx.fillText(b,a-c.width/2,e-c.height/2);this.ctx.restore()},lpad2:function(a){return(a<10?"0":"")+a},tickAngle:function(a){var b=3;if(this.logClock){return a==0?0:(Math.log(a*b)/Math.log(60*b))}else{if(this.logClockRev){a=(60-a)%60;return 1-(a==0?0:(Math.log(a*b)/Math.log(60*b)))}else{return a/60}}},timeText:function(a,b,c,e,d){return""+(e?((a%12)==0?12:(a%12)):a)+":"+this.lpad2(b)+(d?":"+this.lpad2(c):"")+(e?(a<12?" am":" pm"):"")},radialLineAtAngle:function(b,a){this.ctx.save();this.ctx.translate(this.renderRadius,this.renderRadius);this.ctx.rotate(Math.PI*(2*b-0.5));if(CoolClock.config.isIE){this.ctx.lineWidth=this.ctx.lineWidth*this.scale}if(a.radius){this.fullCircleAt(a.startAt,0,a)}else{this.ctx.globalAlpha=a.alpha||CoolClock.config.defaultAlpha;this.ctx.strokeStyle=a.color||CoolClock.config.defaultColor;this.ctx.lineWidth=a.lineWidth;this.ctx.beginPath();this.ctx.moveTo(a.startAt,0);this.ctx.lineTo(a.endAt,0);this.ctx.stroke()}this.ctx.restore()},render:function(c,d,f,a){var j=this.getSkin();this.ctx.clearRect(0,0,this.renderRadius*2,this.renderRadius*2);if(j.outerBorder){this.fullCircleAt(this.renderRadius,this.renderRadius,j.outerBorder)}for(var e=0;e<60;e++){(e%5)&&j.smallIndicator&&this.radialLineAtAngle(this.tickAngle(e),j.smallIndicator);!(e%5)&&j.largeIndicator&&this.radialLineAtAngle(this.tickAngle(e),j.largeIndicator)}if(this.showDigital||this.showDigital24||this.showDate||this.showText){var h=this.showDigital||this.showDigital24?this.timeText(c,d,f,!this.showDigital24,this.showSecs):this.showDate?a:this.text;this.drawTextAt(h,this.renderRadius,this.renderRadius+this.renderRadius/2,j)}var k=(c%12)*5+d/12,b=d+f/60,g=f;if(j.hourHand){this.radialLineAtAngle(this.tickAngle(k),j.hourHand)}if(j.minuteHand){this.radialLineAtAngle(this.tickAngle(b),j.minuteHand)}if(this.showSecondHand&&j.secondHand){this.radialLineAtAngle(this.tickAngle(g),j.secondHand)}if(!CoolClock.config.isIE){if(j.hourDecoration){this.radialLineAtAngle(this.tickAngle(k),j.hourDecoration)}if(j.minDecoration){this.radialLineAtAngle(this.tickAngle(b),j.minDecoration)}if(this.showSecondHand&&j.secondDecoration){this.radialLineAtAngle(this.tickAngle(g),j.secondDecoration)}}},refreshDisplay:function(){this.busy=true;var b=new Date();if(this.gmtOffset!=null){var a=new Date(b.valueOf()+(this.gmtOffset*1000*60*60));this.render(a.getUTCHours(),a.getUTCMinutes(),a.getUTCSeconds(),a.toLocaleDateString())}else{this.render(b.getHours(),b.getMinutes(),b.getSeconds(),b.toLocaleDateString())}this.busy=false},stillHere:function(){return document.getElementById(this.canvasId)!=null},stop:function(){this.active=false},start:function(){this.active=true},getSkin:function(){if(!this.skin||this.dynamicSkin){var a=CoolClock.config.skins[this.skinId];if(typeof a==="undefined"||a.length===0){a=CoolClock.config.skin}this.skin=a}return this.skin}};CoolClock.findAndCreateClocks=function(){var c=document.getElementsByTagName("canvas");for(var b=0;b<c.length;b++){var a=c[b].className.split(" ")[0].split(":");if(a[0]=="CoolClock"){if(!c[b].id){c[b].id="_coolclock_auto_id_"+CoolClock.config.noIdCount++}new CoolClock({canvasId:c[b].id,skinId:a[1],displayRadius:a[2],showSecondHand:a[3]!="noSeconds",gmtOffset:a[4],showDigital:a[5]=="showDigital"||a[5]=="showDigital+Secs",showDigital24:a[5]=="showDigital24"||a[5]=="showDigital24+Secs",showSecs:a[5].indexOf("+Secs",10)!=-1,showDate:a[5]=="showDate",showText:a[5]=="showText",logClock:a[6]=="logClock",logClockRev:a[6]=="logClockRev",fontColor:a[7],font:a[8]?a[8].replace(/\|/g," "):null,text:a[9]?a[9].replace(/\|/g," "):null,dynamicSkin:a[10]=="dynamicSkin"})}}CoolClock.tick()}; |