{"version":3,"sources":["components/breadcrumb/breadcrumb.js"],"names":["angular","module","service","$rootScope","$state","$location","stateHistory","actual","backButton","lastViewScope","getName","stateName","scope","state","current","params","console","warn","index","newEntry","$watch","actualState","actObj","length","i","hasOwnProperty","histObj","sameParameters","par","deepCompare","getIndexOfDuplicate","path","go","name","push","newLocation","oldLocation","slice","deleteBreadcrumbTail","addState","$on","event","toState","toParams","fromState","fromParams","goBack","actualLocation","a","popLastState","targetScope","getBreadcrumb","templateUrl","this","undefined","breadcrumb","goTo","isBack","indexOf","splice","directive","breadcrumbService","restrict","controller","$scope"],"mappings":"AAAA,aAEAA,QAAQC,OAAO,qBAEfC,QAAQ,qBAAsB,aAAc,SAAS,YAArDA,SAAQC,EAAAC,EAAsBC,GAElBC,IACMC,EACNC,EAFAF,KAGAG,EAAgBN,EAGZO,EAAOC,SAAcA,EAAYC,GACjC,MAAuB,mBAANA,EACdD,EAAAC,GAEPD,GAoEIL,EAAiB,WAdhBC,IAkBKA,GACNM,MAAAT,EAAAU,QACJC,OAAAX,EAAAW,SAIIC,IAAQC,EAAKV,EAAAM,MACbE,EAAAR,EAAAQ,OACJH,EAAAH,EAWIS,GAPQL,EAAG,YAAAA,EAAA,WAAA,eACJA,QAMCA,EAAG,UAAAA,EAAA,YAAAA,EAAA,WAAA,QAIf,GAAAA,EAAA,YAAAA,EAAA,WAAA,KAAA,CASC,IAAAM,GAEHN,MAAAA,EAEYE,OAACA,GAKJK,EAxG0B,SAAAC,GAErBC,IAAAA,IAASD,EAAAA,EAAAA,EAAWf,EAAOiB,SAAAC,EAG1B,GAFSlB,EAAsBO,MAAA,OAAAP,EAAAkB,GAAAX,MAAA,KAEZ,CAEV,IAACY,GAAmB,EAK1BH,EAAAD,EAAAN,OACJW,EAAApB,EAAAkB,GAAAT,OAEAY,IAAAA,IAAgBC,KAAAN,EAEpB,GAAAA,EAAAG,eAAAG,IACJF,EAAAD,eAAAG,KACJC,aAAAP,EAAAM,GAAAF,EAAAE,KACS,CACZD,GAAA,EAGuB,MAIN,GAAAA,EACd,OAAAH,EAIQ,OAAQ,EAuEFM,CAAWX,GAClBd,EAAU0B,EAhEpB,SAAAZ,EAAAN,EAAAE,EAAAH,GAIQL,EAAQ,MAAAD,EAAAiB,OACTJ,EAAA,KAAAT,EAAAG,EAAA,WAAA,KAAAD,GACMO,EAAG,YAAAT,EAAAG,EAAA,WAAA,KAAAD,GACLC,EAAcC,MAAOD,EACrBE,EAAeA,OAAAA,EAClBI,EAAA,KAAA,WACLf,EAAA4B,GAAAnB,EAAAoB,KAAAlB,IAXAT,EAAa4B,KAAKf,GAkEVgB,CAAaC,EAAAA,EAAarB,EAAAH,GArEjC,SAAAM,GAZDZ,EAAeA,EAAa+B,MAAM,EAAGnB,GAmFvBoB,CAAApB,EAAA,QApBjBF,QAAAC,KAAA,cAAAJ,EAAAoB,KAAA,iCAwBDM,IACApC,EAAeqC,IAAA,oBAAsB,SAAeC,EAAEC,EAASC,EAAAC,EAAAC,GAEvDrC,GACQK,MAAE6B,EACd3B,OAAA4B,KAQHxC,EAAAqC,IAAA,yBAAA,WAEIM,EAASC,eAAY1C,EAAA0B,SAGlBzB,IAAAA,EAAAA,KACAF,EAAUgB,OAAO,WACd,OAAAf,EAAA0B,QACHzB,SAAaA,EAAaiB,GAC9BpB,EAAA4C,iBAAAZ,GAEHa,EAAAF,WAMA3C,EAAAqC,IAAA,qBAAA,SAAAC,EAAAC,GACIO,EAAeR,EAAUS,YACd1C,GACf+B,IAGN/B,GAAA,IAMSI,KAASuC,cAAA,WACTC,OAAa9C,GAIT+C,KAAAP,OAAU,gBA/BOQ,IAAjBhD,GAA8BA,EAAaiB,OAAS,GAmC1CjB,KACCiD,EAAAA,GAAU,SAGxBjD,EAAAA,EAAAiB,OAAA,GAAAiC,QA7BLH,KAAKI,OAAS,WAGV,OAAQnD,EAAaiB,QAAU,IAAuD,KAFnE,OAAQ,SAEqBmC,QAAQpD,EAAa,GAAS,OAElF+C,KAAKJ,aAAe,WAChB3C,EAAaqD,OAAQrD,EAAaiB,OAAO,EAAE,OAMvDqC,UAAU,mBAAoB,aAAc,oBACxC,SAAUzD,EAAY0D,GAClB,OACIC,SAAU,IACVlD,SACAwC,YAAa,mCAGbW,YAAU,SAAE,SAAUC,GAClB,WAEAA,EAAOT,WAAaM,EAAkBV,gBAEtChD,EAAWqC,IAAI,qBAAsB,WACjCwB,EAAOT,WAAaM,EAAkBV","file":"breadcrumb.js","sourcesContent":["\"use strict\";\r\n\r\nangular.module(\"app.breadcrumb\", []).//\r\n\r\nservice(\"breadcrumbService\", ['$rootScope', '$state','$location',\r\n function ($rootScope, $state,$location) {\r\n var stateHistory = [];\r\n var actual;\r\n var backButton;\r\n var lastViewScope = $rootScope;\r\n\r\n var getName = function (stateName, scope) {\r\n if (typeof stateName === \"function\") {\r\n return stateName(scope);\r\n } else {\r\n return stateName;\r\n }\r\n };\r\n\r\n\r\n\r\n var getIndexOfDuplicate = function (actualState) {\r\n for (var i = 0; i < stateHistory.length; ++i) {\r\n var duplicated = actualState.state['name'] === stateHistory[i].state['name'];\r\n if (duplicated) {\r\n var sameParameters = true;\r\n\r\n let actObj = actualState.params;\r\n let histObj = stateHistory[i].params;\r\n\r\n for (var par in actObj) {\r\n\r\n if (actObj.hasOwnProperty(par)\r\n && histObj.hasOwnProperty(par)\r\n && !deepCompare([actObj[par], histObj[par]])\r\n ) {\r\n sameParameters = false;\r\n break;\r\n }\r\n }\r\n if (sameParameters) {\r\n return i;\r\n }\r\n }\r\n }\r\n return -1;\r\n };\r\n\r\n\r\n var deleteBreadcrumbTail = function (index) {\r\n stateHistory = stateHistory.slice(0, index);\r\n };\r\n\r\n var pushNewSate = function (newEntry, state, params, scope) {\r\n // add additional information to new entry\r\n newEntry['index'] = stateHistory.length;\r\n newEntry['name'] = getName(state[\"breadcrumb\"][\"name\"], scope);\r\n newEntry['displayName'] = getName(state[\"breadcrumb\"][\"name\"], scope);\r\n newEntry['state'] = state;\r\n newEntry['params'] = params;\r\n newEntry['goTo'] = function() {\r\n $state.go(state.name, params);\r\n };\r\n\r\n // push new entry to history stack\r\n stateHistory.push(newEntry);\r\n };\r\n\r\n var addState = function () {\r\n\r\n if (!actual) {\r\n //TODO: insert loading from cache\r\n actual = {\r\n state: $state.current,\r\n params: $state.params\r\n };\r\n }\r\n\r\n var state = actual.state;\r\n var params = actual.params;\r\n var scope = lastViewScope;\r\n\r\n // reset state history in case of an initial state\r\n if (state[\"breadcrumb\"] && state[\"breadcrumb\"][\"initialState\"]) {\r\n stateHistory = [];\r\n }\r\n\r\n //check whether state has to be ignored\r\n if (state[\"abstract\"] || (state[\"breadcrumb\"] && state[\"breadcrumb\"][\"ignore\"])) {\r\n return;\r\n }\r\n\r\n //check whether state is not defined\r\n if (!state[\"breadcrumb\"] || !state[\"breadcrumb\"][\"name\"]) {\r\n console.warn(\"The state '\" + state.name + \"' has no breadcrumb defined!\");\r\n return;\r\n }\r\n\r\n\r\n // init new entry basic version\r\n var newEntry = {\r\n state: state,\r\n params: params\r\n };\r\n\r\n\r\n var index = getIndexOfDuplicate(newEntry);\r\n if (index < 0) {\r\n pushNewSate(newEntry, state, params, scope);\r\n } else { // prevent duplicated states\r\n deleteBreadcrumbTail(index + 1);\r\n }\r\n\r\n };\r\n addState();\r\n $rootScope.$on(\"$stateChangeStart\", function (event, toState, toParams, fromState, fromParams)\r\n {\r\n actual = {\r\n state: toState,\r\n params: toParams\r\n };\r\n\r\n });\r\n\r\n $rootScope.$on('$locationChangeSuccess', function() {\r\n $rootScope.actualLocation = $location.path();\r\n });\r\n\r\n var a = this;\r\n $rootScope.$watch(function() {\r\n return $location.path();\r\n }, function(newLocation, oldLocation) {\r\n if ($rootScope.actualLocation === newLocation) {\r\n a.goBack();\r\n }\r\n });\r\n\r\n // Browser Button\r\n $rootScope.$on('$viewContentLoaded', function (event, toState) {\r\n lastViewScope = event.targetScope;\r\n if(!backButton){\r\n addState();\r\n }\r\n backButton = false;\r\n\r\n });\r\n\r\n\r\n this.getBreadcrumb = function () {\r\n return stateHistory;\r\n };\r\n\r\n this.goBack = function () {\r\n if (stateHistory === undefined || stateHistory.length < 2) {\r\n // If we jauare on last Item and push Back => Redirect to Main\r\n stateHistory = [];\r\n $state.go('main');\r\n } else {\r\n stateHistory[stateHistory.length - 2].goTo();\r\n }\r\n\r\n };\r\n\r\n this.isBack = function () {\r\n var blockStates = ['main', 'login'];\r\n //console.log('Length'+stateHistory.length);\r\n return (stateHistory.length >= 1 && blockStates.indexOf(stateHistory[0]['name']) === -1);\r\n };\r\n this.popLastState = function(){\r\n stateHistory.splice( stateHistory.length-1,1);\r\n };\r\n\r\n }\r\n]).//\r\n\r\ndirective('kermiBreadcrumb', ['$rootScope', 'breadcrumbService',\r\n function ($rootScope, breadcrumbService) {\r\n return {\r\n restrict: 'A',\r\n scope: {},\r\n templateUrl: 'views/breadcrumb/breadcrumb.html',\r\n\r\n /* @ngInject */\r\n controller: function ($scope) {\r\n 'ngInject';\r\n\r\n $scope.breadcrumb = breadcrumbService.getBreadcrumb();\r\n\r\n $rootScope.$on('$viewContentLoaded', function () {\r\n $scope.breadcrumb = breadcrumbService.getBreadcrumb();\r\n });\r\n\r\n }\r\n };\r\n }\r\n]);\r\n"],"sourceRoot":"../../../../app"}