{"version":3,"sources":["tek.progress-bar.min.js","tek.progress-bar.js"],"names":["angular","module","run","$templateCache","put","directive","scope","manager","containerClass","barClass","ngModel","mode","restrict","transclude","controllerAs","templateUrl","bindToController","controller","$scope","$element","ProgressObj","element","divElements","find","this","containerElement","addClass","settings","barContainer","value","bar","fullClass","emptyClass","verticalClass","horizontalClass","prototype","get","set","val","css","updateClasses","removeClass","setAnimation","init","progressObj","facade","newVal","undefined","$evalAsync","_getDefer","resolve","$on","_updateDefer","$watch","_updateValue","requestAnimationFrame","window","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","callback","setTimeout","factory","$q","params","deferred","defer","instance","lastVal","animation","requiredClear","incrementSpeed","incrementStrategy","stat","rnd","Math","random","round","extend","intervalCont","interval","increment","progressBarManager","setInterval","self","clear","clearInterval","isInProgress","promise","then","data","getPromise","Error","increase","start","stop","done","reset","animationVal","isAnimated"],"mappings":"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","file":"tek.progress-bar.min.js","sourcesContent":[null,"/**\n * angular-tek-progress-bar - angular-tek-progress-bar is an AngularJS module to create and controls progress bar.\n * @version v0.2.0\n * @link https://github.com/TekVanDo/Angular-Tek-Progress-bar\n * @license MIT\n */\n(function () {\r\n \"use strict\";\r\n angular.module('Tek.progressBar', []).run(['$templateCache', function ($templateCache) {\r\n $templateCache.put('Tek.progressBarDirective.html', \"
\");\r\n }]);\r\n}());\n(function () {\r\n \"use strict\";\r\n angular.module('Tek.progressBar').directive('tekProgressBar', function () {\r\n return {\r\n scope: {\r\n manager: \"=\",\r\n containerClass: \"@class\",\r\n barClass: \"@\",\r\n ngModel: \"=\",\r\n mode: '@'\r\n },\r\n restrict: \"E\",\r\n transclude: true,\r\n controllerAs: \"bar\",\r\n templateUrl: \"Tek.progressBarDirective.html\",\r\n bindToController: true,\r\n controller: ['$scope', '$element', function ($scope, $element) {\r\n var bar = this;\r\n\r\n var settings = {\r\n fullClass: 'full-bar',\r\n emptyClass: 'empty-bar',\r\n verticalClass: 'vertical',\r\n horizontalClass: ''\r\n };\r\n\r\n function ProgressObj(element, mode) {\r\n var divElements = element.find('div');\r\n this.mode = mode;\r\n this.containerElement = angular.element(divElements[0]);\r\n this.containerElement.addClass(settings[mode + 'Class']);\r\n this.barContainer = angular.element(divElements[1]);\r\n this.value = 0;\r\n }\r\n\r\n ProgressObj.prototype.get = function () {\r\n return this.value;\r\n };\r\n\r\n ProgressObj.prototype.set = function (val) {\r\n this.value = val;\r\n if(this.mode === 'horizontal'){\r\n this.barContainer.css('width', val + '%');\r\n }\r\n if(this.mode === 'vertical'){\r\n this.barContainer.css('height', val + '%');\r\n }\r\n this.updateClasses();\r\n };\r\n\r\n ProgressObj.prototype.updateClasses = function () {\r\n if (this.value <= 0) {\r\n this.containerElement.removeClass(settings.fullClass);\r\n return this.containerElement.addClass(settings.emptyClass);\r\n }\r\n\r\n if (this.value >= 100) {\r\n this.containerElement.removeClass(settings.emptyClass);\r\n return this.containerElement.addClass(settings.fullClass);\r\n }\r\n\r\n this.containerElement.removeClass(settings.fullClass);\r\n this.containerElement.removeClass(settings.emptyClass);\r\n };\r\n\r\n ProgressObj.prototype.setAnimation = function (val) {\r\n if(val === true){\r\n this.barContainer.css('transition', '');\r\n }else{\r\n this.barContainer.css('transition', 'none');\r\n }\r\n };\r\n\r\n bar.init = function () {\r\n bar.mode = (bar.mode === 'vertical') ? bar.mode : 'horizontal';\r\n bar.progressObj = new ProgressObj($element, bar.mode);\r\n var facade = {\r\n get: function () {\r\n return bar.progressObj.get();\r\n },\r\n set: function (newVal) {\r\n if (bar.ngModel !== undefined) { // todo setInterval problem\r\n $scope.$evalAsync(function () {\r\n bar.ngModel = newVal;\r\n });\r\n } else {\r\n bar.progressObj.set(newVal);\r\n }\r\n },\r\n setAnimation: function (val) {\r\n bar.progressObj.setAnimation(val);\r\n }\r\n };\r\n\r\n if (bar.manager) {\r\n bar.manager._getDefer().resolve(facade);\r\n $scope.$on('$destroy', function () {\r\n bar.manager._updateDefer();\r\n });\r\n }\r\n\r\n if (bar.ngModel !== undefined) {\r\n $scope.$watch('bar.ngModel', function (newVal) {\r\n if(typeof newVal !== 'number' || newVal < 0 || newVal !== newVal){\r\n newVal = 0;\r\n }\r\n\r\n if(newVal > 100){\r\n newVal = 100;\r\n }\r\n\r\n if (bar.manager) {\r\n bar.manager._updateValue(newVal);\r\n }\r\n bar.progressObj.set(newVal);\r\n });\r\n }\r\n };\r\n bar.init();\r\n }]\r\n }\r\n });\r\n}());\n(function () {\r\n \"use strict\";\r\n var requestAnimationFrame = (function () {\r\n return window.requestAnimationFrame ||\r\n window.webkitRequestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n window.oRequestAnimationFrame ||\r\n window.msRequestAnimationFrame ||\r\n function (callback) {\r\n window.setTimeout(callback, 1000 / 60);\r\n };\r\n })();\r\n\r\n angular.module('Tek.progressBar').factory('progressBarManager', ['$q', function ($q) {\r\n return function (params) {\r\n var deferred = $q.defer();\r\n var instance = null;\r\n var lastVal = 0;\r\n var animation = true;\r\n var requiredClear = false;\r\n\r\n var settings = {\r\n incrementSpeed: 300,\r\n incrementStrategy: function (stat) {\r\n var rnd = 0;\r\n if (stat >= 0 && stat < 25) {\r\n rnd = (Math.random() * (5 - 3 + 1) + 3);\r\n } else if (stat >= 25 && stat < 65) {\r\n rnd = (Math.random() * 3);\r\n } else if (stat >= 65 && stat < 90) {\r\n rnd = (Math.random() * 2);\r\n } else if (stat >= 90 && stat < 99) {\r\n rnd = 0.5;\r\n }\r\n return Math.round((stat + rnd) * 100) / 100;\r\n }\r\n };\r\n\r\n if(params) {\r\n angular.extend(settings, params);\r\n }\r\n\r\n var intervalCont = (function () {\r\n var interval = null;\r\n return {\r\n increment: function () {\r\n progressBarManager.set(settings.incrementStrategy(lastVal));\r\n },\r\n setInterval: function () {\r\n var self = this;\r\n if (requiredClear) {\r\n requiredClear = false;\r\n progressBarManager.clear();\r\n }\r\n\r\n if (!interval) {\r\n interval = setInterval(function () {\r\n self.increment();\r\n }, settings.incrementSpeed);\r\n }\r\n },\r\n clearInterval: function () {\r\n clearInterval(interval);\r\n interval = null;\r\n },\r\n isInProgress: function () {\r\n return !!interval;\r\n }\r\n };\r\n }());\r\n\r\n var progressBarManager = {\r\n _getDefer: function () {\r\n return deferred;\r\n },\r\n _updateDefer: function () {\r\n deferred = $q.defer();\r\n instance = null;\r\n deferred.promise.then(function (data) {\r\n instance = data;\r\n instance.set(lastVal);\r\n instance.setAnimation(animation);\r\n });\r\n },\r\n _updateValue: function (val) {\r\n lastVal = val;\r\n },\r\n getPromise: function () {\r\n return deferred.promise;\r\n },\r\n set: function (val) {\r\n //Checking value is number and not NaN\r\n if (typeof val !== 'number' || val !== val) {\r\n throw new Error(\"Wrong value\");\r\n }\r\n if (val < 0) {\r\n val = 0;\r\n }\r\n if (val > 100) {\r\n val = 100;\r\n }\r\n lastVal = val;\r\n\r\n //huck if need to clear before new set\r\n if (requiredClear) {\r\n requiredClear = false;\r\n this.clear(val);\r\n return this;\r\n } else {\r\n if (instance) {\r\n instance.set(lastVal);\r\n }\r\n }\r\n return this;\r\n },\r\n get: function () {\r\n return lastVal;\r\n },\r\n isInProgress: function () {\r\n return intervalCont.isInProgress();\r\n },\r\n increase: function (value) {\r\n if(typeof value === 'number' && value === value){\r\n this.set(lastVal + value);\r\n }else{\r\n intervalCont.increment();\r\n }\r\n return this;\r\n },\r\n start: function () {\r\n intervalCont.setInterval();\r\n return this;\r\n },\r\n stop: function () {\r\n intervalCont.clearInterval();\r\n return this;\r\n },\r\n done: function () {\r\n this.stop();\r\n this.set(100);\r\n requiredClear = true;\r\n return this;\r\n },\r\n reset: function () {\r\n this.stop();\r\n this.set(0);\r\n return this;\r\n },\r\n clear: function (val) {\r\n var animationVal = this.isAnimated();\r\n var self = this;\r\n this.stop();\r\n this.setAnimation(false);\r\n this.reset();\r\n\r\n var deferred = $q.defer();\r\n requestAnimationFrame(function () {\r\n self.setAnimation(animationVal);\r\n deferred.resolve();\r\n });\r\n\r\n deferred.promise.then(function () {\r\n if(val !== undefined) {\r\n self.set(val);\r\n }\r\n });\r\n\r\n return this;\r\n },\r\n setAnimation: function (val) {\r\n animation = !!val;\r\n deferred.promise.then(function (data) {\r\n data.setAnimation(animation);\r\n });\r\n return this;\r\n },\r\n isAnimated: function () {\r\n return animation;\r\n }\r\n };\r\n\r\n progressBarManager._updateDefer(0);\r\n\r\n return progressBarManager;\r\n }\r\n }]);\r\n}());"],"sourceRoot":"/source/"}