67 lines
1.7 KiB
JavaScript
67 lines
1.7 KiB
JavaScript
'use strict';
|
|
|
|
angular.module('copayApp.directives')
|
|
.directive('timer', function() {
|
|
return {
|
|
restrict: 'EAC',
|
|
replace: false,
|
|
scope: {
|
|
countdown: "=",
|
|
interval: "=",
|
|
active: "=",
|
|
onZeroCallback: "="
|
|
},
|
|
template:"{{formatted}}",
|
|
controller: function ($scope, $attrs, $timeout, lodash) {
|
|
$scope.format = $attrs.outputFormat;
|
|
|
|
var queueTick = function () {
|
|
$scope.timer = $timeout(function () {
|
|
if ($scope.countdown > 0) {
|
|
$scope.countdown -= 1;
|
|
|
|
if ($scope.countdown > 0) {
|
|
queueTick();
|
|
} else {
|
|
$scope.countdown = 0;
|
|
$scope.active = false;
|
|
if (!lodash.isUndefined($scope.onZeroCallback)) {
|
|
$scope.onZeroCallback();
|
|
}
|
|
}
|
|
}
|
|
}, $scope.interval);
|
|
};
|
|
|
|
if ($scope.active) {
|
|
queueTick();
|
|
}
|
|
|
|
$scope.$watch('active', function (newValue, oldValue) {
|
|
if (newValue !== oldValue) {
|
|
if (newValue === true) {
|
|
if ($scope.countdown > 0) {
|
|
queueTick();
|
|
} else {
|
|
$scope.active = false;
|
|
}
|
|
} else {
|
|
$timeout.cancel($scope.timer);
|
|
}
|
|
}
|
|
});
|
|
$scope.$watch('countdown', function () {
|
|
updateFormatted();
|
|
});
|
|
|
|
var updateFormatted = function () {
|
|
$scope.formatted = moment($scope.countdown * $scope.interval).format($scope.format);
|
|
};
|
|
updateFormatted();
|
|
|
|
$scope.$on('$destroy', function () {
|
|
$timeout.cancel($scope.timer);
|
|
});
|
|
}
|
|
};
|
|
});
|