Skip to content

Commit cad73af

Browse files
Paul LeclercqPaul Leclercq
authored andcommitted
progressBarService added and logic inside _timer.js
1 parent 9afae98 commit cad73af

File tree

2 files changed

+68
-2
lines changed

2 files changed

+68
-2
lines changed

app/js/_timer.js

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ var timerModule = angular.module('timer', [])
1313
language: '@?',
1414
maxTimeUnit: '='
1515
},
16-
controller: ['$scope', '$element', '$attrs', '$timeout', 'I18nService', '$interpolate', function ($scope, $element, $attrs, $timeout, I18nService, $interpolate) {
16+
controller: ['$scope', '$element', '$attrs', '$timeout', 'I18nService', '$interpolate', 'progressBarService', function ($scope, $element, $attrs, $timeout, I18nService, $interpolate, progressBarService) {
1717

1818
// Checking for trim function since IE8 doesn't have it
1919
// If not a function, create tirm with RegEx to mimic native trim
@@ -40,6 +40,10 @@ var timerModule = angular.module('timer', [])
4040
var i18nService = new I18nService();
4141
i18nService.init($scope.language);
4242

43+
//progress bar
44+
$scope.displayProgressBar = 0;
45+
$scope.displayProgressActive = 'active'; //Bootstrap active effect for progress bar
46+
4347
if ($element.html().trim().length === 0) {
4448
$element.append($compile('<span>' + $interpolate.startSymbol() + 'millis' + $interpolate.endSymbol() + '</span>')($scope));
4549
} else {
@@ -252,19 +256,30 @@ var timerModule = angular.module('timer', [])
252256
calculateTimeUnits();
253257

254258
var tick = function tick() {
255-
259+
var typeTimer = null; // countdown or endTimeAttr
256260
$scope.millis = moment().diff($scope.startTime);
257261
var adjustment = $scope.millis % 1000;
258262

259263
if ($scope.endTimeAttr) {
264+
typeTimer = $scope.endTimeAttr;
260265
$scope.millis = moment($scope.endTime).diff(moment());
261266
adjustment = $scope.interval - $scope.millis % 1000;
262267
}
263268

264269
if ($scope.countdownattr) {
270+
typeTimer = $scope.countdownattr;
265271
$scope.millis = $scope.countdown * 1000;
266272
}
267273

274+
if(typeTimer !== null){
275+
//calculate progress bar
276+
$scope.progressBar = progressBarService.calculateProgressBar($scope.startTime, $scope.millis, $scope.endTime, $scope.countdownattr);
277+
278+
if($scope.progressBar === 100){
279+
$scope.displayProgressActive = ''; //No more Bootstrap active effect
280+
}
281+
}
282+
268283
if ($scope.millis < 0) {
269284
$scope.stop();
270285
$scope.millis = 0;

app/js/progressBarService.js

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
var app = angular.module('timer');
2+
3+
app.factory('progressBarService', function() {
4+
5+
var ProgressBarService = function() {};
6+
7+
/**
8+
* calculate the remaining time in a progress bar in percentage
9+
* @param {momentjs} startValue in seconds
10+
* @param {integer} currentCountdown, where are we in the countdown
11+
* @param {integer} remainingTime, remaining milliseconds
12+
* @param {integer} endTime, end time, can be undefined
13+
* @param {integer} coutdown, original coutdown value, can be undefined
14+
*
15+
* joke : https://www.youtube.com/watch?v=gENVB6tjq_M
16+
* @return {float} 0 --> 100
17+
*/
18+
ProgressBarService.prototype.calculateProgressBar = function calculateProgressBar(startValue, remainingTime, endTimeAttr, coutdown) {
19+
var displayProgressBar = 0,
20+
endTimeValue,
21+
initialCountdown;
22+
23+
remainingTime = remainingTime / 1000; //seconds
24+
25+
26+
if(endTimeAttr !== null){
27+
endTimeValue = moment(endTimeAttr);
28+
initialCountdown = endTimeValue.diff(startValue, 'seconds');
29+
displayProgressBar = remainingTime * 100 / initialCountdown;
30+
}
31+
else {
32+
displayProgressBar = remainingTime * 100 / coutdown;
33+
}
34+
35+
if(typeof coutdown !== 'undefined') {
36+
console.log("$scope.countdownattr", coutdown);
37+
console.log("$scope.progressBar", displayProgressBar);
38+
console.log("$scope.remainingTime", remainingTime);
39+
}
40+
displayProgressBar = 100 - displayProgressBar; //To have 0 to 100 and not 100 to 0
41+
displayProgressBar = Math.round(displayProgressBar * 10) / 10; //learn more why : http://stackoverflow.com/questions/588004/is-floating-point-math-broken
42+
43+
if(displayProgressBar > 100){ //security
44+
displayProgressBar = 100;
45+
}
46+
47+
return displayProgressBar;
48+
};
49+
50+
return new ProgressBarService();
51+
});

0 commit comments

Comments
 (0)