betsol-ng-time-counter
Version:
Minimalistic time-counter for Angular.js
9 lines • 1.44 kB
JavaScript
/**
* betsol-ng-time-counter - Minimalistic time-counter for Angular.js
* @version v1.1.1
* @link https://github.com/betsol/ng-time-counter
* @license MIT
*
* @author Slava Fomin II <s.fomin@betsol.ru>
*/
!function(n){"use strict";function e(){var n=1;i.forEach(function(e){n*=e[1],e[1]=n}),i.reverse()}function t(e){var t={};return e=Math.abs(e),n.forEach(i,function(n){var i,o=n[0],c=n[1];e>0?(i=Math.floor(e/c),e-=i*c):i=0,t[o]=i}),t.milliseconds=e,t}var i=[["seconds",1e3],["minutes",60],["hours",60],["days",24],["months",30],["years",12]];e(),n.module("betsol.timeCounter",[]).directive("bsTimeCounter",function(){return{restrict:"EAC",scope:{date:"=",direction:"=",onFinish:"&",interval:"@"},transclude:!0,link:function(n,e,t,i,o){o(n,function(n){e.append(n)})},controller:["$scope","$interval","$timeout",function(e,i,o){function c(n,e){n!==e&&r()}function r(){switch(e.direction){case"up":v=!1;break;case"down":v=!0;break;default:v=void 0}if(e.date instanceof Date){var n=new Date;l=n.getTime()-e.date.getTime(),"undefined"==typeof v&&(v=0>l)}else l=0;d()&&(l=0),a(),d()||u()}function a(){var i=l;!1===v&&0>l&&(i=0),n.extend(e,t(i))}function u(){h&&s(),h=i(f,m)}function s(){i.cancel(h),h=null}function f(){l+=m,d()&&(l=0,s(),o(function(){e.onFinish()})),a()}function d(){return v&&l>=0}var l,v,h,m=parseInt(e.interval)||1e3;e.$on("$destroy",function(){s()}),e.$watch("date",c),e.$watch("direction",c),r()}]}})}(angular);