'use strict';var btnOk=0x0001;var btnCancel=0x0002;var btnRetryCancel=0x0004;var btnYes=0x0008;var btnNo=0x0010;var iconWarning=0x0001;var iconUser=0x0002;var iconCheck=0x0004;var HEADER_NAME='2book-Handle-Errors-Generically';var specificallyHandleInProgress=false;angular.module('twoBookApp').controller('ErrorHandlingTestCtrl',function($scope,$http){$scope.request=function(){$http.get('/xxxx');};});angular.module('twoBookApp').config(['$provide','$httpProvider',function($provide,$httpProvider){$httpProvider.interceptors.push('RequestsErrorHandler');$httpProvider.interceptors.push('SetHttpTimeout');$httpProvider.defaults.useXDomain=true;delete $httpProvider.defaults.headers.common['X-Requested-With'];function addHeaderToConfig(config){config=config||{};config.headers=config.headers||{};if(!specificallyHandleInProgress){config.headers[HEADER_NAME]=true;} return config;} $provide.decorator('$http',['$delegate',function($delegate){function decorateRegularCall(method){return function(url,config){return $delegate[method](url,addHeaderToConfig(config));};} function decorateDataCall(method){return function(url,data,config){return $delegate[method](url,data,addHeaderToConfig(config));};} function copyNotOverriddenAttributes(newHttp){for(var attr in $delegate){if(!newHttp.hasOwnProperty(attr)){if(typeof($delegate[attr])==='function'){newHttp[attr]=function(){return $delegate[attr].apply($delegate,arguments);};}else{newHttp[attr]=$delegate[attr];}}}} var newHttp=function(config){return $delegate(addHeaderToConfig(config));};newHttp.get=decorateRegularCall('get');newHttp.delete=decorateRegularCall('delete');newHttp.head=decorateRegularCall('head');newHttp.jsonp=decorateRegularCall('jsonp');newHttp.post=decorateDataCall('post');newHttp.put=decorateDataCall('put');copyNotOverriddenAttributes(newHttp);return newHttp;}]);}]);angular.module('twoBookApp').factory('SetHttpTimeout',['$rootScope','$q',function($rootScope,$q){return{request:function(config){config.timeout=100000;return config;}}}]);angular.module('twoBookApp').factory('RequestsErrorHandler',['$injector','$timeout','$q',function($injector,$timeout,$q){return{'specificallyHandled':function(specificallyHandledBlock){specificallyHandleInProgress=true;try{return specificallyHandledBlock();}finally{specificallyHandleInProgress=false;}},'responseError':function(rejection){var ErrorDialog=$injector.get('ErrorDialog');var $http=$injector.get('$http');var shouldHandle=(rejection&&rejection.config&&rejection.config.headers&&rejection.config.headers[HEADER_NAME]);if(rejection&&rejection.status&&rejection.status<=0){rejection.statusText='The server is not reachable.'} switch(rejection.status){case 408:DEBUG&&console.log('connection timed out');break;case 400:if(rejection.data&&rejection.data.error&&rejection.data.error=="invalid_grant"){DEBUG&&console.log('refresh token expired');rejection.status=418;rejection.statusText="Sitzung abgelaufen";} case 418:DEBUG&&console.log('refresh token expired');break;default:break;} if(shouldHandle){return ErrorDialog.show(rejection,btnOk).then(function(){return $q.reject(rejection);});} return $q.reject(rejection);}}}]);angular.module('twoBookApp').service('ErrorDialogEmbedded',['$window','$uibModal',function($window,$uibModal){var show=function(message,btn,icon,position){var modalInstance=$uibModal.open({backdrop:false,templateUrl:'/app/components/common/error-dialog-embedded.template.html',controller:'ErrorDialogController',appendTo:$(document).find('#'+position),resolve:{errMsg:function(){return message;},btn:btn,icon:icon,sessionTimeout:false}});modalInstance.rendered.then(function(modal){var element=document.getElementById(position),rect=element.getBoundingClientRect(),modal=document.querySelector('.modal-dialog');modal.style.margin=0;modal.style.left=rect.left+'px';modal.style.top=rect.top+'px';modal.style.width=element.offsetWidth+'px';$(document).find('#'+position).trigger("change");modal.style.visibility='visible';});modalInstance.closed.then(function(){$(document).find('#'+position).trigger("change");});return modalInstance.result;} return{show:show}}]);angular.module('twoBookApp').factory('ErrorDialog',['$window','$uibModal',function($window,$uibModal){var show=function(rejection,btn){var modalInstance=$uibModal.open({backdrop:false,templateUrl:'/app/components/common/error-dialog.template.html',controller:'ErrorDialogController',resolve:{sessionTimeout:function(){return rejection.status==418;},errMsg:function(){return rejection.status+" "+rejection.statusText+': '+(typeof(rejection.data)==='object'?rejection.data.Message:rejection.data)},btn:btn,icon:0}});return modalInstance.result;} return{show:show}}]);angular.module('twoBookApp').controller('ErrorDialogController',['$scope','$uibModalInstance','errMsg','btn','icon','sessionTimeout',function($scope,$uibModalInstance,errMsg,btn,icon,sessionTimeout){$scope.errMsg=decodeHtml(errMsg);$scope.btn=btn;$scope.showBtnOk=btn&btnOk;$scope.showBtnRetry=btn&btnRetryCancel;$scope.showBtnCancel=(btn&btnRetryCancel)||(btn&btnCancel);$scope.showBtnYes=btn&btnYes;$scope.showBtnNo=btn&btnNo;$scope.sessionTimeout=sessionTimeout;$scope.icon=icon;$scope.showIconWarning=icon&iconWarning;$scope.showIconUser=icon&iconUser;$scope.showIconCheck=icon&iconCheck;$scope.retry=function(){$uibModalInstance.close();};$scope.cancel=function(){$uibModalInstance.dismiss();};$scope.ok=function(){$uibModalInstance.close();};}]);function tboAlert(meassage){App.alert({container:"#AlertMessage",type:"danger",message:meassage,close:true,reset:false,focus:true,icon:"warning"})} function tboWarning(meassage){App.alert({container:"#AlertMessage",type:"warning",message:meassage,close:true,reset:false,focus:true,icon:"warning"})} function tboCloseAllAlerts(){App.alert({container:"#AlertMessage",type:"",message:"",close:false,reset:true,focus:false,closeInSeconds:1,icon:""})} function decodeHtml(html){var txt=document.createElement("textarea");txt.innerHTML=html;return txt.value;}