-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcountdown-min.js
12 lines (12 loc) · 3.05 KB
/
countdown-min.js
1
2
3
4
5
6
7
8
9
10
11
12
/**
* @author Mariusz Rymarczyk
* @license MIT
* @version 0.1
* https://github.com/Rymar/Countdown
*/
var Countdown=function(){var d=function(a,c){for(var b=c-(""+a).length,d="",e=0;e<b;e++)d+="0";return d+a},e=function(a){this._miliseconds=this._seconds=this._minutes=this._hours=this._days=this._timerId=0;this._endDate=this._startDate=null;this._pattern="%D days %HH hours %MM minutes %SS seconds %UU miliseconds";this._mode="";this._timeLeft=this._node=null;this._limit=0;this._refreshRate=50;this._speed=1;this._state="init";this._before=null;this._settings=a;this._stopLoop=!1;var c=0,b;for(b="date"===
a.mode?["mode","endDate"]:["mode","limit"];c<b.length;c++)if(!(b[c]in a))return console.error(b[c]+" is required"),!1;this._mode=a.mode;this._speed=a.speed||1;this._refreshRate=(a.refreshRate&&10>a.refreshRate?10:a.refreshRate)||100;this._pattern=a.pattern||this._pattern;this._limit=a.limit;this._endDate=a.endDate;this._node=document.getElementById(a.nodeId)};e.prototype={getTimerId:function(){return this._timerId},getTime:function(){return{days:this._days,hours:this._hours,minutes:this._minutes,
seconds:this._seconds,miliseconds:this._miliseconds}},getState:function(){return this._state},setSpeed:function(a){this._speed=a},_tick:function(){this._timeLeft-=(+new Date-this._before)*this._speed;0>=this._timeLeft?this._end():(this._count(),this._show(),this._settings.onTick&&this._settings.onTick(this),this._before=new Date)},start:function(){"date"===this._mode?(this._startDate=this._settings.startDate||new Date,this._timeLeft=this._endDate-this._startDate):"timer"===this._mode&&null===this._timeLeft&&
(this._timeLeft=this._limit);this._before=new Date;this._state="started";var a=this;a._stopLoop=!1;"init"===this._state&&this._tick(0);this.prev=+new Date;var c=function(b){setTimeout(function(){a._stopLoop||(a._tick(b),c(b))},b)};c(this._refreshRate);this._tick(this._refreshRate);this._settings.onStart&&this._settings.onStart(this);0>=this._timeLeft&&this._end()},_count:function(){this._miliseconds=this._timeLeft%1E3/10|0;this._seconds=(this._timeLeft/1E3|0)%60;this._minutes=(this._timeLeft/6E4|
0)%60;this._hours=(this._timeLeft/36E5|0)%24;this._days=this._timeLeft/864E5|0},_show:function(){if(this._node){var a=this._pattern,a=a.replace(/%HH/g,d(this._hours,2)),a=a.replace(/%MM/g,d(this._minutes,2)),a=a.replace(/%SS/g,d(this._seconds,2)),a=a.replace(/%UU/g,d(this._miliseconds,2)),a=a.replace(/%D/g,this._days),a=a.replace(/%H/g,this._hours),a=a.replace(/%M/g,this._minutes),a=a.replace(/%S/g,this._seconds),a=a.replace(/%U/g,this._miliseconds);this._node.innerHTML=a}},stop:function(){this._stopLoop=
!0;this._state="stopped";this._settings.onStop&&this._settings.onStop(this)},_end:function(){this._days=this._hours=this._minutes=this._seconds=this._miliseconds=0;this._show();this._stopLoop=!0;this._state="ended";this._settings.onEnd&&this._settings.onEnd(this)},reset:function(){"date"!==this._mode&&(this._state=null,this._timeLeft=this._limit,this._count(),this._show(),this.stop(),this._settings.onReset&&this._settings.onReset(this))}};return function(a){return new e(a)}}();