hypery2k/angular-invocation-handler

View on GitHub
dist/angular-invocation-handler.min.js

Summary

Maintainability
A
0 mins
Test Coverage
/* angular-invocation-handler - Version 1.4.4, 25-06-2016
 * 
 * Enables general error handling and logging which allows to log errors, e.g for automatically sending back to the backend or for showing to the user
 * 
 * Copyright 2016  - Martin Reinhardt <contact@martinreinhardt-online.de>
 * License MIT
 */
!function(a){"use strict";var b=a.module("ngIH.core",[]),c=a.module("ngIH.ui",[]);b.constant("ngIHConfig",{model:{alerts:"alerts"},httpErrors:{0:"Der Server ist nicht erreichbar..",404:"Dieser Dienst existiert nicht.",405:"Zugriffsfehler.",500:"Unbekannte Serverfehler."},httpTimeout:3e3,redirect:!1,customErrorHandler:!1,template:'<alert ng-repeat="alert in alerts" type="{{alert.type}}" close="alerts.splice($index, 1)">{{::alert.msg}}</alert>',feedbackAttach:!1}),b.provider("ngIHService",function(){function b(b,c,d){return a.extend(function(){var a=b.get("ngIHService");return a.call(d,c,arguments)},d)}function c(a){return!!(a&&a.constructor&&a.call&&a.apply)}var d=["$delegate","$injector",function(c,d){for(var e in c)a.isFunction(c[e])&&(c[e]=b(d,c,c[e]));return c}];return{decorate:function(b,c){a.forEach(c,function(a){b.decorator(a,d)})},$get:["$log","$injector","$window","$location","feedbackUI","ngIHConfig",function(b,d,e,f,g,h){var i={errors:[],resolveErrorCode:function(c,f,g){if(f){var i={error:{message:"An unknown error occurred.",data:f.data},timestamp:new Date,browserInfo:{navigatorAppName:navigator.appName,navigatorUserAgent:navigator.userAgent,navigatorPlatform:navigator.platform},location:a.toJson(e.location),performance:e.performance?a.toJson(e.performance):null};if(f&&!a.isUndefined(f.status))i.status=f.status,h.customErrorHandler||(i.error.message=h.httpErrors[f.status0]);else if(f&&f.message){var j=f.message;i.error.exception=j.toString(),j.stack&&(i.error.stack=j.stack.toString())}c&&c.description&&(i.descripton="Call to "+c.description+" had caused errors."),b.error("An error occurred: "+JSON.stringify(i)),h.customErrorHandler?d.get(h.customErrorHandler).resolve(i,g):g(i)}},funcError:function(a,d,e){var j=c(e[e.length-1])&&!c(e[e.length-2]);(!e||e&&0===e.length||e&&j)&&i.resolveErrorCode(a,d,function(a){h.feedbackAttach&&g.appendErrorMsg(a),i.errors.push(a),h.redirect&&(b.info("Redirect to /"+d.status+".html"),f.path("/"+d.status+".html"))})},call:function(c,d,e){b.debug("Function called: ",c.name||c);var f;try{f=c.apply(d,e)}catch(g){throw i.funcError(c,g,e),g}var h=f&&f.$promise||f;return h&&a.isFunction(h.then)&&a.isFunction(h["catch"])&&i.async(c,h,e),f},async:function(a,b,c){return b["catch"](function(b){i.funcError(a,b,c)}),b}};return i}]}}),b.factory("httpErrorInterceptor",["ngIHConfig",function(a){return{request:function(b){return b.timeout=a.httpTimeout,b}}}]),b.config(["$provide","$httpProvider",function(a,b){b.interceptors.push("httpErrorInterceptor"),a.decorator("$exceptionHandler",["$delegate",function(a){return function(b,c){a(b,c)}}])}]),c.factory("feedbackUI",["ngIHConfig","$timeout","$rootScope",function(a,b,c){return{appendErrorMsg:function(b){(!c[a.model.alerts]||a.feedbackClear)&&(c[a.model.alerts]=[]),c[a.model.alerts].push({type:"danger",msg:b})},appendInfoMsg:function(b){(!c[a.model.alerts]||a.feedbackClear)&&(c[a.model.alerts]=[]),c[a.model.alerts].push({type:"info",msg:b})}}}]),c.directive("uiErrorHandler",["$rootScope","ngIHConfig",function(a,b){var c=function(a,c,d){b.scrollToError&&a.$watchCollection("val",function(a){$("body").animate({scrollTop:c.offset().top},"slow")})};return{restrict:"E",scope:{val:"="},compile:function(a){return a.append(b.template),c}}}]),c.run(["$rootScope","$document","$timeout","ngIHConfig","$templateCache",function(b,c,d,e,f){if(b.$on("$locationChangeSuccess",function(){d(function(){b[e.model.alerts]=[]})}),e.feedbackAttach){var g='<ui-error-handler val="alerts"></ui-error-handler>',h=e.uiSelector||".navbar";c.find(h).length?a.element(c.find(h)).append(g):a.element(c.find("body")).prepend(g),e.template&&(e.templateUrl="$$angular-errorhandler-template$$",f.put(e.templateUrl,e.template))}}])}(angular);