From 07bbadaf0f87a533496a6a7a58a80668f04cd8ce Mon Sep 17 00:00:00 2001 From: Mehdi Chamouma Date: Sat, 17 May 2014 01:36:17 +0200 Subject: [PATCH 1/3] Add support for months and years --- app/js/timer.js | 30 ++++++++++++++++++++++++++-- dist/angular-timer.js | 42 ++++++++++++++++++++++++++++++++++++--- dist/angular-timer.min.js | 4 ++-- index.html | 5 ++++- 4 files changed, 73 insertions(+), 8 deletions(-) diff --git a/app/js/timer.js b/app/js/timer.js index 65cbbf0..f470b12 100644 --- a/app/js/timer.js +++ b/app/js/timer.js @@ -106,26 +106,48 @@ angular.module('timer', []) function calculateTimeUnits() { // compute time values based on maxTimeUnit specification - if(!$scope.maxTimeUnit) { + if(!$scope.maxTimeUnit || $scope.maxTimeUnit === 'day') { $scope.seconds = Math.floor(($scope.millis / 1000) % 60); $scope.minutes = Math.floor((($scope.millis / (60000)) % 60)); $scope.hours = Math.floor((($scope.millis / (3600000)) % 24)); - $scope.days = Math.floor((($scope.millis / (3600000)) / 24)); + $scope.days = Math.floor((($scope.millis / (3600000)) / 24)); + $scope.months = 0; + $scope.years = 0; } else if($scope.maxTimeUnit === 'second') { $scope.seconds = Math.floor($scope.millis / 1000); $scope.minutes = 0; $scope.hours = 0; $scope.days = 0; + $scope.months = 0; + $scope.years = 0; } else if($scope.maxTimeUnit === 'minute') { $scope.seconds = Math.floor(($scope.millis / 1000) % 60); $scope.minutes = Math.floor($scope.millis / 60000); $scope.hours = 0; $scope.days = 0; + $scope.months = 0; + $scope.years = 0; } else if($scope.maxTimeUnit === 'hour') { $scope.seconds = Math.floor(($scope.millis / 1000) % 60); $scope.minutes = Math.floor((($scope.millis / (60000)) % 60)); $scope.hours = Math.floor($scope.millis / 3600000); $scope.days = 0; + $scope.months = 0; + $scope.years = 0; + } else if($scope.maxTimeUnit === 'month') { + $scope.seconds = Math.floor(($scope.millis / 1000) % 60); + $scope.minutes = Math.floor((($scope.millis / (60000)) % 60)); + $scope.hours = Math.floor((($scope.millis / (3600000)) % 24)); + $scope.days = Math.floor((($scope.millis / (3600000)) / 24) % 30); + $scope.months = Math.floor((($scope.millis / (3600000)) / 24) / 30); + $scope.years = 0; + } else if($scope.maxTimeUnit === 'year') { + $scope.seconds = Math.floor(($scope.millis / 1000) % 60); + $scope.minutes = Math.floor((($scope.millis / (60000)) % 60)); + $scope.hours = Math.floor((($scope.millis / (3600000)) % 24)); + $scope.days = Math.floor((($scope.millis / (3600000)) / 24) % 30); + $scope.months = Math.floor(($scope.millis / (3600000)) / 24 / 30); + $scope.years = Math.floor(($scope.millis / (3600000)) / 24 / 30 / 12); } // plural - singular unit decision @@ -133,11 +155,15 @@ angular.module('timer', []) $scope.minutesS = $scope.minutes==1 ? '' : 's'; $scope.hoursS = $scope.hours==1 ? '' : 's'; $scope.daysS = $scope.days==1 ? '' : 's'; + $scope.monthsS = $scope.months==1 ? '' : 's'; + $scope.yearsS = $scope.years==1 ? '' : 's'; //add leading zero if number is smaller than 10 $scope.sseconds = $scope.seconds < 10 ? '0' + $scope.seconds : $scope.seconds; $scope.mminutes = $scope.minutes < 10 ? '0' + $scope.minutes : $scope.minutes; $scope.hhours = $scope.hours < 10 ? '0' + $scope.hours : $scope.hours; $scope.ddays = $scope.days < 10 ? '0' + $scope.days : $scope.days; + $scope.mmonths = $scope.months < 10 ? '0' + $scope.months : $scope.months; + $scope.yyears = $scope.years < 10 ? '0' + $scope.years : $scope.years; } //determine initial values of time units and add AddSeconds functionality diff --git a/dist/angular-timer.js b/dist/angular-timer.js index d3de992..5a6aef7 100644 --- a/dist/angular-timer.js +++ b/dist/angular-timer.js @@ -1,5 +1,5 @@ /** - * angular-timer - v1.1.0 - 2014-04-23 5:44 AM + * angular-timer - v1.1.0 - 2014-05-17 1:35 AM * https://github.com/siddii/angular-timer * * Copyright (c) 2014 Siddique Hameed @@ -113,26 +113,48 @@ angular.module('timer', []) function calculateTimeUnits() { // compute time values based on maxTimeUnit specification - if(!$scope.maxTimeUnit) { + if(!$scope.maxTimeUnit || $scope.maxTimeUnit === 'day') { $scope.seconds = Math.floor(($scope.millis / 1000) % 60); $scope.minutes = Math.floor((($scope.millis / (60000)) % 60)); $scope.hours = Math.floor((($scope.millis / (3600000)) % 24)); - $scope.days = Math.floor((($scope.millis / (3600000)) / 24)); + $scope.days = Math.floor((($scope.millis / (3600000)) / 24)); + $scope.months = 0; + $scope.years = 0; } else if($scope.maxTimeUnit === 'second') { $scope.seconds = Math.floor($scope.millis / 1000); $scope.minutes = 0; $scope.hours = 0; $scope.days = 0; + $scope.months = 0; + $scope.years = 0; } else if($scope.maxTimeUnit === 'minute') { $scope.seconds = Math.floor(($scope.millis / 1000) % 60); $scope.minutes = Math.floor($scope.millis / 60000); $scope.hours = 0; $scope.days = 0; + $scope.months = 0; + $scope.years = 0; } else if($scope.maxTimeUnit === 'hour') { $scope.seconds = Math.floor(($scope.millis / 1000) % 60); $scope.minutes = Math.floor((($scope.millis / (60000)) % 60)); $scope.hours = Math.floor($scope.millis / 3600000); $scope.days = 0; + $scope.months = 0; + $scope.years = 0; + } else if($scope.maxTimeUnit === 'month') { + $scope.seconds = Math.floor(($scope.millis / 1000) % 60); + $scope.minutes = Math.floor((($scope.millis / (60000)) % 60)); + $scope.hours = Math.floor((($scope.millis / (3600000)) % 24)); + $scope.days = Math.floor((($scope.millis / (3600000)) / 24) % 30); + $scope.months = Math.floor((($scope.millis / (3600000)) / 24) / 30); + $scope.years = 0; + } else if($scope.maxTimeUnit === 'year') { + $scope.seconds = Math.floor(($scope.millis / 1000) % 60); + $scope.minutes = Math.floor((($scope.millis / (60000)) % 60)); + $scope.hours = Math.floor((($scope.millis / (3600000)) % 24)); + $scope.days = Math.floor((($scope.millis / (3600000)) / 24) % 30); + $scope.months = Math.floor(($scope.millis / (3600000)) / 24 / 30); + $scope.years = Math.floor(($scope.millis / (3600000)) / 24 / 30 / 12); } // plural - singular unit decision @@ -140,11 +162,15 @@ angular.module('timer', []) $scope.minutesS = $scope.minutes==1 ? '' : 's'; $scope.hoursS = $scope.hours==1 ? '' : 's'; $scope.daysS = $scope.days==1 ? '' : 's'; + $scope.monthsS = $scope.months==1 ? '' : 's'; + $scope.yearsS = $scope.years==1 ? '' : 's'; //add leading zero if number is smaller than 10 $scope.sseconds = $scope.seconds < 10 ? '0' + $scope.seconds : $scope.seconds; $scope.mminutes = $scope.minutes < 10 ? '0' + $scope.minutes : $scope.minutes; $scope.hhours = $scope.hours < 10 ? '0' + $scope.hours : $scope.hours; $scope.ddays = $scope.days < 10 ? '0' + $scope.days : $scope.days; + $scope.mmonths = $scope.months < 10 ? '0' + $scope.months : $scope.months; + $scope.yyears = $scope.years < 10 ? '0' + $scope.years : $scope.years; } //determine initial values of time units and add AddSeconds functionality @@ -164,6 +190,16 @@ angular.module('timer', []) $scope.addCDSeconds(extraSeconds); }); }); + + $scope.$on('timer-set-countdown-seconds', function(e, countdownSeconds) { + if (!$scope.isRunning) { + $scope.clear(); + } + + $scope.countdown = countdownSeconds; + $scope.millis = countdownSeconds * 1000; + calculateTimeUnits(); + }); } else { $scope.millis = 0; } diff --git a/dist/angular-timer.min.js b/dist/angular-timer.min.js index d49f69d..973b95e 100644 --- a/dist/angular-timer.min.js +++ b/dist/angular-timer.min.js @@ -1,8 +1,8 @@ /** - * angular-timer - v1.1.0 - 2014-04-23 5:44 AM + * angular-timer - v1.1.0 - 2014-05-17 1:35 AM * https://github.com/siddii/angular-timer * * Copyright (c) 2014 Siddique Hameed * Licensed MIT */ -angular.module("timer",[]).directive("timer",["$compile",function(a){return{restrict:"EAC",replace:!1,scope:{interval:"=interval",startTimeAttr:"=startTime",endTimeAttr:"=endTime",countdownattr:"=countdown",autoStart:"&autoStart",maxTimeUnit:"="},controller:["$scope","$element","$attrs","$timeout",function(b,c,d,e){function f(){b.timeoutId&&clearTimeout(b.timeoutId)}function g(){b.maxTimeUnit?"second"===b.maxTimeUnit?(b.seconds=Math.floor(b.millis/1e3),b.minutes=0,b.hours=0,b.days=0):"minute"===b.maxTimeUnit?(b.seconds=Math.floor(b.millis/1e3%60),b.minutes=Math.floor(b.millis/6e4),b.hours=0,b.days=0):"hour"===b.maxTimeUnit&&(b.seconds=Math.floor(b.millis/1e3%60),b.minutes=Math.floor(b.millis/6e4%60),b.hours=Math.floor(b.millis/36e5),b.days=0):(b.seconds=Math.floor(b.millis/1e3%60),b.minutes=Math.floor(b.millis/6e4%60),b.hours=Math.floor(b.millis/36e5%24),b.days=Math.floor(b.millis/36e5/24)),b.secondsS=1==b.seconds?"":"s",b.minutesS=1==b.minutes?"":"s",b.hoursS=1==b.hours?"":"s",b.daysS=1==b.days?"":"s",b.sseconds=b.seconds<10?"0"+b.seconds:b.seconds,b.mminutes=b.minutes<10?"0"+b.minutes:b.minutes,b.hhours=b.hours<10?"0"+b.hours:b.hours,b.ddays=b.days<10?"0"+b.days:b.days}"function"!=typeof String.prototype.trim&&(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")}),b.autoStart=d.autoStart||d.autostart,c.append(0===c.html().trim().length?a("{{millis}}")(b):a(c.contents())(b)),b.startTime=null,b.endTime=null,b.timeoutId=null,b.countdown=b.countdownattr&&parseInt(b.countdownattr,10)>=0?parseInt(b.countdownattr,10):void 0,b.isRunning=!1,b.$on("timer-start",function(){b.start()}),b.$on("timer-resume",function(){b.resume()}),b.$on("timer-stop",function(){b.stop()}),b.$on("timer-clear",function(){b.clear()}),b.$on("timer-set-countdown",function(a,c){b.countdown=c}),b.start=c[0].start=function(){b.startTime=b.startTimeAttr?new Date(b.startTimeAttr):new Date,b.endTime=b.endTimeAttr?new Date(b.endTimeAttr):null,b.countdown||(b.countdown=b.countdownattr&&parseInt(b.countdownattr,10)>0?parseInt(b.countdownattr,10):void 0),f(),h(),b.isRunning=!0},b.resume=c[0].resume=function(){f(),b.countdownattr&&(b.countdown+=1),b.startTime=new Date-(b.stoppedTime-b.startTime),h(),b.isRunning=!0},b.stop=b.pause=c[0].stop=c[0].pause=function(){b.clear(),b.$emit("timer-stopped",{millis:b.millis,seconds:b.seconds,minutes:b.minutes,hours:b.hours,days:b.days})},b.clear=c[0].clear=function(){b.stoppedTime=new Date,f(),b.timeoutId=null,b.isRunning=!1},c.bind("$destroy",function(){f(),b.isRunning=!1}),b.countdownattr?(b.millis=1e3*b.countdownattr,b.addCDSeconds=c[0].addCDSeconds=function(a){b.countdown+=a,b.$digest(),b.isRunning||b.start()},b.$on("timer-add-cd-seconds",function(a,c){e(function(){b.addCDSeconds(c)})})):b.millis=0,g();var h=function(){b.millis=new Date-b.startTime;var a=b.millis%1e3;return b.endTimeAttr&&(b.millis=b.endTime-new Date,a=b.interval-b.millis%1e3),b.countdownattr&&(b.millis=1e3*b.countdown),b.millis<0?(b.stop(),b.millis=0,void g()):(g(),b.timeoutId=setTimeout(function(){h(),b.$digest()},b.interval-a),b.$emit("timer-tick",{timeoutId:b.timeoutId,millis:b.millis}),void(b.countdown>0?b.countdown--:b.countdown<=0&&b.stop()))};(void 0===b.autoStart||b.autoStart===!0)&&b.start()}]}}]); \ No newline at end of file +angular.module("timer",[]).directive("timer",["$compile",function(a){return{restrict:"EAC",replace:!1,scope:{interval:"=interval",startTimeAttr:"=startTime",endTimeAttr:"=endTime",countdownattr:"=countdown",autoStart:"&autoStart",maxTimeUnit:"="},controller:["$scope","$element","$attrs","$timeout",function(b,c,d,e){function f(){b.timeoutId&&clearTimeout(b.timeoutId)}function g(){b.maxTimeUnit&&"day"!==b.maxTimeUnit?"second"===b.maxTimeUnit?(b.seconds=Math.floor(b.millis/1e3),b.minutes=0,b.hours=0,b.days=0,b.months=0,b.years=0):"minute"===b.maxTimeUnit?(b.seconds=Math.floor(b.millis/1e3%60),b.minutes=Math.floor(b.millis/6e4),b.hours=0,b.days=0,b.months=0,b.years=0):"hour"===b.maxTimeUnit?(b.seconds=Math.floor(b.millis/1e3%60),b.minutes=Math.floor(b.millis/6e4%60),b.hours=Math.floor(b.millis/36e5),b.days=0,b.months=0,b.years=0):"month"===b.maxTimeUnit?(b.seconds=Math.floor(b.millis/1e3%60),b.minutes=Math.floor(b.millis/6e4%60),b.hours=Math.floor(b.millis/36e5%24),b.days=Math.floor(b.millis/36e5/24%30),b.months=Math.floor(b.millis/36e5/24/30),b.years=0):"year"===b.maxTimeUnit&&(b.seconds=Math.floor(b.millis/1e3%60),b.minutes=Math.floor(b.millis/6e4%60),b.hours=Math.floor(b.millis/36e5%24),b.days=Math.floor(b.millis/36e5/24%30),b.months=Math.floor(b.millis/36e5/24/30),b.years=Math.floor(b.millis/36e5/24/30/12)):(b.seconds=Math.floor(b.millis/1e3%60),b.minutes=Math.floor(b.millis/6e4%60),b.hours=Math.floor(b.millis/36e5%24),b.days=Math.floor(b.millis/36e5/24),b.months=0,b.years=0),b.secondsS=1==b.seconds?"":"s",b.minutesS=1==b.minutes?"":"s",b.hoursS=1==b.hours?"":"s",b.daysS=1==b.days?"":"s",b.monthsS=1==b.months?"":"s",b.yearsS=1==b.years?"":"s",b.sseconds=b.seconds<10?"0"+b.seconds:b.seconds,b.mminutes=b.minutes<10?"0"+b.minutes:b.minutes,b.hhours=b.hours<10?"0"+b.hours:b.hours,b.ddays=b.days<10?"0"+b.days:b.days,b.mmonths=b.months<10?"0"+b.months:b.months,b.yyears=b.years<10?"0"+b.years:b.years}"function"!=typeof String.prototype.trim&&(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")}),b.autoStart=d.autoStart||d.autostart,c.append(0===c.html().trim().length?a("{{millis}}")(b):a(c.contents())(b)),b.startTime=null,b.endTime=null,b.timeoutId=null,b.countdown=b.countdownattr&&parseInt(b.countdownattr,10)>=0?parseInt(b.countdownattr,10):void 0,b.isRunning=!1,b.$on("timer-start",function(){b.start()}),b.$on("timer-resume",function(){b.resume()}),b.$on("timer-stop",function(){b.stop()}),b.$on("timer-clear",function(){b.clear()}),b.$on("timer-set-countdown",function(a,c){b.countdown=c}),b.start=c[0].start=function(){b.startTime=b.startTimeAttr?new Date(b.startTimeAttr):new Date,b.endTime=b.endTimeAttr?new Date(b.endTimeAttr):null,b.countdown||(b.countdown=b.countdownattr&&parseInt(b.countdownattr,10)>0?parseInt(b.countdownattr,10):void 0),f(),h(),b.isRunning=!0},b.resume=c[0].resume=function(){f(),b.countdownattr&&(b.countdown+=1),b.startTime=new Date-(b.stoppedTime-b.startTime),h(),b.isRunning=!0},b.stop=b.pause=c[0].stop=c[0].pause=function(){b.clear(),b.$emit("timer-stopped",{millis:b.millis,seconds:b.seconds,minutes:b.minutes,hours:b.hours,days:b.days})},b.clear=c[0].clear=function(){b.stoppedTime=new Date,f(),b.timeoutId=null,b.isRunning=!1},c.bind("$destroy",function(){f(),b.isRunning=!1}),b.countdownattr?(b.millis=1e3*b.countdownattr,b.addCDSeconds=c[0].addCDSeconds=function(a){b.countdown+=a,b.$digest(),b.isRunning||b.start()},b.$on("timer-add-cd-seconds",function(a,c){e(function(){b.addCDSeconds(c)})}),b.$on("timer-set-countdown-seconds",function(a,c){b.isRunning||b.clear(),b.countdown=c,b.millis=1e3*c,g()})):b.millis=0,g();var h=function(){b.millis=new Date-b.startTime;var a=b.millis%1e3;return b.endTimeAttr&&(b.millis=b.endTime-new Date,a=b.interval-b.millis%1e3),b.countdownattr&&(b.millis=1e3*b.countdown),b.millis<0?(b.stop(),b.millis=0,void g()):(g(),b.timeoutId=setTimeout(function(){h(),b.$digest()},b.interval-a),b.$emit("timer-tick",{timeoutId:b.timeoutId,millis:b.millis}),void(b.countdown>0?b.countdown--:b.countdown<=0&&b.stop()))};(void 0===b.autoStart||b.autoStart===!0)&&b.start()}]}}]); \ No newline at end of file diff --git a/index.html b/index.html index c65d5ef..3e8f62f 100644 --- a/index.html +++ b/index.html @@ -193,7 +193,10 @@

countdown Time Display according to specified max Time Unit

<timer countdown="10041" max-time-unit="'minute'" interval="1000">{{mminutes}} minute{{minutesS}}, {{sseconds}} second{{secondsS}}</timer>

- +

countdown Time with max time unit option - year

+

+ {{yyears}} year{{yearsS}}, {{mmonths}} month{{monthsS}}, {{ddays}} day{{daysS}}, {{hhours}} hour{{hoursS}}, {{mminutes}} minute{{minutesS}}, {{sseconds}} second{{secondsS}} +

countdown Time with max time unit option - minute

{{mminutes}} minute{{minutesS}}, {{sseconds}} second{{secondsS}} From d9256339afee94bd3e3cbefaf1511fa165eb1f68 Mon Sep 17 00:00:00 2001 From: Mehdi Chamouma Date: Sat, 17 May 2014 03:59:56 +0200 Subject: [PATCH 2/3] Fix months and years calculation --- app/js/timer.js | 4 ++-- dist/angular-timer.js | 6 +++--- dist/angular-timer.min.js | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/js/timer.js b/app/js/timer.js index 5ab2702..345709c 100644 --- a/app/js/timer.js +++ b/app/js/timer.js @@ -147,8 +147,8 @@ angular.module('timer', []) $scope.minutes = Math.floor((($scope.millis / (60000)) % 60)); $scope.hours = Math.floor((($scope.millis / (3600000)) % 24)); $scope.days = Math.floor((($scope.millis / (3600000)) / 24) % 30); - $scope.months = Math.floor(($scope.millis / (3600000)) / 24 / 30); - $scope.years = Math.floor(($scope.millis / (3600000)) / 24 / 30 / 12); + $scope.months = Math.floor((($scope.millis / (3600000)) / 24 / 30) % 12); + $scope.years = Math.floor(($scope.millis / (3600000)) / 24 / 365); } // plural - singular unit decision diff --git a/dist/angular-timer.js b/dist/angular-timer.js index 37707ff..8b5746d 100644 --- a/dist/angular-timer.js +++ b/dist/angular-timer.js @@ -1,5 +1,5 @@ /** - * angular-timer - v1.1.1 - 2014-05-17 3:24 AM + * angular-timer - v1.1.1 - 2014-05-17 3:54 AM * https://github.com/siddii/angular-timer * * Copyright (c) 2014 Siddique Hameed @@ -154,8 +154,8 @@ angular.module('timer', []) $scope.minutes = Math.floor((($scope.millis / (60000)) % 60)); $scope.hours = Math.floor((($scope.millis / (3600000)) % 24)); $scope.days = Math.floor((($scope.millis / (3600000)) / 24) % 30); - $scope.months = Math.floor(($scope.millis / (3600000)) / 24 / 30); - $scope.years = Math.floor(($scope.millis / (3600000)) / 24 / 30 / 12); + $scope.months = Math.floor((($scope.millis / (3600000)) / 24 / 30) % 12); + $scope.years = Math.floor(($scope.millis / (3600000)) / 24 / 365); } // plural - singular unit decision diff --git a/dist/angular-timer.min.js b/dist/angular-timer.min.js index d18d5ed..fbc1cbf 100644 --- a/dist/angular-timer.min.js +++ b/dist/angular-timer.min.js @@ -1,8 +1,8 @@ /** - * angular-timer - v1.1.1 - 2014-05-17 3:24 AM + * angular-timer - v1.1.1 - 2014-05-17 3:54 AM * https://github.com/siddii/angular-timer * * Copyright (c) 2014 Siddique Hameed * Licensed MIT */ -angular.module("timer",[]).directive("timer",["$compile",function(a){return{restrict:"EAC",replace:!1,scope:{interval:"=interval",startTimeAttr:"=startTime",endTimeAttr:"=endTime",countdownattr:"=countdown",autoStart:"&autoStart",maxTimeUnit:"="},controller:["$scope","$element","$attrs","$timeout",function(b,c,d,e){function f(){b.timeoutId&&clearTimeout(b.timeoutId)}function g(){b.maxTimeUnit&&"day"!==b.maxTimeUnit?"second"===b.maxTimeUnit?(b.seconds=Math.floor(b.millis/1e3),b.minutes=0,b.hours=0,b.days=0,b.months=0,b.years=0):"minute"===b.maxTimeUnit?(b.seconds=Math.floor(b.millis/1e3%60),b.minutes=Math.floor(b.millis/6e4),b.hours=0,b.days=0,b.months=0,b.years=0):"hour"===b.maxTimeUnit?(b.seconds=Math.floor(b.millis/1e3%60),b.minutes=Math.floor(b.millis/6e4%60),b.hours=Math.floor(b.millis/36e5),b.days=0,b.months=0,b.years=0):"month"===b.maxTimeUnit?(b.seconds=Math.floor(b.millis/1e3%60),b.minutes=Math.floor(b.millis/6e4%60),b.hours=Math.floor(b.millis/36e5%24),b.days=Math.floor(b.millis/36e5/24%30),b.months=Math.floor(b.millis/36e5/24/30),b.years=0):"year"===b.maxTimeUnit&&(b.seconds=Math.floor(b.millis/1e3%60),b.minutes=Math.floor(b.millis/6e4%60),b.hours=Math.floor(b.millis/36e5%24),b.days=Math.floor(b.millis/36e5/24%30),b.months=Math.floor(b.millis/36e5/24/30),b.years=Math.floor(b.millis/36e5/24/30/12)):(b.seconds=Math.floor(b.millis/1e3%60),b.minutes=Math.floor(b.millis/6e4%60),b.hours=Math.floor(b.millis/36e5%24),b.days=Math.floor(b.millis/36e5/24),b.months=0,b.years=0),b.secondsS=1==b.seconds?"":"s",b.minutesS=1==b.minutes?"":"s",b.hoursS=1==b.hours?"":"s",b.daysS=1==b.days?"":"s",b.monthsS=1==b.months?"":"s",b.yearsS=1==b.years?"":"s",b.sseconds=b.seconds<10?"0"+b.seconds:b.seconds,b.mminutes=b.minutes<10?"0"+b.minutes:b.minutes,b.hhours=b.hours<10?"0"+b.hours:b.hours,b.ddays=b.days<10?"0"+b.days:b.days,b.mmonths=b.months<10?"0"+b.months:b.months,b.yyears=b.years<10?"0"+b.years:b.years}"function"!=typeof String.prototype.trim&&(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")}),b.autoStart=d.autoStart||d.autostart,c.append(0===c.html().trim().length?a("{{millis}}")(b):a(c.contents())(b)),b.startTime=null,b.endTime=null,b.timeoutId=null,b.countdown=b.countdownattr&&parseInt(b.countdownattr,10)>=0?parseInt(b.countdownattr,10):void 0,b.isRunning=!1,b.$on("timer-start",function(){b.start()}),b.$on("timer-resume",function(){b.resume()}),b.$on("timer-stop",function(){b.stop()}),b.$on("timer-clear",function(){b.clear()}),b.$on("timer-set-countdown",function(a,c){b.countdown=c}),b.start=c[0].start=function(){b.startTime=b.startTimeAttr?new Date(b.startTimeAttr):new Date,b.endTime=b.endTimeAttr?new Date(b.endTimeAttr):null,b.countdown||(b.countdown=b.countdownattr&&parseInt(b.countdownattr,10)>0?parseInt(b.countdownattr,10):void 0),f(),h(),b.isRunning=!0},b.resume=c[0].resume=function(){f(),b.countdownattr&&(b.countdown+=1),b.startTime=new Date-(b.stoppedTime-b.startTime),h(),b.isRunning=!0},b.stop=b.pause=c[0].stop=c[0].pause=function(){var a=b.timeoutId;b.clear(),b.$emit("timer-stopped",{timeoutId:a,millis:b.millis,seconds:b.seconds,minutes:b.minutes,hours:b.hours,days:b.days})},b.clear=c[0].clear=function(){b.stoppedTime=new Date,f(),b.timeoutId=null,b.isRunning=!1},c.bind("$destroy",function(){f(),b.isRunning=!1}),b.countdownattr?(b.millis=1e3*b.countdownattr,b.addCDSeconds=c[0].addCDSeconds=function(a){b.countdown+=a,b.$digest(),b.isRunning||b.start()},b.$on("timer-add-cd-seconds",function(a,c){e(function(){b.addCDSeconds(c)})}),b.$on("timer-set-countdown-seconds",function(a,c){b.isRunning||b.clear(),b.countdown=c,b.millis=1e3*c,g()})):b.millis=0,g();var h=function(){b.millis=new Date-b.startTime;var a=b.millis%1e3;return b.endTimeAttr&&(b.millis=b.endTime-new Date,a=b.interval-b.millis%1e3),b.countdownattr&&(b.millis=1e3*b.countdown),b.millis<0?(b.stop(),b.millis=0,void g()):(g(),b.timeoutId=setTimeout(function(){h(),b.$digest()},b.interval-a),b.$emit("timer-tick",{timeoutId:b.timeoutId,millis:b.millis}),void(b.countdown>0?b.countdown--:b.countdown<=0&&b.stop()))};(void 0===b.autoStart||b.autoStart===!0)&&b.start()}]}}]); \ No newline at end of file +angular.module("timer",[]).directive("timer",["$compile",function(a){return{restrict:"EAC",replace:!1,scope:{interval:"=interval",startTimeAttr:"=startTime",endTimeAttr:"=endTime",countdownattr:"=countdown",autoStart:"&autoStart",maxTimeUnit:"="},controller:["$scope","$element","$attrs","$timeout",function(b,c,d,e){function f(){b.timeoutId&&clearTimeout(b.timeoutId)}function g(){b.maxTimeUnit&&"day"!==b.maxTimeUnit?"second"===b.maxTimeUnit?(b.seconds=Math.floor(b.millis/1e3),b.minutes=0,b.hours=0,b.days=0,b.months=0,b.years=0):"minute"===b.maxTimeUnit?(b.seconds=Math.floor(b.millis/1e3%60),b.minutes=Math.floor(b.millis/6e4),b.hours=0,b.days=0,b.months=0,b.years=0):"hour"===b.maxTimeUnit?(b.seconds=Math.floor(b.millis/1e3%60),b.minutes=Math.floor(b.millis/6e4%60),b.hours=Math.floor(b.millis/36e5),b.days=0,b.months=0,b.years=0):"month"===b.maxTimeUnit?(b.seconds=Math.floor(b.millis/1e3%60),b.minutes=Math.floor(b.millis/6e4%60),b.hours=Math.floor(b.millis/36e5%24),b.days=Math.floor(b.millis/36e5/24%30),b.months=Math.floor(b.millis/36e5/24/30),b.years=0):"year"===b.maxTimeUnit&&(b.seconds=Math.floor(b.millis/1e3%60),b.minutes=Math.floor(b.millis/6e4%60),b.hours=Math.floor(b.millis/36e5%24),b.days=Math.floor(b.millis/36e5/24%30),b.months=Math.floor(b.millis/36e5/24/30%12),b.years=Math.floor(b.millis/36e5/24/365)):(b.seconds=Math.floor(b.millis/1e3%60),b.minutes=Math.floor(b.millis/6e4%60),b.hours=Math.floor(b.millis/36e5%24),b.days=Math.floor(b.millis/36e5/24),b.months=0,b.years=0),b.secondsS=1==b.seconds?"":"s",b.minutesS=1==b.minutes?"":"s",b.hoursS=1==b.hours?"":"s",b.daysS=1==b.days?"":"s",b.monthsS=1==b.months?"":"s",b.yearsS=1==b.years?"":"s",b.sseconds=b.seconds<10?"0"+b.seconds:b.seconds,b.mminutes=b.minutes<10?"0"+b.minutes:b.minutes,b.hhours=b.hours<10?"0"+b.hours:b.hours,b.ddays=b.days<10?"0"+b.days:b.days,b.mmonths=b.months<10?"0"+b.months:b.months,b.yyears=b.years<10?"0"+b.years:b.years}"function"!=typeof String.prototype.trim&&(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")}),b.autoStart=d.autoStart||d.autostart,c.append(0===c.html().trim().length?a("{{millis}}")(b):a(c.contents())(b)),b.startTime=null,b.endTime=null,b.timeoutId=null,b.countdown=b.countdownattr&&parseInt(b.countdownattr,10)>=0?parseInt(b.countdownattr,10):void 0,b.isRunning=!1,b.$on("timer-start",function(){b.start()}),b.$on("timer-resume",function(){b.resume()}),b.$on("timer-stop",function(){b.stop()}),b.$on("timer-clear",function(){b.clear()}),b.$on("timer-set-countdown",function(a,c){b.countdown=c}),b.start=c[0].start=function(){b.startTime=b.startTimeAttr?new Date(b.startTimeAttr):new Date,b.endTime=b.endTimeAttr?new Date(b.endTimeAttr):null,b.countdown||(b.countdown=b.countdownattr&&parseInt(b.countdownattr,10)>0?parseInt(b.countdownattr,10):void 0),f(),h(),b.isRunning=!0},b.resume=c[0].resume=function(){f(),b.countdownattr&&(b.countdown+=1),b.startTime=new Date-(b.stoppedTime-b.startTime),h(),b.isRunning=!0},b.stop=b.pause=c[0].stop=c[0].pause=function(){var a=b.timeoutId;b.clear(),b.$emit("timer-stopped",{timeoutId:a,millis:b.millis,seconds:b.seconds,minutes:b.minutes,hours:b.hours,days:b.days})},b.clear=c[0].clear=function(){b.stoppedTime=new Date,f(),b.timeoutId=null,b.isRunning=!1},c.bind("$destroy",function(){f(),b.isRunning=!1}),b.countdownattr?(b.millis=1e3*b.countdownattr,b.addCDSeconds=c[0].addCDSeconds=function(a){b.countdown+=a,b.$digest(),b.isRunning||b.start()},b.$on("timer-add-cd-seconds",function(a,c){e(function(){b.addCDSeconds(c)})}),b.$on("timer-set-countdown-seconds",function(a,c){b.isRunning||b.clear(),b.countdown=c,b.millis=1e3*c,g()})):b.millis=0,g();var h=function(){b.millis=new Date-b.startTime;var a=b.millis%1e3;return b.endTimeAttr&&(b.millis=b.endTime-new Date,a=b.interval-b.millis%1e3),b.countdownattr&&(b.millis=1e3*b.countdown),b.millis<0?(b.stop(),b.millis=0,void g()):(g(),b.timeoutId=setTimeout(function(){h(),b.$digest()},b.interval-a),b.$emit("timer-tick",{timeoutId:b.timeoutId,millis:b.millis}),void(b.countdown>0?b.countdown--:b.countdown<=0&&b.stop()))};(void 0===b.autoStart||b.autoStart===!0)&&b.start()}]}}]); \ No newline at end of file From f67f6674af74b66e357e9318da2e195cf4845287 Mon Sep 17 00:00:00 2001 From: Mehdi Chamouma Date: Sat, 17 May 2014 04:01:16 +0200 Subject: [PATCH 3/3] Add tests for years and months new feature --- index.html | 2 +- test/e2e/scenarios.js | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/index.html b/index.html index 3e8f62f..bba59d6 100644 --- a/index.html +++ b/index.html @@ -195,7 +195,7 @@

countdown Time Display according to specified max Time Unit

countdown Time with max time unit option - year

- {{yyears}} year{{yearsS}}, {{mmonths}} month{{monthsS}}, {{ddays}} day{{daysS}}, {{hhours}} hour{{hoursS}}, {{mminutes}} minute{{minutesS}}, {{sseconds}} second{{secondsS}} + {{yyears}} year{{yearsS}}, {{mmonths}} month{{monthsS}}, {{ddays}} day{{daysS}}, {{hhours}} hour{{hoursS}}, {{mminutes}} minute{{minutesS}}, {{sseconds}} second{{secondsS}}

countdown Time with max time unit option - minute

diff --git a/test/e2e/scenarios.js b/test/e2e/scenarios.js index d404448..dc335f2 100644 --- a/test/e2e/scenarios.js +++ b/test/e2e/scenarios.js @@ -153,6 +153,13 @@ describe('Angular Timer E2E Tests', function () { expect({'timerText': timer2Val, 'unit': 'minutes', 'compareTo': 'EqualTo'}).toCompareWith(0); expect({'timerText': timer2Val, 'unit': 'seconds', 'compareTo': 'GreaterThan'}).toCompareWith(59); + var timer3Val = element('#max-time-unit-countdown-timer .WithMaxTimeUnitAsYear timer').text(); + expect({'timerText': timer3Val, 'unit': 'seconds', 'compareTo': 'LessThan'}).toCompareWith(60); + expect({'timerText': timer3Val, 'unit': 'minutes', 'compareTo': 'LessThan'}).toCompareWith(60); + expect({'timerText': timer3Val, 'unit': 'hours', 'compareTo': 'LessThan'}).toCompareWith(24); + expect({'timerText': timer3Val, 'unit': 'days', 'compareTo': 'LessThan'}).toCompareWith(30); + expect({'timerText': timer3Val, 'unit': 'months', 'compareTo': 'LessThan'}).toCompareWith(12); + }); });