UNPKG

thalassa-aqueduct

Version:

Dynamic haproxy load balancer and configuration. Part of Thalassa

106 lines (94 loc) 3.5 kB
angular.module('ui.bootstrap.progressbar', ['ui.bootstrap.transition']) .constant('progressConfig', { animate: true, autoType: false, stackedTypes: ['success', 'info', 'warning', 'danger'] }) .controller('ProgressBarController', ['$scope', '$attrs', 'progressConfig', function($scope, $attrs, progressConfig) { // Whether bar transitions should be animated var animate = angular.isDefined($attrs.animate) ? $scope.$eval($attrs.animate) : progressConfig.animate; var autoType = angular.isDefined($attrs.autoType) ? $scope.$eval($attrs.autoType) : progressConfig.autoType; var stackedTypes = angular.isDefined($attrs.stackedTypes) ? $scope.$eval('[' + $attrs.stackedTypes + ']') : progressConfig.stackedTypes; // Create bar object this.makeBar = function(newBar, oldBar, index) { var newValue = (angular.isObject(newBar)) ? newBar.value : (newBar || 0); var oldValue = (angular.isObject(oldBar)) ? oldBar.value : (oldBar || 0); var type = (angular.isObject(newBar) && angular.isDefined(newBar.type)) ? newBar.type : (autoType) ? getStackedType(index || 0) : null; return { from: oldValue, to: newValue, type: type, animate: animate }; }; function getStackedType(index) { return stackedTypes[index]; } this.addBar = function(bar) { $scope.bars.push(bar); $scope.totalPercent += bar.to; }; this.clearBars = function() { $scope.bars = []; $scope.totalPercent = 0; }; this.clearBars(); }]) .directive('progress', function() { return { restrict: 'EA', replace: true, controller: 'ProgressBarController', scope: { value: '=percent', onFull: '&', onEmpty: '&' }, templateUrl: 'template/progressbar/progress.html', link: function(scope, element, attrs, controller) { scope.$watch('value', function(newValue, oldValue) { controller.clearBars(); if (angular.isArray(newValue)) { // Stacked progress bar for (var i=0, n=newValue.length; i < n; i++) { controller.addBar(controller.makeBar(newValue[i], oldValue[i], i)); } } else { // Simple bar controller.addBar(controller.makeBar(newValue, oldValue)); } }, true); // Total percent listeners scope.$watch('totalPercent', function(value) { if (value >= 100) { scope.onFull(); } else if (value <= 0) { scope.onEmpty(); } }, true); } }; }) .directive('progressbar', ['$transition', function($transition) { return { restrict: 'EA', replace: true, scope: { width: '=', old: '=', type: '=', animate: '=' }, templateUrl: 'template/progressbar/bar.html', link: function(scope, element) { scope.$watch('width', function(value) { if (scope.animate) { element.css('width', scope.old + '%'); $transition(element, {width: value + '%'}); } else { element.css('width', value + '%'); } }); } }; }]);