angular-page-loader
Version:
quick app integration for your favourite loaders
2 lines • 1.81 kB
JavaScript
/* angular-page-loader - v1.0.0 by codekraft-studio - 2016-09-29 */
function pageLoader($timeout,$templateCache,$injector,$location){function _link(scope,elem,attr){function _start(e){$timeout.cancel(promise),scope.$evalAsync(function(){e.defaultPrevented||(promise=$timeout(function(){elem.removeClass("ng-hide")},latency))})}function _stop(){$timeout.cancel(promise),elem.addClass("ng-hide")}var promise,inner=elem.children().eq(0),latency=attr.latency||250,hexReg=/^#[0-9A-F]{6}$/i,rgbReg=/rgb\((\d{1,3}), (\d{1,3}), (\d{1,3})\)/,rgbaReg=/rgba\((\d{1,3}), (\d{1,3}), (\d{1,3}), (\d+(\.\d+))\)/,color=hexReg.test(attr.bgColor)||rgbReg.test(attr.bgColor)||rgbaReg.test(attr.bgColor)?attr.bgColor:angular.isString(attr.bgColor)?attr.bgColor:"white";if(elem.css({position:"absolute",width:"100%",height:"100%","z-index":"10000","background-color":color}),!inner.children().length){var loader=document.createElement("div");loader.className=attr.loaderClass||"loader",inner.append(loader)}if(scope.isLoading=!0,attr.flag)scope.$watch("isLoading",function(n){return n?elem.removeClass("ng-hide"):elem.addClass("ng-hide")});else try{window.angular.module("ngRoute"),scope.$on("$locationChangeStart",_start),scope.$on("$routeChangeSuccess",_stop),scope.$on("$routeChangeError",_stop)}catch(e){try{window.angular.module("ui.router"),scope.$on("$stateChangeStart",_start),scope.$on("$stateChangeSuccess",_stop),scope.$on("$stateChangeError",_stop)}catch(e){}finally{}}}var directive={restrict:"EA",replace:!1,scope:{isLoading:"=?flag"},transclude:!0,template:'<div class="loader-container" ng-transclude></div>',link:_link};return directive}angular.module("angular-page-loader",[]),angular.module("angular-page-loader",[]).directive("pageLoader",pageLoader),pageLoader.$inject=["$timeout","$templateCache","$injector"];