{"version":3,"sources":["scripts/app.js"],"names":["config","$translatePartialLoaderProvider","addPart","$inject","angular","module","ChatTabController","api","$timeout","toggleChat","contact","vm","chatActive","replyMessage","chat","scrollToBottomOfChat","reply","dialog","push","who","message","time","speed","chatDialog","element","animate","scrollTop","scrollHeight","this","quickPanel","contacts","get","response","data","controller","pancake","ScrumRowsService","hateoasResource","prototype","getList","getRow","id","sendRowFeedback","post","sendListFeedback","service","PcbScrumRows","bindToController","PcbScrumRowController","controllerAs","restrict","scope","model","link","attrs","templateUrl","replace","scrumRowsService","navigationService","_this","then","collections","showList","event","row","stopPropagation","toState","directive","ProgressService","createNotifier","nrOfSteps","deferred","currentStep","notify","description","progress","NotificationService","$rootScope","$mdDialog","$mdToast","someMessage","showToast","show","hideDelay","position","template","loader","somePromise","locals","promise","showDialog","title","ariaLabel","alert","htmlContent","ok","activateLoader","loadingProgress","deactivateLoader","NavigationService","$state","$location","$stateParams","to","state","go","reload","params","extend","HateoasService","$q","injectApi","result","links","templates","forEach","method","setCommand","path","put","setLink","call","rel","toCamel","renderTemplate","href","_","each","Object","getOwnPropertyNames","propertyName","command","getCommand","commands","invoke","url","name","find","item","formatTemplate","input","g","toUpperCase","HateoasResource","$http","hateOasService","cacheFactory","defer","createMessage","cacheObject","cache","invokeApi","resolve","body","headers","defaults","common","success","status","LoaderController","$scope","progressService","progressDescription","notifier","hide","error","update","DialogController","sessionService","properties","action","apply","close","UserRoles","Admin","User","ServerResponses","loginSuccess","loginFailed","logoutSuccess","sessionTimeout","notAuthenticated","notAuthorized","Icons","DATE","LINK","UserService","userResource","current","session","currentUser","reject","user","init","UploadService","uploadService","uploadResource","upload","file","callback","console","log","SessionService","sessionScope","sessionResource","refresh","logout","undefined","hasSession","currentUserId","ContentService","getContent","key","translate","route","AuthenticationService","userService","basePath","authenticate","request","reason","httpResponse","UserResource","UploadResource","SessionResource","PcbUserMenu","PcbUserMenuController","initUserStatus","setUserStatus","userStatus","userStatusOptions","icon","color","PcbSiteNav","PcbSiteNavController","currentNavItem","PcbMenu","PcbMenuController","PcbLanguageSelection","PcbLanguageSelectionController","$translate","setLanguages","changeLanguage","lang","selectedLanguage","use","code","languages","translation","flag","PcbFeaturing","PcbFeaturingController","options","contentService","contentKey","page","text","content","PcbContent","PcbContentController","msSplashScreenDirective","$animate","iElement","splashScreenRemoveEvent","$on","leave","msSidenavHelperDirective","require","iAttrs","MdSidenavCtrl","$watch","isOpen","isLockedOpen","isUndefined","parent","toggleClass","msSearchBarDirective","$document","compile","tElement","addClass","expanderEl","collapserEl","on","expand","collapse","escKeyEvent","removeClass","e","keyCode","off","msScrollConfigProvider","configuration","defaultConfiguration","wheelSpeed","wheelPropagation","swipePropagation","minScrollbarLength","maxScrollbarLength","useBothWheelAxes","useKeyboard","suppressScrollX","suppressScrollY","scrollXMarginOffset","scrollYMarginOffset","stopPropagationOnClick","$get","getConfig","msScrollDirective","msScrollConfig","msUtils","fuseConfig","isMobile","updateScrollbar","PerfectScrollbar","msScroll","$eval","initialize","prop","old","equals","destroy","provider","msRandomClassDirective","msRandomClass","randomClass","Math","floor","random","msNavigationServiceProvider","saveItem","isString","$log","parts","split","length","_findOrCreateParent","updateItem","i","_id","uisref","_getUiSref","children","weight","isNumber","_path","deleteItem","navigation","p","splice","sortByWeight","sort","_byWeight","pop","createParent","join","x","y","parseInt","isDefined","stateParams","isObject","toJson","injector","clearNavigation","navigationScope","setActiveItem","node","activeItem","getActiveItem","getNavigationObject","root","setNavigationScope","setFolded","folded","getFolded","setFoldedOpen","foldedOpen","getFoldedOpen","toggleFolded","MsNavigationController","msNavigationService","toggleHorizontalMobileMenu","msNavigationDirective","$mdSidenav","transclude","$broadcast","bodyEl","setFoldExpander","$emit","removeFoldCollapser","append","foldExpanderEl","onFoldExpanderHover","setFoldCollapser","foldCollapserEl","onFoldCollapserHover","remove","preventDefault","sidenav","MsNavigationNodeController","$element","hasChildren","group","collapsable","collapsed","includes","$evalAsync","givenPathParts","activePathParts","indexOf","toggleCollapsed","collapseEl","height","offsetHeight","display","animateHeightClass","css","expandEl","visibility","getClass","isHidden","hidden","isFunction","msNavigationNodeDirective","MsNavigationNodeCtrl","msNavigationItemDirective","msNavigationHorizontalDirective","MsNavigationHorizontalNodeController","isActive","msNavigationHorizontalNodeDirective","MsNavigationHorizontalNodeCtrl","msNavigationHorizontalItemDirective","$mdMedia","onClick","msNavFoldService","setFoldable","foldable","isNavFoldedOpen","toggleFold","openFolded","closeFolded","msNavIsFoldedDirective","isFoldedOpen","isFolded","fold","unfold","sidenavEl","openOverlay","closeOverlay","msNavIsFolded","MsNavController","isDisabled","disabled","disable","enable","setToggleItem","toggleItems","getLockedItems","lockedItems","setLockedItem","clearLockedItems","msNavDirective","$mdComponentRegistry","stateChangeSuccessEvent","when","msNavTitleDirective","msNavButtonDirective","msNavToggleDirective","tAttrs","attr","MsNavCtrl","toggle","isCollapsed","isExpanded","elementToExpand","classes","expandAnimation","expanded","elementToCollapse","collapseAnimation","states","regExp","locked","lockedItem","currentState","shouldExpand","factory","ScrumrowController","labels","feedbackModel","getLabel","ev","clickOutsideToClose","textContent","targetEvent","PopupController","email","anonymous","abort","cancel","inject","configureStates","$stateProvider","getStates","views","content@app","app","home","HomeController","notificationService","$cookies","initFeaturing","featuringOptions","image","fuseThemingProvider","setRegisteredPalettes","_registeredPalettes","registeredPalettes","setRegisteredThemes","_registeredThemes","registeredThemes","_$cookies","getRegisteredPalettes","getRegisteredThemes","setActiveTheme","themeName","themes","list","warn","active","theme","setThemesList","themeList","$mdThemingProvider","fusePalettes","fuseThemes","customTheme","getObject","alwaysWatchTheme","palette","definePalette","primaryPalette","primary","hues","accentPalette","accent","warnPalette","backgroundPalette","background","_PALETTES","_THEMES","default","hue-1","hue-2","hue-3","pink","teal","constant","50","100","200","300","400","500","600","700","800","900","A100","A200","A400","A700","contrastDefaultColor","contrastDarkColors","contrastStrongLightColors","fuseGeneratorService","fuseTheming","generate","registeredTheme","colors","colorType","colorTypeName","levels","rgba","value","contrast1","contrast","contrast2","contrast3","contrast4","hue1","hue2","hue3","processAndStoreThemes","styleVars","colorTypes","colorLevelName","colorName","ucfirst","render","_themes","copy","selectedTheme","cssTemplate","regex","RegExp","keys","matched","headEl","styleEl","html","_contrastLevel","contrastLevel","applyContrast","contrastLevels","white","1","2","3","4","black","string","charAt","slice","MsThemeOptionsController","updateLayoutMode","layoutMode","updateLayoutStyle","layoutStyle","location","msThemeOptions","panelOpen","toggleOptionsPanel","closeOptionsPanel","openOptionsPanel","backdropEl","$window","exists","detectBrowser","searchString","dataString","dataProp","versionSearchString","versionSearch","identity","subString","searchVersion","index","substring","browserInfo","browserData","navigator","userAgent","vendor","opera","osData","platform","browser","version","appVersion","os","toLowerCase","guidGenerator","S4","toString","mobileDetect","mobile","toggleInArray","array","MobileDetect","filterByTags","items","tags","filtered","match","every","tag","tagExists","itemTag","filterSingleByTags","itemTags","filter","toTrustedFilter","$sce","trustAsHtml","htmlToPlainTextFilter","String","nospaceFilter","humanizeDocFilter","doc","type","$1","label","hljsDirective","$interpolate","empty","contents","codeElement","lines","line","trim","firstLineWhitespace","startingWhitespaceRegex","map","highlightedCode","hljs","highlight","language","shouldInterpolate","contentParent","fuseConfigProvider","fuseConfiguration","disableCustomScrollbars","disableMdInkRippleOnMobile","disableCustomScrollbarsOnMobile","configName","setConfig","configValue","fuse","ToolbarController","global","search","toggleSidenav","sidenavId","gotoHome","QuickPanelController","date","Date","settings","cloud","retro","activities","events","notes","backoffice","States","SAMPLE","MANAGEMENT_SEARCH","MANAGEMENT_USER","MANAGEMENT_ADDUSER","DASHBOARD","COMPANY_BUSINESSHOUR","COMPANY_CONTACTINFO","COMPANY_LOCATION","CMS_BLOCK","CMS_IMAGE","INIT","TABLE_SETTINGS","FORM_SETTINGS","Routes","CacheFactoryProvider","maxAge","NavigationController","toggleMsNavigationFolded","msScrollOptions","MainController","targetScope","$id","runBlock","fuseGenerator","htmlClass","run","$ariaProvider","$logProvider","$translateProvider","$provide","debugEnabled","toastr","timeOut","positionClass","preventDuplicates","progressBar","useLoader","urlTemplate","preferredLanguage","useSanitizeValueStrategy","tabindex","stateChangeStartEvent","toParams","fromState","fromParams","routeConfig","$urlRouterProvider","$locationProvider","html5Mode","otherwise","layouts","verticalNavigation","main","toolbar","horizontalNavigation","contentOnly","contentWithToolbar","websiteWithFeaturing","abstract","main@","toolbar@app","navigation@app","quickPanel@app","IndexController","apiService","$resource","baseUrl","sample","$templateCache"],"mappings":"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","file":"scripts/app-95f29b2a48.js","sourcesContent":["(function ()\n{\n 'use strict';\n\n angular\n .module('app.quickPanel', [])\n .config(config);\n\n /** @ngInject */\n function config($translatePartialLoaderProvider)\n {\n $translatePartialLoaderProvider.addPart('app/quick-panel');\n }\n})();\n\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.quickPanel')\n .controller('ChatTabController', ChatTabController);\n\n /** @ngInject */\n function ChatTabController(api, $timeout)\n {\n var vm = this;\n\n // Data\n vm.chat = {};\n vm.chatActive = false;\n vm.replyMessage = '';\n\n api.quickPanel.contacts.get({}, function (response)\n {\n vm.contacts = response.data;\n });\n\n // Methods\n vm.toggleChat = toggleChat;\n vm.reply = reply;\n\n //////////\n\n function toggleChat(contact)\n {\n vm.chatActive = !vm.chatActive;\n\n if ( vm.chatActive )\n {\n vm.replyMessage = '';\n vm.chat.contact = contact;\n scrollToBottomOfChat(0);\n }\n }\n\n function reply()\n {\n if ( vm.replyMessage === '' )\n {\n return;\n }\n\n if ( !vm.chat.contact.dialog )\n {\n vm.chat.contact.dialog = [];\n }\n\n vm.chat.contact.dialog.push({\n who : 'user',\n message: vm.replyMessage,\n time : 'Just now'\n });\n\n vm.replyMessage = '';\n\n scrollToBottomOfChat(400);\n }\n\n function scrollToBottomOfChat(speed)\n {\n var chatDialog = angular.element('#chat-dialog');\n\n $timeout(function ()\n {\n chatDialog.animate({\n scrollTop: chatDialog[0].scrollHeight\n }, speed);\n }, 0);\n\n }\n }\n\n})();\nvar pancake;\n(function (pancake) {\n 'use strict';\n angular\n .module('app.pancake', [\n 'angular-cache',\n 'ngMaterial'])\n .config(function ($translatePartialLoaderProvider) {\n $translatePartialLoaderProvider.addPart('app/pancake');\n });\n})(pancake || (pancake = {}));\n\nvar pancake;\n(function (pancake) {\n var ScrumRowsService = (function () {\n function ScrumRowsService(hateoasResource) {\n this.hateoasResource = hateoasResource;\n }\n ScrumRowsService.prototype.getList = function () {\n return this.hateoasResource.get('/api/scrumrowcollection');\n };\n ScrumRowsService.prototype.getRow = function (id) {\n return this.hateoasResource.get('/api/scrumrowcollection/' + id);\n };\n ScrumRowsService.prototype.sendRowFeedback = function (id, data) {\n return this.hateoasResource.post('api/scrumrow/' + id + '/comments', data);\n };\n ScrumRowsService.prototype.sendListFeedback = function (id, data) {\n return this.hateoasResource.post('api/scrumrowcollection/' + id + '/comments', data);\n };\n ScrumRowsService.$inject = ['hateoasResource'];\n return ScrumRowsService;\n })();\n angular\n .module('app.pancake')\n .service('scrumRowsService', ScrumRowsService);\n})(pancake || (pancake = {}));\n\nvar pancake;\n(function (pancake) {\n 'use strict';\n function PcbScrumRows() {\n return {\n bindToController: true,\n controller: PcbScrumRowController,\n controllerAs: 'vm',\n restrict: 'EA',\n scope: {\n // Create a child scope\n // @ reads the attribute value, = provides two-way binding, & works with functions\n model: '='\n },\n link: function (scope, element, attrs) {\n // DOM manupilation tasks\n },\n templateUrl: 'app/pancake/scrumrows/directives/scrumrows.html',\n replace: true\n };\n }\n var PcbScrumRowController = (function () {\n function PcbScrumRowController(scrumRowsService, navigationService) {\n var _this = this;\n this.navigationService = navigationService;\n scrumRowsService.getList().then(function (data) {\n _this.collections = data;\n });\n }\n PcbScrumRowController.prototype.showList = function (event, row) {\n event.stopPropagation();\n this.navigationService.toState('app.scrumrow', { id: row.id });\n // this.collections.getById(row).then((data: pancake.IScrumRowCollection) => {\n // this.selected = data;\n // })\n };\n PcbScrumRowController.$inject = ['scrumRowsService', 'navigationService'];\n return PcbScrumRowController;\n })();\n angular\n .module('app.pancake')\n .directive('pcbScrumRows', PcbScrumRows);\n})(pancake || (pancake = {}));\n\nvar pancake;\n(function (pancake) {\n var ProgressService = (function () {\n function ProgressService() {\n }\n ProgressService.prototype.createNotifier = function (nrOfSteps, deferred) {\n var currentStep = 1;\n var notify = function (description) {\n deferred.notify({\n progress: (100 / nrOfSteps) * currentStep,\n description: description\n });\n currentStep += 1;\n };\n return {\n notify: notify\n };\n };\n ProgressService.$inject = [];\n return ProgressService;\n })();\n angular\n .module('app.pancake')\n .service('progressService', ProgressService);\n})(pancake || (pancake = {}));\n\nvar pancake;\n(function (pancake) {\n var NotificationService = (function () {\n function NotificationService($rootScope, $mdDialog, $mdToast) {\n this.$rootScope = $rootScope;\n this.$mdDialog = $mdDialog;\n this.$mdToast = $mdToast;\n this.someMessage = 'this is some message';\n }\n NotificationService.prototype.showToast = function (message) {\n this.$mdToast.show({\n hideDelay: 3000,\n position: 'bottom right',\n template: '' + message + ''\n });\n };\n NotificationService.prototype.loader = function (somePromise) {\n this.$mdDialog.show({\n controller: 'loaderController',\n controllerAs: 'vm',\n bindToController: true,\n locals: {\n promise: somePromise\n },\n templateUrl: 'app/pancake/core/views/loader.html'\n });\n };\n NotificationService.prototype.showDialog = function (message, title, ariaLabel) {\n this.$mdDialog.show(this.$mdDialog.alert()\n .title(title)\n .htmlContent(message)\n .ariaLabel(ariaLabel ? ariaLabel : title)\n .ok('OK'));\n };\n NotificationService.prototype.activateLoader = function () {\n this.$rootScope.loadingProgress = true;\n };\n NotificationService.prototype.deactivateLoader = function () {\n this.$rootScope.loadingProgress = false;\n };\n NotificationService.$inject = ['$rootScope', '$mdDialog', '$mdToast'];\n return NotificationService;\n })();\n angular\n .module('app.pancake')\n .service('notificationService', NotificationService);\n})(pancake || (pancake = {}));\n\nvar pancake;\n(function (pancake) {\n var NavigationService = (function () {\n function NavigationService($state, $location, $stateParams) {\n this.$state = $state;\n this.$location = $location;\n this.$stateParams = $stateParams;\n }\n NavigationService.prototype.to = function (state) {\n this.$state.go(state, this.$stateParams, { reload: true });\n };\n NavigationService.prototype.toState = function (state, params) {\n angular.extend(params, this.$stateParams);\n this.$state.go(state, params);\n };\n NavigationService.$inject = ['$state', '$location', '$stateParams'];\n return NavigationService;\n })();\n angular\n .module('app.pancake')\n .service('navigationService', NavigationService);\n})(pancake || (pancake = {}));\n\nvar pancake;\n(function (pancake) {\n var HateoasService = (function () {\n function HateoasService($q) {\n this.$q = $q;\n }\n HateoasService.prototype.injectApi = function (response, api) {\n var _this = this;\n var result = response.data;\n if (!response.links)\n return result;\n result.templates = {};\n response.links.forEach(function (link) {\n switch (link.method) {\n case \"POST\":\n _this.setCommand(link, response, result, function (path, data) { return api.post(path, data); });\n break;\n case \"PUT\":\n _this.setCommand(link, response, result, function (path, data) { return api.put(path, data); });\n break;\n default:\n _this.setLink(link, response, result, function (path) { return api.get(path); });\n break;\n }\n });\n return result;\n };\n HateoasService.prototype.setLink = function (link, response, result, call) {\n var _this = this;\n var rel = this.toCamel(link.rel);\n if (link.template) {\n result[rel] = function (data) { return call(_this.renderTemplate(link.template, data)); };\n }\n else {\n result[rel] = function () { return call(link.href); };\n }\n };\n HateoasService.prototype.renderTemplate = function (template, data) {\n var result = template;\n _.each(Object.getOwnPropertyNames(data), function (propertyName) { result = result.replace(':' + propertyName, data[propertyName]); });\n return result;\n };\n HateoasService.prototype.setCommand = function (link, response, result, call) {\n var _this = this;\n var rel = this.toCamel(link.rel);\n if (link.command) {\n var command = this.getCommand(response.commands, link.command);\n // result.templates[command.name] = command.template;\n result[rel] = {\n invoke: function (data) {\n var url;\n if (link.template) {\n url = _this.renderTemplate(link.template, data);\n }\n else {\n url = link.href;\n }\n return call(url, data);\n },\n template: command.template\n };\n }\n else {\n result[rel] = function (data) { return call(link.href, data); };\n }\n };\n HateoasService.prototype.getCommand = function (commands, name) {\n return _.find(commands, function (item) { return item.name == name; });\n };\n HateoasService.prototype.formatTemplate = function (template, item) {\n return template;\n };\n HateoasService.prototype.toCamel = function (input) {\n return input.replace(/-([a-z])/g, function (g) { return g[1].toUpperCase(); });\n };\n HateoasService.$inject = ['$q'];\n return HateoasService;\n })();\n angular\n .module('app.pancake')\n .service('hateoasService', HateoasService);\n})(pancake || (pancake = {}));\n\n\n\nvar pancake;\n(function (pancake) {\n var HateoasResource = (function () {\n function HateoasResource($q, $http, hateOasService, cacheFactory) {\n this.$q = $q;\n this.$http = $http;\n this.hateOasService = hateOasService;\n this.cacheFactory = cacheFactory;\n }\n HateoasResource.prototype.get = function (path) {\n var _this = this;\n var deferred = this.$q.defer();\n var message = this.createMessage();\n _.extend(message, {\n method: 'GET',\n url: path\n });\n if (this.cacheObject) {\n angular.extend(message, {\n cache: this.cacheObject\n });\n }\n this.invokeApi(message).then(function (response) {\n var data = _this.hateOasService.injectApi(response, _this);\n deferred.resolve(data);\n });\n return deferred.promise;\n };\n HateoasResource.prototype.post = function (path, body) {\n var _this = this;\n var deferred = this.$q.defer();\n var message = this.createMessage();\n _.extend(message, {\n method: 'POST',\n url: path,\n data: body\n });\n this.invokeApi(message).then(function (response) {\n var data = _this.hateOasService.injectApi(response, _this);\n deferred.resolve(data);\n });\n return deferred.promise;\n };\n HateoasResource.prototype.put = function (path, body) {\n var _this = this;\n var deferred = this.$q.defer();\n var message = this.createMessage();\n _.extend(message, {\n method: 'PUT',\n url: path,\n data: body\n });\n this.invokeApi(message).then(function (response) {\n var data = _this.hateOasService.injectApi(response, _this);\n deferred.resolve(data);\n });\n return deferred.promise;\n };\n HateoasResource.prototype.delete = function (path) {\n var message = this.createMessage();\n _.extend(message, {\n method: 'DELETE',\n url: path,\n });\n return this.invokeApi(message);\n };\n HateoasResource.prototype.createMessage = function () {\n var result = {\n headers: this.$http.defaults.headers.common\n };\n return result;\n };\n HateoasResource.prototype.invokeApi = function (message) {\n var deferred = this.$q.defer();\n this.$http(message).success(function (data, status, headers) {\n deferred.resolve(data);\n });\n return deferred.promise;\n };\n HateoasResource.$inject = ['$q', '$http', 'hateoasService', 'CacheFactory'];\n return HateoasResource;\n })();\n angular\n .module('app.pancake')\n .service('hateoasResource', HateoasResource);\n})(pancake || (pancake = {}));\n\nvar pancake;\n(function (pancake) {\n var LoaderController = (function () {\n function LoaderController($q, $scope, $mdDialog, progressService, promise) {\n var _this = this;\n this.$q = $q;\n this.$scope = $scope;\n this.$mdDialog = $mdDialog;\n this.progressService = progressService;\n this.progress = 0;\n this.progressDescription = \"LOGIN.MESSAGES.VALIDATING\";\n var deferred = this.$q.defer();\n var notifier = this.progressService.createNotifier(5, deferred);\n promise(deferred, notifier).then(function (data) {\n _this.progressDescription = 'complete';\n $mdDialog.hide(data);\n }, function (error) { return _this.progressDescription = 'error'; }, function (update) {\n _this.progress = update.progress;\n _this.progressDescription = update.description;\n });\n }\n LoaderController.$inject = ['$q', '$scope', '$mdDialog', 'progressService', 'promise'];\n return LoaderController;\n })();\n angular\n .module('app.pancake')\n .controller('loaderController', LoaderController);\n})(pancake || (pancake = {}));\n\nvar pancake;\n(function (pancake) {\n var DialogController = (function () {\n function DialogController($mdDialog, sessionService, model, properties, action) {\n this.$mdDialog = $mdDialog;\n this.sessionService = sessionService;\n this.model = model;\n this.properties = properties;\n this.action = action;\n }\n DialogController.prototype.apply = function () {\n switch (this.action) {\n case \"update\":\n case \"create\":\n this.$mdDialog.hide(this.model);\n default:\n this.close();\n }\n };\n DialogController.prototype.close = function () {\n this.$mdDialog.hide();\n };\n DialogController.$inject = ['$mdDialog', 'sessionService', 'model', 'properties', 'action'];\n return DialogController;\n })();\n angular\n .module('app.pancake')\n .controller('dialogController', DialogController);\n})(pancake || (pancake = {}));\n\n\n\nvar pancake;\n(function (pancake) {\n var UserRoles = (function () {\n function UserRoles() {\n }\n UserRoles.Admin = \"ADMIN\";\n UserRoles.User = \"USER\";\n return UserRoles;\n })();\n pancake.UserRoles = UserRoles;\n var ServerResponses = (function () {\n function ServerResponses() {\n }\n ServerResponses.loginSuccess = 'auth-login-success';\n ServerResponses.loginFailed = 'auth-login-failed';\n ServerResponses.logoutSuccess = 'auth-logout-success';\n ServerResponses.sessionTimeout = 'auth-session-timeout';\n ServerResponses.notAuthenticated = 'auth-not-authenticated';\n ServerResponses.notAuthorized = 'auth-not-authorized';\n return ServerResponses;\n })();\n pancake.ServerResponses = ServerResponses;\n var Icons = (function () {\n function Icons() {\n }\n Icons.DATE = 'fa fa-calendar';\n Icons.LINK = 'fa fa-external-link';\n return Icons;\n })();\n pancake.Icons = Icons;\n})(pancake || (pancake = {}));\n\nvar pancake;\n(function (pancake) {\n var UserService = (function () {\n function UserService($q, $rootScope, sessionService, userResource) {\n this.$q = $q;\n this.$rootScope = $rootScope;\n this.sessionService = sessionService;\n this.userResource = userResource;\n }\n UserService.prototype.get = function () {\n return this.userResource.get();\n };\n UserService.prototype.current = function () {\n var deferred = this.$q.defer();\n this.sessionService.current()\n .then(function (session) {\n if (!session.currentUser)\n deferred.reject();\n return session.currentUser();\n })\n .then(function (user) {\n deferred.resolve(user);\n });\n return deferred.promise;\n };\n UserService.prototype.init = function () {\n var _this = this;\n return this.current().then(function (user) {\n _this.$rootScope.currentUser = user;\n return user;\n });\n };\n UserService.$inject = ['$q', '$rootScope', 'sessionService', 'userResource'];\n return UserService;\n })();\n angular\n .module('app.pancake')\n .service('userService', UserService);\n})(pancake || (pancake = {}));\n\nvar pancake;\n(function (pancake) {\n var UploadService = (function () {\n function UploadService(uploadService, uploadResource) {\n this.uploadService = uploadService;\n this.uploadResource = uploadResource;\n }\n UploadService.prototype.upload = function (id, file) {\n var config = {\n url: 'http://components.api/fileupload/' + id,\n data: file,\n method: 'POST'\n };\n this.uploadService.upload(config).then(function (callback) {\n console.log('callback fileupload', callback);\n }, function (error) { return console.log('error', error); }, function (update) { return console.log('update', update); });\n };\n UploadService.prototype.init = function () {\n return this.uploadResource.post();\n };\n UploadService.$inject = ['Upload', 'uploadResource'];\n return UploadService;\n })();\n angular\n .module('app.pancake')\n .service('uploadService', UploadService);\n})(pancake || (pancake = {}));\n\nvar pancake;\n(function (pancake) {\n 'use strict';\n var SessionService = (function () {\n function SessionService($q, sessionScope, sessionResource, cacheFactory) {\n this.$q = $q;\n this.sessionScope = sessionScope;\n this.sessionResource = sessionResource;\n this.cacheFactory = cacheFactory;\n }\n SessionService.prototype.current = function () {\n var deferred = this.$q.defer();\n if (this.sessionScope.session) {\n deferred.resolve(this.sessionScope.session);\n }\n else {\n this.refresh().then(function (session) {\n deferred.resolve(session);\n });\n }\n return deferred.promise;\n };\n SessionService.prototype.refresh = function () {\n var _this = this;\n return this.sessionResource.current().then(function (session) {\n _this.sessionScope.session = session;\n return session;\n });\n };\n SessionService.prototype.logout = function () {\n var _this = this;\n this.sessionScope.session = undefined;\n var deferred = this.$q.defer();\n return this.sessionResource.logout().then(function (session) {\n _this.sessionScope.session = session;\n deferred.resolve(session);\n });\n // return deferred.promise;\n };\n SessionService.prototype.hasSession = function () {\n return this.sessionScope.session && this.sessionScope.session.currentUserId && this.sessionScope.session.currentUserId != '00000000-0000-0000-0000-000000000000';\n };\n SessionService.$inject = ['$q', '$rootScope', 'sessionResource', 'CacheFactory'];\n return SessionService;\n })();\n angular\n .module('app.pancake')\n .service('sessionService', SessionService);\n})(pancake || (pancake = {}));\n\nvar pancake;\n(function (pancake) {\n var ContentService = (function () {\n function ContentService(hateoasResource) {\n this.hateoasResource = hateoasResource;\n }\n ContentService.prototype.getContent = function (key, translate) {\n if (translate === void 0) { translate = true; }\n var route = '/api/page/' + key;\n if (!translate) {\n route = route + '?notranslate';\n }\n return this.hateoasResource.get(route);\n };\n ContentService.$inject = ['hateoasResource'];\n return ContentService;\n })();\n angular\n .module('app.pancake')\n .service('contentService', ContentService);\n})(pancake || (pancake = {}));\n\nvar pancake;\n(function (pancake) {\n var AuthenticationService = (function () {\n function AuthenticationService($http, $q, sessionScope, sessionService, userService, progressService) {\n this.$http = $http;\n this.$q = $q;\n this.sessionScope = sessionScope;\n this.sessionService = sessionService;\n this.userService = userService;\n this.progressService = progressService;\n this.basePath = '';\n }\n AuthenticationService.prototype.authenticate = function (request) {\n var _this = this;\n var deferred = this.$q.defer();\n var notifier = this.progressService.createNotifier(3, deferred);\n this.$http\n .post(this.basePath + 'api/authentication/login', request)\n .catch(function (reason) { return deferred.reject(reason); })\n .then(function (httpResponse) {\n notifier.notify(\"LOGIN.MESSAGES.LOGIN_OK\");\n notifier.notify(\"LOGIN.MESSAGES.RETREIVING_CURRENTSESSION\");\n return _this.sessionService.refresh();\n })\n .then(function (session) {\n _this.sessionScope.session = session;\n notifier.notify(\"LOGIN.MESSAGES.RETREIVING_CURRENTUSER\");\n return _this.userService.init();\n })\n .then(function (currentUser) {\n deferred.resolve(\"ok\");\n })\n .catch(function (reason) {\n deferred.notify(\"login not successfull\");\n deferred.reject(\"not ok\");\n });\n return deferred.promise;\n };\n AuthenticationService.$inject = ['$http', '$q', '$rootScope', 'sessionService', 'userService', 'progressService'];\n return AuthenticationService;\n })();\n angular\n .module('app.pancake')\n .service('authenticationService', AuthenticationService);\n})(pancake || (pancake = {}));\n\nvar pancake;\n(function (pancake) {\n var UserResource = (function () {\n function UserResource(hateoasResource) {\n this.hateoasResource = hateoasResource;\n }\n UserResource.prototype.get = function () {\n return this.hateoasResource.get('/api/user');\n };\n UserResource.$inject = ['hateoasResource'];\n return UserResource;\n })();\n angular\n .module('app.pancake')\n .service('userResource', UserResource);\n})(pancake || (pancake = {}));\n\nvar pancake;\n(function (pancake) {\n var UploadResource = (function () {\n function UploadResource(hateoasResource) {\n this.hateoasResource = hateoasResource;\n }\n UploadResource.prototype.post = function () {\n return this.hateoasResource.post('api/fileupload/init', {});\n };\n UploadResource.$inject = ['hateoasResource'];\n return UploadResource;\n })();\n angular\n .module('app.pancake')\n .service('uploadResource', UploadResource);\n})(pancake || (pancake = {}));\n\nvar pancake;\n(function (pancake) {\n var SessionResource = (function () {\n function SessionResource($q, hateoasResource) {\n this.$q = $q;\n this.hateoasResource = hateoasResource;\n }\n SessionResource.prototype.current = function () {\n return this.hateoasResource.get('/api/session/current');\n };\n SessionResource.prototype.logout = function () {\n return this.hateoasResource.get('/api/session/logout');\n };\n SessionResource.$inject = ['$q', 'hateoasResource'];\n return SessionResource;\n })();\n angular\n .module('app.pancake')\n .service('sessionResource', SessionResource);\n})(pancake || (pancake = {}));\n\n\n\nvar pancake;\n(function (pancake) {\n 'use strict';\n function PcbUserMenu() {\n return {\n bindToController: true,\n controller: PcbUserMenuController,\n controllerAs: 'vm',\n restrict: 'EA',\n scope: {},\n link: function (scope, element, attrs) {\n // DOM manupilation tasks\n },\n templateUrl: 'app/pancake/components/directives/user-menu.html',\n replace: true\n };\n }\n var PcbUserMenuController = (function () {\n function PcbUserMenuController($rootScope, $state) {\n this.$rootScope = $rootScope;\n this.$state = $state;\n this.currentUser = $rootScope.currentUser;\n this.initUserStatus();\n }\n PcbUserMenuController.prototype.setUserStatus = function (status) {\n this.userStatus = status;\n };\n PcbUserMenuController.prototype.logout = function () {\n // this.sessionService.logout();\n this.$state.go('login');\n };\n PcbUserMenuController.prototype.initUserStatus = function () {\n this.userStatusOptions = [\n {\n 'title': 'Online',\n 'icon': 'icon-checkbox-marked-circle',\n 'color': '#4CAF50'\n },\n {\n 'title': 'Away',\n 'icon': 'icon-clock',\n 'color': '#FFC107'\n },\n {\n 'title': 'Do not Disturb',\n 'icon': 'icon-minus-circle',\n 'color': '#F44336'\n },\n {\n 'title': 'Invisible',\n 'icon': 'icon-checkbox-blank-circle-outline',\n 'color': '#BDBDBD'\n },\n {\n 'title': 'Offline',\n 'icon': 'icon-checkbox-blank-circle-outline',\n 'color': '#616161'\n }\n ],\n this.userStatus = this.userStatusOptions[0];\n };\n PcbUserMenuController.$inject = ['$rootScope', '$state'];\n return PcbUserMenuController;\n })();\n angular\n .module('app.pancake')\n .directive('pcbUserMenu', PcbUserMenu);\n})(pancake || (pancake = {}));\n\nvar pancake;\n(function (pancake) {\n 'use strict';\n function PcbSiteNav() {\n return {\n bindToController: true,\n controller: PcbSiteNavController,\n controllerAs: 'vm',\n restrict: 'EA',\n scope: {},\n link: function (scope, element, attrs) {\n // DOM manupilation tasks\n },\n templateUrl: 'app/pancake/components/directives/site-nav.html',\n replace: true\n };\n }\n var PcbSiteNavController = (function () {\n function PcbSiteNavController() {\n this.currentNavItem = 'page1';\n }\n PcbSiteNavController.$inject = [];\n return PcbSiteNavController;\n })();\n angular\n .module('app.pancake')\n .directive('pcbSiteNav', PcbSiteNav);\n})(pancake || (pancake = {}));\n\nvar pancake;\n(function (pancake) {\n 'use strict';\n function PcbMenu() {\n return {\n bindToController: true,\n controller: PcbMenuController,\n controllerAs: 'vm',\n restrict: 'EA',\n scope: {},\n link: function (scope, element, attrs) {\n // DOM manupilation tasks\n },\n templateUrl: 'app/pancake/components/directives/menu.html',\n replace: true\n };\n }\n var PcbMenuController = (function () {\n function PcbMenuController() {\n }\n PcbMenuController.$inject = [];\n return PcbMenuController;\n })();\n angular\n .module('app.pancake')\n .directive('pcbMenu', PcbMenu);\n})(pancake || (pancake = {}));\n\nvar pancake;\n(function (pancake) {\n 'use strict';\n function PcbLanguageSelection() {\n return {\n bindToController: true,\n controller: PcbLanguageSelectionController,\n controllerAs: 'vm',\n restrict: 'EA',\n scope: {},\n link: function (scope, element, attrs) {\n // DOM manupilation tasks\n },\n templateUrl: 'app/pancake/components/directives/language-selection.html',\n replace: true\n };\n }\n var PcbLanguageSelectionController = (function () {\n function PcbLanguageSelectionController($translate) {\n this.$translate = $translate;\n this.setLanguages();\n }\n PcbLanguageSelectionController.prototype.changeLanguage = function (lang) {\n this.selectedLanguage = lang;\n this.$translate.use(lang.code);\n };\n PcbLanguageSelectionController.prototype.setLanguages = function () {\n this.languages = [\n {\n 'title': 'Dutch',\n 'translation': 'TOOLBAR.DUTCH',\n 'code': 'nl',\n 'flag': 'nl'\n },\n {\n 'title': 'English',\n 'translation': 'TOOLBAR.ENGLISH',\n 'code': 'en',\n 'flag': 'gb'\n }\n ];\n this.selectedLanguage = this.languages[0];\n };\n PcbLanguageSelectionController.$inject = ['$translate'];\n return PcbLanguageSelectionController;\n })();\n angular\n .module('app.pancake')\n .directive('pcbLanguageSelection', PcbLanguageSelection);\n})(pancake || (pancake = {}));\n\nvar pancake;\n(function (pancake) {\n 'use strict';\n function PcbFeaturing() {\n return {\n bindToController: true,\n controller: PcbFeaturingController,\n controllerAs: 'vm',\n restrict: 'EA',\n scope: {\n // Create a child scope\n // @ reads the attribute value, = provides two-way binding, & works with functions\n options: '='\n },\n link: function (scope, element, attrs) {\n // DOM manupilation tasks\n },\n templateUrl: 'app/pancake/components/directives/featuring.html',\n replace: true\n };\n }\n var PcbFeaturingController = (function () {\n function PcbFeaturingController(contentService) {\n this.contentService = contentService;\n this.init();\n }\n PcbFeaturingController.prototype.init = function () {\n var _this = this;\n if (!this.options.contentKey)\n return;\n this.contentService.getContent(this.options.contentKey, true).then(function (page) {\n _this.text = page.content;\n });\n };\n PcbFeaturingController.$inject = ['contentService'];\n return PcbFeaturingController;\n })();\n angular\n .module('app.pancake')\n .directive('pcbFeaturing', PcbFeaturing);\n})(pancake || (pancake = {}));\n\nvar pancake;\n(function (pancake) {\n 'use strict';\n function PcbContent() {\n return {\n bindToController: true,\n controller: PcbContentController,\n controllerAs: 'vm',\n restrict: 'EA',\n scope: {\n // Create a child scope\n // @ reads the attribute value, = provides two-way binding, & works with functions\n key: '@'\n },\n link: function (scope, element, attrs) {\n // DOM manupilation tasks\n },\n template: '',\n replace: true\n };\n }\n var PcbContentController = (function () {\n function PcbContentController(contentService) {\n this.contentService = contentService;\n this.content = '';\n this.init();\n }\n PcbContentController.prototype.init = function () {\n var _this = this;\n this.contentService.getContent(this.key, true).then(function (page) {\n _this.content = page.content;\n });\n };\n PcbContentController.$inject = ['contentService'];\n return PcbContentController;\n })();\n angular\n .module('app.pancake')\n .directive('pcbContent', PcbContent);\n})(pancake || (pancake = {}));\n\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core',\n [\n 'ngAnimate',\n 'ngAria',\n 'ngCookies',\n 'ngMessages',\n 'ngResource',\n 'ngSanitize',\n 'ngMaterial',\n // 'angular-chartist',\n // 'chart.js',\n // 'datatables',\n // 'gridshore.c3js.chart',\n // 'nvd3',\n 'pascalprecht.translate',\n // 'timer',\n 'ui.router',\n // 'uiGmapgoogle-maps',\n // 'textAngular',\n 'ui.sortable',\n 'ng-sortable'//,\n // 'xeditable',\n // 'moment-picker'\n ]);\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .directive('msSplashScreen', msSplashScreenDirective);\n\n /** @ngInject */\n function msSplashScreenDirective($animate)\n {\n return {\n restrict: 'E',\n link : function (scope, iElement)\n {\n var splashScreenRemoveEvent = scope.$on('msSplashScreen::remove', function ()\n {\n $animate.leave(iElement).then(function ()\n {\n // De-register scope event\n splashScreenRemoveEvent();\n\n // Null-ify everything else\n scope = iElement = null;\n });\n });\n }\n };\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .directive('msSidenavHelper', msSidenavHelperDirective);\n\n /** @ngInject */\n function msSidenavHelperDirective()\n {\n return {\n restrict: 'A',\n require : '^mdSidenav',\n link : function (scope, iElement, iAttrs, MdSidenavCtrl)\n {\n // Watch md-sidenav open & locked open statuses\n // and add class to the \".page-layout\" if only\n // the sidenav open and NOT locked open\n scope.$watch(function ()\n {\n return MdSidenavCtrl.isOpen() && !MdSidenavCtrl.isLockedOpen();\n }, function (current)\n {\n if ( angular.isUndefined(current) )\n {\n return;\n }\n\n iElement.parent().toggleClass('full-height', current);\n angular.element('html').toggleClass('sidenav-open', current);\n });\n }\n };\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .directive('msSearchBar', msSearchBarDirective);\n\n /** @ngInject */\n function msSearchBarDirective($document)\n {\n return {\n restrict : 'E',\n scope : true,\n templateUrl: 'app/core/directives/ms-search-bar/ms-search-bar.html',\n compile : function (tElement)\n {\n // Add class\n tElement.addClass('ms-search-bar');\n\n return function postLink(scope, iElement)\n {\n var expanderEl,\n collapserEl;\n\n // Initialize\n init();\n\n function init()\n {\n expanderEl = iElement.find('#ms-search-bar-expander');\n collapserEl = iElement.find('#ms-search-bar-collapser');\n\n expanderEl.on('click', expand);\n collapserEl.on('click', collapse);\n }\n\n /**\n * Expand\n */\n function expand()\n {\n iElement.addClass('expanded');\n\n // Esc key event\n $document.on('keyup', escKeyEvent);\n }\n\n /**\n * Collapse\n */\n function collapse()\n {\n iElement.removeClass('expanded');\n }\n\n /**\n * Escape key event\n *\n * @param e\n */\n function escKeyEvent(e)\n {\n if ( e.keyCode === 27 )\n {\n collapse();\n $document.off('keyup', escKeyEvent);\n }\n }\n };\n }\n };\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .provider('msScrollConfig', msScrollConfigProvider)\n .directive('msScroll', msScrollDirective);\n\n /** @ngInject */\n function msScrollConfigProvider()\n {\n // Default configuration\n var defaultConfiguration = {\n wheelSpeed : 1,\n wheelPropagation : false,\n swipePropagation : true,\n minScrollbarLength : null,\n maxScrollbarLength : null,\n useBothWheelAxes : false,\n useKeyboard : true,\n suppressScrollX : false,\n suppressScrollY : false,\n scrollXMarginOffset : 0,\n scrollYMarginOffset : 0,\n stopPropagationOnClick: true\n };\n\n // Methods\n this.config = config;\n\n //////////\n\n /**\n * Extend default configuration with the given one\n *\n * @param configuration\n */\n function config(configuration)\n {\n defaultConfiguration = angular.extend({}, defaultConfiguration, configuration);\n }\n\n /**\n * Service\n */\n this.$get = function ()\n {\n var service = {\n getConfig: getConfig\n };\n\n return service;\n\n //////////\n\n /**\n * Return the config\n */\n function getConfig()\n {\n return defaultConfiguration;\n }\n };\n }\n\n /** @ngInject */\n function msScrollDirective($timeout, msScrollConfig, msUtils, fuseConfig)\n {\n return {\n restrict: 'AE',\n compile : function (tElement)\n {\n // Do not replace scrollbars if\n // 'disableCustomScrollbars' config enabled\n if ( fuseConfig.getConfig('disableCustomScrollbars') )\n {\n return;\n }\n\n // Do not replace scrollbars on mobile devices\n // if 'disableCustomScrollbarsOnMobile' config enabled\n if ( fuseConfig.getConfig('disableCustomScrollbarsOnMobile') && msUtils.isMobile() )\n {\n return;\n }\n\n // Add class\n tElement.addClass('ms-scroll');\n\n return function postLink(scope, iElement, iAttrs)\n {\n var options = {};\n\n // If options supplied, evaluate the given\n // value. This is because we don't want to\n // have an isolated scope but still be able\n // to use scope variables.\n // We don't want an isolated scope because\n // we should be able to use this everywhere\n // especially with other directives\n if ( iAttrs.msScroll )\n {\n options = scope.$eval(iAttrs.msScroll);\n }\n\n // Extend the given config with the ones from provider\n options = angular.extend({}, msScrollConfig.getConfig(), options);\n\n // Initialize the scrollbar\n $timeout(function ()\n {\n PerfectScrollbar.initialize(iElement[0], options);\n }, 0);\n\n // Update the scrollbar on element mouseenter\n iElement.on('mouseenter', updateScrollbar);\n\n // Watch scrollHeight and update\n // the scrollbar if it changes\n scope.$watch(function ()\n {\n return iElement.prop('scrollHeight');\n }, function (current, old)\n {\n if ( angular.isUndefined(current) || angular.equals(current, old) )\n {\n return;\n }\n\n updateScrollbar();\n });\n\n // Watch scrollWidth and update\n // the scrollbar if it changes\n scope.$watch(function ()\n {\n return iElement.prop('scrollWidth');\n }, function (current, old)\n {\n if ( angular.isUndefined(current) || angular.equals(current, old) )\n {\n return;\n }\n\n updateScrollbar();\n });\n\n /**\n * Update the scrollbar\n */\n function updateScrollbar()\n {\n PerfectScrollbar.update(iElement[0]);\n }\n\n // Cleanup on destroy\n scope.$on('$destroy', function ()\n {\n iElement.off('mouseenter');\n PerfectScrollbar.destroy(iElement[0]);\n });\n };\n }\n };\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .directive('msRandomClass', msRandomClassDirective);\n\n /** @ngInject */\n function msRandomClassDirective()\n {\n return {\n restrict: 'A',\n scope : {\n msRandomClass: '='\n },\n link : function (scope, iElement)\n {\n var randomClass = scope.msRandomClass[Math.floor(Math.random() * (scope.msRandomClass.length))];\n iElement.addClass(randomClass);\n }\n };\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .provider('msNavigationService', msNavigationServiceProvider)\n .controller('MsNavigationController', MsNavigationController)\n // Vertical\n .directive('msNavigation', msNavigationDirective)\n .controller('MsNavigationNodeController', MsNavigationNodeController)\n .directive('msNavigationNode', msNavigationNodeDirective)\n .directive('msNavigationItem', msNavigationItemDirective)\n //Horizontal\n .directive('msNavigationHorizontal', msNavigationHorizontalDirective)\n .controller('MsNavigationHorizontalNodeController', MsNavigationHorizontalNodeController)\n .directive('msNavigationHorizontalNode', msNavigationHorizontalNodeDirective)\n .directive('msNavigationHorizontalItem', msNavigationHorizontalItemDirective);\n\n /** @ngInject */\n function msNavigationServiceProvider()\n {\n // Inject $log service\n var $log = angular.injector(['ng']).get('$log');\n\n // Navigation array\n var navigation = [];\n\n var service = this;\n\n // Methods\n service.saveItem = saveItem;\n service.deleteItem = deleteItem;\n service.sortByWeight = sortByWeight;\n\n //////////\n\n /**\n * Create or update the navigation item\n *\n * @param path\n * @param item\n */\n function saveItem(path, item)\n {\n if ( !angular.isString(path) )\n {\n $log.error('path must be a string (eg. `dashboard.project`)');\n return;\n }\n\n var parts = path.split('.');\n\n // Generate the object id from the parts\n var id = parts[parts.length - 1];\n\n // Get the parent item from the parts\n var parent = _findOrCreateParent(parts);\n\n // Decide if we are going to update or create\n var updateItem = false;\n\n for ( var i = 0; i < parent.length; i++ )\n {\n if ( parent[i]._id === id )\n {\n updateItem = parent[i];\n\n break;\n }\n }\n\n // Update\n if ( updateItem )\n {\n angular.extend(updateItem, item);\n\n // Add proper ui-sref\n updateItem.uisref = _getUiSref(updateItem);\n }\n // Create\n else\n {\n // Create an empty children array in the item\n item.children = [];\n\n // Add the default weight if not provided or if it's not a number\n if ( angular.isUndefined(item.weight) || !angular.isNumber(item.weight) )\n {\n item.weight = 1;\n }\n\n // Add the item id\n item._id = id;\n\n // Add the item path\n item._path = path;\n\n // Add proper ui-sref\n item.uisref = _getUiSref(item);\n\n // Push the item into the array\n parent.push(item);\n }\n }\n\n /**\n * Delete navigation item\n *\n * @param path\n */\n function deleteItem(path)\n {\n if ( !angular.isString(path) )\n {\n $log.error('path must be a string (eg. `dashboard.project`)');\n return;\n }\n\n // Locate the item by using given path\n var item = navigation,\n parts = path.split('.');\n\n for ( var p = 0; p < parts.length; p++ )\n {\n var id = parts[p];\n\n for ( var i = 0; i < item.length; i++ )\n {\n if ( item[i]._id === id )\n {\n // If we have a matching path,\n // we have found our object:\n // remove it.\n if ( item[i]._path === path )\n {\n item.splice(i, 1);\n return true;\n }\n\n // Otherwise grab the children of\n // the current item and continue\n item = item[i].children;\n break;\n }\n }\n }\n\n return false;\n }\n\n /**\n * Sort the navigation items by their weights\n *\n * @param parent\n */\n function sortByWeight(parent)\n {\n // If parent not provided, sort the root items\n if ( !parent )\n {\n parent = navigation;\n parent.sort(_byWeight);\n }\n\n // Sort the children\n for ( var i = 0; i < parent.length; i++ )\n {\n var children = parent[i].children;\n\n if ( children.length > 1 )\n {\n children.sort(_byWeight);\n }\n\n if ( children.length > 0 )\n {\n sortByWeight(children);\n }\n }\n }\n\n /* ----------------- */\n /* Private Functions */\n /* ----------------- */\n\n /**\n * Find or create parent\n *\n * @param parts\n * @returns {Array|Boolean}\n * @private\n */\n function _findOrCreateParent(parts)\n {\n // Store the main navigation\n var parent = navigation;\n\n // If it's going to be a root item\n // return the navigation itself\n if ( parts.length === 1 )\n {\n return parent;\n }\n\n // Remove the last element from the parts as\n // we don't need that to figure out the parent\n parts.pop();\n\n // Find and return the parent\n for ( var i = 0; i < parts.length; i++ )\n {\n var _id = parts[i],\n createParent = true;\n\n for ( var p = 0; p < parent.length; p++ )\n {\n if ( parent[p]._id === _id )\n {\n parent = parent[p].children;\n createParent = false;\n\n break;\n }\n }\n\n // If there is no parent found, create one, push\n // it into the current parent and assign it as a\n // new parent\n if ( createParent )\n {\n var item = {\n _id : _id,\n _path : parts.join('.'),\n title : _id,\n weight : 1,\n children: []\n };\n\n parent.push(item);\n parent = item.children;\n }\n }\n\n return parent;\n }\n\n /**\n * Sort by weight\n *\n * @param x\n * @param y\n * @returns {number}\n * @private\n */\n function _byWeight(x, y)\n {\n return parseInt(x.weight) - parseInt(y.weight);\n }\n\n /**\n * Setup the ui-sref using state & state parameters\n *\n * @param item\n * @returns {string}\n * @private\n */\n function _getUiSref(item)\n {\n var uisref = '';\n\n if ( angular.isDefined(item.state) )\n {\n uisref = item.state;\n\n if ( angular.isDefined(item.stateParams) && angular.isObject(item.stateParams) )\n {\n uisref = uisref + '(' + angular.toJson(item.stateParams) + ')';\n }\n }\n\n return uisref;\n }\n\n /* ----------------- */\n /* Service */\n /* ----------------- */\n\n this.$get = function ()\n {\n var activeItem = null,\n navigationScope = null,\n folded = null,\n foldedOpen = null;\n\n var service = {\n saveItem : saveItem,\n deleteItem : deleteItem,\n sort : sortByWeight,\n clearNavigation : clearNavigation,\n setActiveItem : setActiveItem,\n getActiveItem : getActiveItem,\n getNavigationObject: getNavigationObject,\n setNavigationScope : setNavigationScope,\n setFolded : setFolded,\n getFolded : getFolded,\n setFoldedOpen : setFoldedOpen,\n getFoldedOpen : getFoldedOpen,\n toggleFolded : toggleFolded\n };\n\n return service;\n\n //////////\n\n /**\n * Clear the entire navigation\n */\n function clearNavigation()\n {\n // Clear the navigation array\n navigation = [];\n\n // Clear the vm.navigation from main controller\n if ( navigationScope )\n {\n navigationScope.vm.navigation = [];\n }\n }\n\n /**\n * Set active item\n *\n * @param node\n * @param scope\n */\n function setActiveItem(node, scope)\n {\n activeItem = {\n node : node,\n scope: scope\n };\n }\n\n /**\n * Return active item\n */\n function getActiveItem()\n {\n return activeItem;\n }\n\n /**\n * Return navigation object\n *\n * @param root\n * @returns {Array}\n */\n function getNavigationObject(root)\n {\n if ( root )\n {\n for ( var i = 0; i < navigation.length; i++ )\n {\n if ( navigation[i]._id === root )\n {\n return [navigation[i]];\n }\n }\n }\n\n return navigation;\n }\n\n /**\n * Store navigation's scope for later use\n *\n * @param scope\n */\n function setNavigationScope(scope)\n {\n navigationScope = scope;\n }\n\n /**\n * Set folded status\n *\n * @param status\n */\n function setFolded(status)\n {\n folded = status;\n }\n\n /**\n * Return folded status\n *\n * @returns {*}\n */\n function getFolded()\n {\n return folded;\n }\n\n /**\n * Set folded open status\n *\n * @param status\n */\n function setFoldedOpen(status)\n {\n foldedOpen = status;\n }\n\n /**\n * Return folded open status\n *\n * @returns {*}\n */\n function getFoldedOpen()\n {\n return foldedOpen;\n }\n\n\n /**\n * Toggle fold on stored navigation's scope\n */\n function toggleFolded()\n {\n navigationScope.toggleFolded();\n }\n };\n }\n\n /** @ngInject */\n function MsNavigationController($scope, msNavigationService)\n {\n var vm = this;\n\n // Data\n if ( $scope.root )\n {\n vm.navigation = msNavigationService.getNavigationObject($scope.root);\n }\n else\n {\n vm.navigation = msNavigationService.getNavigationObject();\n }\n\n // Methods\n vm.toggleHorizontalMobileMenu = toggleHorizontalMobileMenu;\n\n //////////\n\n init();\n\n /**\n * Initialize\n */\n function init()\n {\n // Sort the navigation before doing anything else\n msNavigationService.sort();\n }\n\n /**\n * Toggle horizontal mobile menu\n */\n function toggleHorizontalMobileMenu()\n {\n angular.element('body').toggleClass('ms-navigation-horizontal-mobile-menu-active');\n }\n }\n\n /** @ngInject */\n function msNavigationDirective($rootScope, $timeout, $mdSidenav, msNavigationService)\n {\n return {\n restrict : 'E',\n scope : {\n folded: '=',\n root : '@'\n },\n controller : 'MsNavigationController as vm',\n templateUrl: 'app/core/directives/ms-navigation/templates/vertical.html',\n transclude : true,\n compile : function (tElement)\n {\n tElement.addClass('ms-navigation');\n\n return function postLink(scope, iElement)\n {\n var bodyEl = angular.element('body'),\n foldExpanderEl = angular.element('
'),\n foldCollapserEl = angular.element('
'),\n sidenav = $mdSidenav('navigation');\n\n // Store the navigation in the service for public access\n msNavigationService.setNavigationScope(scope);\n\n // Initialize\n init();\n\n /**\n * Initialize\n */\n function init()\n {\n // Set the folded status for the first time.\n // First, we have to check if we have a folded\n // status available in the service already. This\n // will prevent navigation to act weird if we already\n // set the fold status, remove the navigation and\n // then re-initialize it, which happens if we\n // change to a view without a navigation and then\n // come back with history.back() function.\n\n // If the service didn't initialize before, set\n // the folded status from scope, otherwise we\n // won't touch anything because the folded status\n // already set in the service...\n if ( msNavigationService.getFolded() === null )\n {\n msNavigationService.setFolded(scope.folded);\n }\n\n if ( msNavigationService.getFolded() )\n {\n // Collapse everything.\n // This must be inside a $timeout because by the\n // time we call this, the 'msNavigation::collapse'\n // event listener is not registered yet. $timeout\n // will ensure that it will be called after it is\n // registered.\n $timeout(function ()\n {\n $rootScope.$broadcast('msNavigation::collapse');\n });\n\n // Add class to the body\n bodyEl.addClass('ms-navigation-folded');\n\n // Set fold expander\n setFoldExpander();\n }\n }\n\n // Sidenav locked open status watcher\n scope.$watch(function ()\n {\n return sidenav.isLockedOpen();\n }, function (current, old)\n {\n if ( angular.isUndefined(current) || angular.equals(current, old) )\n {\n return;\n }\n\n var folded = msNavigationService.getFolded();\n\n if ( folded )\n {\n if ( current )\n {\n // Collapse everything\n $rootScope.$broadcast('msNavigation::collapse');\n }\n else\n {\n // Expand the active one and its parents\n var activeItem = msNavigationService.getActiveItem();\n if ( activeItem )\n {\n activeItem.scope.$emit('msNavigation::stateMatched');\n }\n }\n }\n });\n\n // Folded status watcher\n scope.$watch('folded', function (current, old)\n {\n if ( angular.isUndefined(current) || angular.equals(current, old) )\n {\n return;\n }\n\n setFolded(current);\n });\n\n /**\n * Set folded status\n *\n * @param folded\n */\n function setFolded(folded)\n {\n // Store folded status on the service for global access\n msNavigationService.setFolded(folded);\n\n if ( folded )\n {\n // Collapse everything\n $rootScope.$broadcast('msNavigation::collapse');\n\n // Add class to the body\n bodyEl.addClass('ms-navigation-folded');\n\n // Set fold expander\n setFoldExpander();\n }\n else\n {\n // Expand the active one and its parents\n var activeItem = msNavigationService.getActiveItem();\n if ( activeItem )\n {\n activeItem.scope.$emit('msNavigation::stateMatched');\n }\n\n // Remove body class\n bodyEl.removeClass('ms-navigation-folded ms-navigation-folded-open');\n\n // Remove fold collapser\n removeFoldCollapser();\n }\n }\n\n /**\n * Set fold expander\n */\n function setFoldExpander()\n {\n iElement.parent().append(foldExpanderEl);\n\n // Let everything settle for a moment\n // before registering the event listener\n $timeout(function ()\n {\n foldExpanderEl.on('mouseenter touchstart', onFoldExpanderHover);\n });\n }\n\n /**\n * Set fold collapser\n */\n function setFoldCollapser()\n {\n bodyEl.find('#main').append(foldCollapserEl);\n foldCollapserEl.on('mouseenter touchstart', onFoldCollapserHover);\n }\n\n /**\n * Remove fold collapser\n */\n function removeFoldCollapser()\n {\n foldCollapserEl.remove();\n }\n\n /**\n * onHover event of foldExpander\n */\n function onFoldExpanderHover(event)\n {\n if ( event )\n {\n event.preventDefault();\n }\n\n // Set folded open status\n msNavigationService.setFoldedOpen(true);\n\n // Expand the active one and its parents\n var activeItem = msNavigationService.getActiveItem();\n if ( activeItem )\n {\n activeItem.scope.$emit('msNavigation::stateMatched');\n }\n\n // Add class to the body\n bodyEl.addClass('ms-navigation-folded-open');\n\n // Remove the fold opener\n foldExpanderEl.remove();\n\n // Set fold collapser\n setFoldCollapser();\n }\n\n /**\n * onHover event of foldCollapser\n */\n function onFoldCollapserHover(event)\n {\n if ( event )\n {\n event.preventDefault();\n }\n\n // Set folded open status\n msNavigationService.setFoldedOpen(false);\n\n // Collapse everything\n $rootScope.$broadcast('msNavigation::collapse');\n\n // Remove body class\n bodyEl.removeClass('ms-navigation-folded-open');\n\n // Remove the fold collapser\n foldCollapserEl.remove();\n\n // Set fold expander\n setFoldExpander();\n }\n\n /**\n * Public access for toggling folded status externally\n */\n scope.toggleFolded = function ()\n {\n var folded = msNavigationService.getFolded();\n\n setFolded(!folded);\n };\n\n /**\n * On $stateChangeStart\n */\n scope.$on('$stateChangeStart', function ()\n {\n // Close the sidenav\n sidenav.close();\n\n // If navigation is folded open, close it\n if ( msNavigationService.getFolded() )\n {\n onFoldCollapserHover();\n }\n });\n\n // Cleanup\n scope.$on('$destroy', function ()\n {\n foldCollapserEl.off('mouseenter touchstart');\n foldExpanderEl.off('mouseenter touchstart');\n });\n };\n }\n };\n }\n\n /** @ngInject */\n function MsNavigationNodeController($scope, $element, $rootScope, $animate, $state, msNavigationService)\n {\n var vm = this;\n\n // Data\n vm.element = $element;\n vm.node = $scope.node;\n vm.hasChildren = undefined;\n vm.collapsed = undefined;\n vm.collapsable = undefined;\n vm.group = undefined;\n vm.animateHeightClass = 'animate-height';\n\n // Methods\n vm.toggleCollapsed = toggleCollapsed;\n vm.collapse = collapse;\n vm.expand = expand;\n vm.getClass = getClass;\n vm.isHidden = isHidden;\n\n //////////\n\n init();\n\n /**\n * Initialize\n */\n function init()\n {\n // Setup the initial values\n\n // Has children?\n vm.hasChildren = vm.node.children.length > 0;\n\n // Is group?\n vm.group = !!(angular.isDefined(vm.node.group) && vm.node.group === true);\n\n // Is collapsable?\n if ( !vm.hasChildren || vm.group )\n {\n vm.collapsable = false;\n }\n else\n {\n vm.collapsable = !!(angular.isUndefined(vm.node.collapsable) || typeof vm.node.collapsable !== 'boolean' || vm.node.collapsable === true);\n }\n\n // Is collapsed?\n if ( !vm.collapsable )\n {\n vm.collapsed = false;\n }\n else\n {\n vm.collapsed = !!(angular.isUndefined(vm.node.collapsed) || typeof vm.node.collapsed !== 'boolean' || vm.node.collapsed === true);\n }\n\n // Expand all parents if we have a matching state or\n // the current state is a child of the node's state\n if ( vm.node.state === $state.current.name || $state.includes(vm.node.state) )\n {\n // If state params are defined, make sure they are\n // equal, otherwise do not set the active item\n if ( angular.isDefined(vm.node.stateParams) && angular.isDefined($state.params) && !angular.equals(vm.node.stateParams, $state.params) )\n {\n return;\n }\n\n $scope.$emit('msNavigation::stateMatched');\n\n // Also store the current active menu item\n msNavigationService.setActiveItem(vm.node, $scope);\n }\n\n $scope.$on('msNavigation::stateMatched', function ()\n {\n // Expand if the current scope is collapsable and is collapsed\n if ( vm.collapsable && vm.collapsed )\n {\n $scope.$evalAsync(function ()\n {\n vm.collapsed = false;\n });\n }\n });\n\n // Listen for collapse event\n $scope.$on('msNavigation::collapse', function (event, path)\n {\n if ( vm.collapsed || !vm.collapsable )\n {\n return;\n }\n\n // If there is no path defined, collapse\n if ( angular.isUndefined(path) )\n {\n vm.collapse();\n }\n // If there is a path defined, do not collapse\n // the items that are inside that path. This will\n // prevent parent items from collapsing\n else\n {\n var givenPathParts = path.split('.'),\n activePathParts = [];\n\n var activeItem = msNavigationService.getActiveItem();\n if ( activeItem )\n {\n activePathParts = activeItem.node._path.split('.');\n }\n\n // Test for given path\n if ( givenPathParts.indexOf(vm.node._id) > -1 )\n {\n return;\n }\n\n // Test for active path\n if ( activePathParts.indexOf(vm.node._id) > -1 )\n {\n return;\n }\n\n vm.collapse();\n }\n });\n\n // Listen for $stateChangeSuccess event\n $scope.$on('$stateChangeSuccess', function ()\n {\n if ( vm.node.state === $state.current.name )\n {\n // If state params are defined, make sure they are\n // equal, otherwise do not set the active item\n if ( angular.isDefined(vm.node.stateParams) && angular.isDefined($state.params) && !angular.equals(vm.node.stateParams, $state.params) )\n {\n return;\n }\n\n // Update active item on state change\n msNavigationService.setActiveItem(vm.node, $scope);\n\n // Collapse everything except the one we're using\n $rootScope.$broadcast('msNavigation::collapse', vm.node._path);\n }\n });\n }\n\n /**\n * Toggle collapsed\n */\n function toggleCollapsed()\n {\n if ( vm.collapsed )\n {\n vm.expand();\n }\n else\n {\n vm.collapse();\n }\n }\n\n /**\n * Collapse\n */\n function collapse()\n {\n // Grab the element that we are going to collapse\n var collapseEl = vm.element.children('ul');\n\n // Grab the height\n var height = collapseEl[0].offsetHeight;\n\n $scope.$evalAsync(function ()\n {\n // Set collapsed status\n vm.collapsed = true;\n\n // Add collapsing class to the node\n vm.element.addClass('collapsing');\n\n // Animate the height\n $animate.animate(collapseEl,\n {\n 'display': 'block',\n 'height' : height + 'px'\n },\n {\n 'height': '0px'\n },\n vm.animateHeightClass\n ).then(\n function ()\n {\n // Clear the inline styles after animation done\n collapseEl.css({\n 'display': '',\n 'height' : ''\n });\n\n // Clear collapsing class from the node\n vm.element.removeClass('collapsing');\n }\n );\n\n // Broadcast the collapse event so child items can also be collapsed\n $scope.$broadcast('msNavigation::collapse');\n });\n }\n\n /**\n * Expand\n */\n function expand()\n {\n // Grab the element that we are going to expand\n var expandEl = vm.element.children('ul');\n\n // Move the element out of the dom flow and\n // make it block so we can get its height\n expandEl.css({\n 'position' : 'absolute',\n 'visibility': 'hidden',\n 'display' : 'block',\n 'height' : 'auto'\n });\n\n // Grab the height\n var height = expandEl[0].offsetHeight;\n\n // Reset the style modifications\n expandEl.css({\n 'position' : '',\n 'visibility': '',\n 'display' : '',\n 'height' : ''\n });\n\n $scope.$evalAsync(function ()\n {\n // Set collapsed status\n vm.collapsed = false;\n\n // Add expanding class to the node\n vm.element.addClass('expanding');\n\n // Animate the height\n $animate.animate(expandEl,\n {\n 'display': 'block',\n 'height' : '0px'\n },\n {\n 'height': height + 'px'\n },\n vm.animateHeightClass\n ).then(\n function ()\n {\n // Clear the inline styles after animation done\n expandEl.css({\n 'height': ''\n });\n\n // Clear expanding class from the node\n vm.element.removeClass('expanding');\n }\n );\n\n // If item expanded, broadcast the collapse event from rootScope so that the other expanded items\n // can be collapsed. This is necessary for keeping only one parent expanded at any time\n $rootScope.$broadcast('msNavigation::collapse', vm.node._path);\n });\n }\n\n /**\n * Return the class\n *\n * @returns {*}\n */\n function getClass()\n {\n return vm.node.class;\n }\n\n /**\n * Check if node should be hidden\n *\n * @returns {boolean}\n */\n function isHidden()\n {\n if ( angular.isDefined(vm.node.hidden) && angular.isFunction(vm.node.hidden) )\n {\n return vm.node.hidden();\n }\n\n return false;\n }\n }\n\n /** @ngInject */\n function msNavigationNodeDirective()\n {\n return {\n restrict : 'A',\n bindToController: {\n node: '=msNavigationNode'\n },\n controller : 'MsNavigationNodeController as vm',\n compile : function (tElement)\n {\n tElement.addClass('ms-navigation-node');\n\n return function postLink(scope, iElement, iAttrs, MsNavigationNodeCtrl)\n {\n // Add custom classes\n iElement.addClass(MsNavigationNodeCtrl.getClass());\n\n // Add group class if it's a group\n if ( MsNavigationNodeCtrl.group )\n {\n iElement.addClass('group');\n }\n };\n }\n };\n }\n\n /** @ngInject */\n function msNavigationItemDirective()\n {\n return {\n restrict: 'A',\n require : '^msNavigationNode',\n compile : function (tElement)\n {\n tElement.addClass('ms-navigation-item');\n\n return function postLink(scope, iElement, iAttrs, MsNavigationNodeCtrl)\n {\n // If the item is collapsable...\n if ( MsNavigationNodeCtrl.collapsable )\n {\n iElement.on('click', MsNavigationNodeCtrl.toggleCollapsed);\n }\n\n // Cleanup\n scope.$on('$destroy', function ()\n {\n iElement.off('click');\n });\n };\n }\n };\n }\n\n /** @ngInject */\n function msNavigationHorizontalDirective(msNavigationService)\n {\n return {\n restrict : 'E',\n scope : {\n root: '@'\n },\n controller : 'MsNavigationController as vm',\n templateUrl: 'app/core/directives/ms-navigation/templates/horizontal.html',\n transclude : true,\n compile : function (tElement)\n {\n tElement.addClass('ms-navigation-horizontal');\n\n return function postLink(scope)\n {\n // Store the navigation in the service for public access\n msNavigationService.setNavigationScope(scope);\n };\n }\n };\n }\n\n /** @ngInject */\n function MsNavigationHorizontalNodeController($scope, $element, $rootScope, $state, msNavigationService)\n {\n var vm = this;\n\n // Data\n vm.element = $element;\n vm.node = $scope.node;\n vm.hasChildren = undefined;\n vm.group = undefined;\n\n // Methods\n vm.getClass = getClass;\n\n //////////\n\n init();\n\n /**\n * Initialize\n */\n function init()\n {\n // Setup the initial values\n\n // Is active\n vm.isActive = false;\n\n // Has children?\n vm.hasChildren = vm.node.children.length > 0;\n\n // Is group?\n vm.group = !!(angular.isDefined(vm.node.group) && vm.node.group === true);\n\n // Mark all parents as active if we have a matching state\n // or the current state is a child of the node's state\n if ( vm.node.state === $state.current.name || $state.includes(vm.node.state) )\n {\n // If state params are defined, make sure they are\n // equal, otherwise do not set the active item\n if ( angular.isDefined(vm.node.stateParams) && angular.isDefined($state.params) && !angular.equals(vm.node.stateParams, $state.params) )\n {\n return;\n }\n\n $scope.$emit('msNavigation::stateMatched');\n\n // Also store the current active menu item\n msNavigationService.setActiveItem(vm.node, $scope);\n }\n\n $scope.$on('msNavigation::stateMatched', function ()\n {\n // Mark as active if has children\n if ( vm.hasChildren )\n {\n $scope.$evalAsync(function ()\n {\n vm.isActive = true;\n });\n }\n });\n\n // Listen for clearActive event\n $scope.$on('msNavigation::clearActive', function ()\n {\n if ( !vm.hasChildren )\n {\n return;\n }\n\n var activePathParts = [];\n\n var activeItem = msNavigationService.getActiveItem();\n if ( activeItem )\n {\n activePathParts = activeItem.node._path.split('.');\n }\n\n // Test for active path\n if ( activePathParts.indexOf(vm.node._id) > -1 )\n {\n $scope.$evalAsync(function ()\n {\n vm.isActive = true;\n });\n }\n else\n {\n $scope.$evalAsync(function ()\n {\n vm.isActive = false;\n });\n }\n\n });\n\n // Listen for $stateChangeSuccess event\n $scope.$on('$stateChangeSuccess', function ()\n {\n if ( vm.node.state === $state.current.name )\n {\n // If state params are defined, make sure they are\n // equal, otherwise do not set the active item\n if ( angular.isDefined(vm.node.stateParams) && angular.isDefined($state.params) && !angular.equals(vm.node.stateParams, $state.params) )\n {\n return;\n }\n\n // Update active item on state change\n msNavigationService.setActiveItem(vm.node, $scope);\n\n // Clear all active states everything except the one we're using\n $rootScope.$broadcast('msNavigation::clearActive');\n }\n });\n }\n\n /**\n * Return the class\n *\n * @returns {*}\n */\n function getClass()\n {\n return vm.node.class;\n }\n }\n\n /** @ngInject */\n function msNavigationHorizontalNodeDirective()\n {\n return {\n restrict : 'A',\n bindToController: {\n node: '=msNavigationHorizontalNode'\n },\n controller : 'MsNavigationHorizontalNodeController as vm',\n compile : function (tElement)\n {\n tElement.addClass('ms-navigation-horizontal-node');\n\n return function postLink(scope, iElement, iAttrs, MsNavigationHorizontalNodeCtrl)\n {\n // Add custom classes\n iElement.addClass(MsNavigationHorizontalNodeCtrl.getClass());\n\n // Add group class if it's a group\n if ( MsNavigationHorizontalNodeCtrl.group )\n {\n iElement.addClass('group');\n }\n };\n }\n };\n }\n\n /** @ngInject */\n function msNavigationHorizontalItemDirective($mdMedia)\n {\n return {\n restrict: 'A',\n require : '^msNavigationHorizontalNode',\n compile : function (tElement)\n {\n tElement.addClass('ms-navigation-horizontal-item');\n\n return function postLink(scope, iElement, iAttrs, MsNavigationHorizontalNodeCtrl)\n {\n iElement.on('click', onClick);\n\n function onClick()\n {\n if ( !MsNavigationHorizontalNodeCtrl.hasChildren || $mdMedia('gt-md') )\n {\n return;\n }\n\n iElement.toggleClass('expanded');\n }\n\n // Cleanup\n scope.$on('$destroy', function ()\n {\n iElement.off('click');\n });\n };\n }\n };\n }\n\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .factory('msNavFoldService', msNavFoldService)\n .directive('msNavIsFolded', msNavIsFoldedDirective)\n .controller('MsNavController', MsNavController)\n .directive('msNav', msNavDirective)\n .directive('msNavTitle', msNavTitleDirective)\n .directive('msNavButton', msNavButtonDirective)\n .directive('msNavToggle', msNavToggleDirective);\n\n /** @ngInject */\n function msNavFoldService()\n {\n var foldable = {};\n\n var service = {\n setFoldable : setFoldable,\n isNavFoldedOpen: isNavFoldedOpen,\n toggleFold : toggleFold,\n openFolded : openFolded,\n closeFolded : closeFolded\n };\n\n return service;\n\n //////////\n\n /**\n * Set the foldable\n *\n * @param scope\n * @param element\n */\n function setFoldable(scope, element)\n {\n foldable = {\n 'scope' : scope,\n 'element': element\n };\n }\n\n /**\n * Is folded open\n */\n function isNavFoldedOpen()\n {\n return foldable.scope.isNavFoldedOpen();\n }\n\n /**\n * Toggle fold\n */\n function toggleFold()\n {\n foldable.scope.toggleFold();\n }\n\n /**\n * Open folded navigation\n */\n function openFolded()\n {\n foldable.scope.openFolded();\n }\n\n /**\n * Close folded navigation\n */\n function closeFolded()\n {\n foldable.scope.closeFolded();\n }\n }\n\n /** @ngInject */\n function msNavIsFoldedDirective($document, $rootScope, msNavFoldService)\n {\n return {\n restrict: 'A',\n link : function (scope, iElement, iAttrs)\n {\n var isFolded = (iAttrs.msNavIsFolded === 'true'),\n isFoldedOpen = false,\n body = angular.element($document[0].body),\n openOverlay = angular.element('
'),\n closeOverlay = angular.element('
'),\n sidenavEl = iElement.parent();\n\n // Initialize the service\n msNavFoldService.setFoldable(scope, iElement, isFolded);\n\n // Set the fold status for the first time\n if ( isFolded )\n {\n fold();\n }\n else\n {\n unfold();\n }\n\n /**\n * Is nav folded open\n */\n function isNavFoldedOpen()\n {\n return isFoldedOpen;\n }\n\n /**\n * Toggle fold\n */\n function toggleFold()\n {\n isFolded = !isFolded;\n\n if ( isFolded )\n {\n fold();\n }\n else\n {\n unfold();\n }\n }\n\n /**\n * Fold the navigation\n */\n function fold()\n {\n // Add classes\n body.addClass('ms-nav-folded');\n\n // Collapse everything and scroll to the top\n $rootScope.$broadcast('msNav::forceCollapse');\n iElement.scrollTop(0);\n\n // Append the openOverlay to the element\n sidenavEl.append(openOverlay);\n\n // Event listeners\n openOverlay.on('mouseenter touchstart', function (event)\n {\n openFolded(event);\n isFoldedOpen = true;\n });\n }\n\n /**\n * Open folded navigation\n */\n function openFolded(event)\n {\n if ( angular.isDefined(event) )\n {\n event.preventDefault();\n }\n\n body.addClass('ms-nav-folded-open');\n\n // Update the location\n $rootScope.$broadcast('msNav::expandMatchingToggles');\n\n // Remove open overlay\n sidenavEl.find(openOverlay).remove();\n\n // Append close overlay and bind its events\n sidenavEl.parent().append(closeOverlay);\n closeOverlay.on('mouseenter touchstart', function (event)\n {\n closeFolded(event);\n isFoldedOpen = false;\n });\n }\n\n /**\n * Close folded navigation\n */\n function closeFolded(event)\n {\n if ( angular.isDefined(event) )\n {\n event.preventDefault();\n }\n\n // Collapse everything and scroll to the top\n $rootScope.$broadcast('msNav::forceCollapse');\n iElement.scrollTop(0);\n\n body.removeClass('ms-nav-folded-open');\n\n // Remove close overlay\n sidenavEl.parent().find(closeOverlay).remove();\n\n // Append open overlay and bind its events\n sidenavEl.append(openOverlay);\n openOverlay.on('mouseenter touchstart', function (event)\n {\n openFolded(event);\n isFoldedOpen = true;\n });\n }\n\n /**\n * Unfold the navigation\n */\n function unfold()\n {\n body.removeClass('ms-nav-folded ms-nav-folded-open');\n\n // Update the location\n $rootScope.$broadcast('msNav::expandMatchingToggles');\n\n iElement.off('mouseenter mouseleave');\n }\n\n // Expose functions to the scope\n scope.toggleFold = toggleFold;\n scope.openFolded = openFolded;\n scope.closeFolded = closeFolded;\n scope.isNavFoldedOpen = isNavFoldedOpen;\n\n // Cleanup\n scope.$on('$destroy', function ()\n {\n openOverlay.off('mouseenter touchstart');\n closeOverlay.off('mouseenter touchstart');\n iElement.off('mouseenter mouseleave');\n });\n }\n };\n }\n\n\n /** @ngInject */\n function MsNavController()\n {\n var vm = this,\n disabled = false,\n toggleItems = [],\n lockedItems = [];\n\n // Data\n\n // Methods\n vm.isDisabled = isDisabled;\n vm.enable = enable;\n vm.disable = disable;\n vm.setToggleItem = setToggleItem;\n vm.getLockedItems = getLockedItems;\n vm.setLockedItem = setLockedItem;\n vm.clearLockedItems = clearLockedItems;\n\n //////////\n\n /**\n * Is navigation disabled\n *\n * @returns {boolean}\n */\n function isDisabled()\n {\n return disabled;\n }\n\n /**\n * Disable the navigation\n */\n function disable()\n {\n disabled = true;\n }\n\n /**\n * Enable the navigation\n */\n function enable()\n {\n disabled = false;\n }\n\n /**\n * Set toggle item\n *\n * @param element\n * @param scope\n */\n function setToggleItem(element, scope)\n {\n toggleItems.push({\n 'element': element,\n 'scope' : scope\n });\n }\n\n /**\n * Get locked items\n *\n * @returns {Array}\n */\n function getLockedItems()\n {\n return lockedItems;\n }\n\n /**\n * Set locked item\n *\n * @param element\n * @param scope\n */\n function setLockedItem(element, scope)\n {\n lockedItems.push({\n 'element': element,\n 'scope' : scope\n });\n }\n\n /**\n * Clear locked items list\n */\n function clearLockedItems()\n {\n lockedItems = [];\n }\n }\n\n /** @ngInject */\n function msNavDirective($rootScope, $mdComponentRegistry, msNavFoldService)\n {\n return {\n restrict : 'E',\n scope : {},\n controller: 'MsNavController',\n compile : function (tElement)\n {\n tElement.addClass('ms-nav');\n\n return function postLink(scope)\n {\n // Update toggle status according to the ui-router current state\n $rootScope.$broadcast('msNav::expandMatchingToggles');\n\n // Update toggles on state changes\n var stateChangeSuccessEvent = $rootScope.$on('$stateChangeSuccess', function ()\n {\n $rootScope.$broadcast('msNav::expandMatchingToggles');\n\n // Close navigation sidenav on stateChangeSuccess\n $mdComponentRegistry.when('navigation').then(function (navigation)\n {\n navigation.close();\n\n if ( msNavFoldService.isNavFoldedOpen() )\n {\n msNavFoldService.closeFolded();\n }\n });\n });\n\n // Cleanup\n scope.$on('$destroy', function ()\n {\n stateChangeSuccessEvent();\n })\n };\n }\n };\n }\n\n /** @ngInject */\n function msNavTitleDirective()\n {\n return {\n restrict: 'A',\n compile : function (tElement)\n {\n tElement.addClass('ms-nav-title');\n\n return function postLink()\n {\n\n };\n }\n };\n }\n\n /** @ngInject */\n function msNavButtonDirective()\n {\n return {\n restrict: 'AE',\n compile : function (tElement)\n {\n tElement.addClass('ms-nav-button');\n\n return function postLink()\n {\n\n };\n }\n };\n }\n\n /** @ngInject */\n function msNavToggleDirective($rootScope, $q, $animate, $state)\n {\n return {\n restrict: 'A',\n require : '^msNav',\n scope : true,\n compile : function (tElement, tAttrs)\n {\n tElement.addClass('ms-nav-toggle');\n\n // Add collapsed attr\n if ( angular.isUndefined(tAttrs.collapsed) )\n {\n tAttrs.collapsed = true;\n }\n\n tElement.attr('collapsed', tAttrs.collapsed);\n\n return function postLink(scope, iElement, iAttrs, MsNavCtrl)\n {\n var classes = {\n expanded : 'expanded',\n expandAnimation : 'expand-animation',\n collapseAnimation: 'collapse-animation'\n };\n\n // Store all related states\n var links = iElement.find('a');\n var states = [];\n var regExp = /\\(.*\\)/g;\n\n angular.forEach(links, function (link)\n {\n var state = angular.element(link).attr('ui-sref');\n\n if ( angular.isUndefined(state) )\n {\n return;\n }\n\n // Remove any parameter definition from the state name before storing it\n state = state.replace(regExp, '');\n\n states.push(state);\n });\n\n // Store toggle-able element and its scope in the main nav controller\n MsNavCtrl.setToggleItem(iElement, scope);\n\n // Click handler\n iElement.children('.ms-nav-button').on('click', toggle);\n\n // Toggle function\n function toggle()\n {\n // If navigation is disabled, do nothing...\n if ( MsNavCtrl.isDisabled() )\n {\n return;\n }\n\n // Disable the entire navigation to prevent spamming\n MsNavCtrl.disable();\n\n if ( isCollapsed() )\n {\n // Clear the locked items list\n MsNavCtrl.clearLockedItems();\n\n // Emit pushToLockedList event\n scope.$emit('msNav::pushToLockedList');\n\n // Collapse everything but locked items\n $rootScope.$broadcast('msNav::collapse');\n\n // Expand and then...\n expand().then(function ()\n {\n // Enable the entire navigation after animations completed\n MsNavCtrl.enable();\n });\n }\n else\n {\n // Collapse with all children\n scope.$broadcast('msNav::forceCollapse');\n }\n }\n\n // Cleanup\n scope.$on('$destroy', function ()\n {\n iElement.children('.ms-nav-button').off('click');\n });\n\n /*---------------------*/\n /* Scope Events */\n /*---------------------*/\n\n /**\n * Collapse everything but locked items\n */\n scope.$on('msNav::collapse', function ()\n {\n // Only collapse toggles that are not locked\n var lockedItems = MsNavCtrl.getLockedItems();\n var locked = false;\n\n angular.forEach(lockedItems, function (lockedItem)\n {\n if ( angular.equals(lockedItem.scope, scope) )\n {\n locked = true;\n }\n });\n\n if ( locked )\n {\n return;\n }\n\n // Collapse and then...\n collapse().then(function ()\n {\n // Enable the entire navigation after animations completed\n MsNavCtrl.enable();\n });\n });\n\n /**\n * Collapse everything\n */\n scope.$on('msNav::forceCollapse', function ()\n {\n // Collapse and then...\n collapse().then(function ()\n {\n // Enable the entire navigation after animations completed\n MsNavCtrl.enable();\n });\n });\n\n /**\n * Expand toggles that match with the current states\n */\n scope.$on('msNav::expandMatchingToggles', function ()\n {\n var currentState = $state.current.name;\n var shouldExpand = false;\n\n angular.forEach(states, function (state)\n {\n if ( currentState === state )\n {\n shouldExpand = true;\n }\n });\n\n if ( shouldExpand )\n {\n expand();\n }\n else\n {\n collapse();\n }\n });\n\n /**\n * Add toggle to the locked list\n */\n scope.$on('msNav::pushToLockedList', function ()\n {\n // Set expanded item on main nav controller\n MsNavCtrl.setLockedItem(iElement, scope);\n });\n\n /*---------------------*/\n /* Internal functions */\n /*---------------------*/\n\n /**\n * Is element collapsed\n *\n * @returns {bool}\n */\n function isCollapsed()\n {\n return iElement.attr('collapsed') === 'true';\n }\n\n /**\n * Is element expanded\n *\n * @returns {bool}\n */\n function isExpanded()\n {\n return !isCollapsed();\n }\n\n /**\n * Expand the toggle\n *\n * @returns $promise\n */\n function expand()\n {\n // Create a new deferred object\n var deferred = $q.defer();\n\n // If the menu item is already expanded, do nothing..\n if ( isExpanded() )\n {\n // Reject the deferred object\n deferred.reject({'error': true});\n\n // Return the promise\n return deferred.promise;\n }\n\n // Set element attr\n iElement.attr('collapsed', false);\n\n // Grab the element to expand\n var elementToExpand = angular.element(iElement.find('ms-nav-toggle-items')[0]);\n\n // Move the element out of the dom flow and\n // make it block so we can get its height\n elementToExpand.css({\n 'position' : 'absolute',\n 'visibility': 'hidden',\n 'display' : 'block',\n 'height' : 'auto'\n });\n\n // Grab the height\n var height = elementToExpand[0].offsetHeight;\n\n // Reset the style modifications\n elementToExpand.css({\n 'position' : '',\n 'visibility': '',\n 'display' : '',\n 'height' : ''\n });\n\n // Animate the height\n scope.$evalAsync(function ()\n {\n $animate.animate(elementToExpand,\n {\n 'display': 'block',\n 'height' : '0px'\n },\n {\n 'height': height + 'px'\n },\n classes.expandAnimation\n ).then(\n function ()\n {\n // Add expanded class\n elementToExpand.addClass(classes.expanded);\n\n // Clear the inline styles after animation done\n elementToExpand.css({'height': ''});\n\n // Resolve the deferred object\n deferred.resolve({'success': true});\n }\n );\n });\n\n // Return the promise\n return deferred.promise;\n }\n\n /**\n * Collapse the toggle\n *\n * @returns $promise\n */\n function collapse()\n {\n // Create a new deferred object\n var deferred = $q.defer();\n\n // If the menu item is already collapsed, do nothing..\n if ( isCollapsed() )\n {\n // Reject the deferred object\n deferred.reject({'error': true});\n\n // Return the promise\n return deferred.promise;\n }\n\n // Set element attr\n iElement.attr('collapsed', true);\n\n // Grab the element to collapse\n var elementToCollapse = angular.element(iElement.find('ms-nav-toggle-items')[0]);\n\n // Grab the height\n var height = elementToCollapse[0].offsetHeight;\n\n // Animate the height\n scope.$evalAsync(function ()\n {\n $animate.animate(elementToCollapse,\n {\n 'height': height + 'px'\n },\n {\n 'height': '0px'\n },\n classes.collapseAnimation\n ).then(\n function ()\n {\n // Remove expanded class\n elementToCollapse.removeClass(classes.expanded);\n\n // Clear the inline styles after animation done\n elementToCollapse.css({\n 'display': '',\n 'height' : ''\n });\n\n // Resolve the deferred object\n deferred.resolve({'success': true});\n }\n );\n });\n\n // Return the promise\n return deferred.promise;\n }\n };\n }\n };\n }\n})();\n\n\nvar pancake;\n(function (pancake) {\n var ScrumrowController = (function () {\n function ScrumrowController($stateParams, scrumRowsService, contentService, $mdDialog) {\n var _this = this;\n this.$stateParams = $stateParams;\n this.scrumRowsService = scrumRowsService;\n this.contentService = contentService;\n this.$mdDialog = $mdDialog;\n this.labels = {};\n this.feedbackModel = {};\n scrumRowsService.getRow($stateParams.id).then(function (row) {\n _this.model = row;\n });\n this.getLabel('add-feedback');\n this.getLabel('add-row-feedback');\n this.getLabel('get-name-title');\n this.getLabel('get-name-description');\n this.getLabel('thank-for-comment');\n }\n ScrumrowController.prototype.preventDefault = function (event) {\n event.preventDefault();\n event.stopPropagation();\n };\n ScrumrowController.prototype.sendRowFeedback = function (ev, id, row) {\n var _this = this;\n this.$mdDialog.show({\n templateUrl: 'app/main/scrumrow/popup.html',\n controllerAs: 'vm',\n clickOutsideToClose: true,\n controller: 'popupController',\n locals: {\n title: this.labels['get-name-title'],\n description: this.labels['get-name-description']\n }\n }).then(function (result) {\n _this.scrumRowsService\n .sendRowFeedback(id, angular.extend(result, { content: _this.feedbackModel[id], row: row }))\n .then(function () {\n _this.$mdDialog.show(_this.$mdDialog.alert()\n .clickOutsideToClose(true)\n .title('Scrum Rows')\n .textContent(_this.labels['thank-for-comment'])\n .ariaLabel('Thanks')\n .ok('OK')\n .targetEvent(ev)).then(function () { return _this.feedbackModel[id] = undefined; });\n });\n });\n };\n ScrumrowController.prototype.sendListFeedback = function (ev, id, row) {\n var _this = this;\n this.$mdDialog.show({\n templateUrl: 'app/main/scrumrow/popup.html',\n controllerAs: 'vm',\n clickOutsideToClose: true,\n controller: 'popupController',\n locals: {\n title: this.labels['get-name-title'],\n description: this.labels['get-name-description']\n }\n }).then(function (result) {\n _this.scrumRowsService\n .sendListFeedback(id, angular.extend(result, { content: _this.feedbackModel[id + row], row: row }))\n .then(function () {\n _this.$mdDialog.show(_this.$mdDialog.alert()\n .clickOutsideToClose(true)\n .title('Scrum Rows')\n .textContent(_this.labels['thank-for-comment'])\n .ariaLabel('Thanks')\n .ok('OK')\n .targetEvent(ev)).then(function () { return _this.feedbackModel[id + row] = undefined; });\n });\n });\n };\n ScrumrowController.prototype.getLabel = function (name) {\n var _this = this;\n return this.contentService.getContent(name, false).then(function (page) {\n _this.labels[name] = page.content.replace('

', '').replace('

', '');\n });\n };\n ScrumrowController.$inject = ['$stateParams', 'scrumRowsService', 'contentService', '$mdDialog'];\n return ScrumrowController;\n })();\n angular\n .module('app.pancake')\n .controller('ScrumrowController', ScrumrowController);\n})(pancake || (pancake = {}));\n\nvar pancake;\n(function (pancake) {\n var PopupController = (function () {\n function PopupController($mdDialog, title, description) {\n this.$mdDialog = $mdDialog;\n this.title = title;\n this.description = description;\n }\n PopupController.prototype.close = function () {\n this.$mdDialog.hide({\n name: this.name,\n email: this.email\n });\n };\n PopupController.prototype.anonymous = function () {\n this.$mdDialog.hide({\n anonymous: true\n });\n };\n PopupController.prototype.abort = function () {\n this.$mdDialog.cancel();\n };\n PopupController.inject = ['$mdDialog', 'title', 'description'];\n return PopupController;\n })();\n angular\n .module('app.pancake')\n .controller('popupController', PopupController);\n})(pancake || (pancake = {}));\n\nvar pancake;\n(function (pancake) {\n 'use strict';\n configureStates.$inject = ['$stateProvider', '$translatePartialLoaderProvider', 'msNavigationServiceProvider'];\n /* @ngInject */\n function configureStates($stateProvider, $translatePartialLoaderProvider, msNavigationServiceProvider) {\n var states = getStates();\n states.forEach(function (state) {\n $stateProvider.state(state.state, state.config);\n });\n // Translation\n $translatePartialLoaderProvider.addPart('app/main/home');\n // Navigation\n msNavigationServiceProvider.saveItem('home', {\n title: 'home',\n icon: 'icon-magnify',\n state: 'app.home',\n //group : true,\n translate: 'SEARCH.TITLE'\n });\n }\n function getStates() {\n return [\n {\n state: 'app.home',\n config: {\n url: '/home',\n views: {\n 'content@app': {\n templateUrl: 'app/main/home/home.html',\n controller: 'HomeController as vm'\n }\n }\n }\n }\n ];\n }\n angular\n .module('app.home', [])\n .config(configureStates);\n})(pancake || (pancake = {}));\n\nvar app;\n(function (app) {\n var home;\n (function (home) {\n var HomeController = (function () {\n function HomeController(sessionService, notificationService, contentService, navigationService, $cookies, $mdDialog) {\n var _this = this;\n this.sessionService = sessionService;\n this.notificationService = notificationService;\n this.contentService = contentService;\n this.navigationService = navigationService;\n this.$cookies = $cookies;\n this.$mdDialog = $mdDialog;\n this.initFeaturing();\n //#ff9500\n contentService.getContent('home-welcome', false).then(function (page) {\n if (_this.$cookies.get('noPopup') === 'true') {\n return;\n }\n _this.$mdDialog.show(_this.$mdDialog.alert()\n .htmlContent(page.content)\n .ok('OK')).then(function () {\n _this.$cookies.put('noPopup', 'true');\n });\n });\n }\n HomeController.prototype.initFeaturing = function () {\n this.featuringOptions = {\n // contentKey: 'home-featuring'\n image: 'http://www.guldemondpragmatiek.nl/wp-content/uploads/2016/07/Jasper-Guldemond-7-e1477653759574.jpg',\n height: 300\n };\n };\n HomeController.$inject = ['sessionService', 'notificationService', 'contentService', 'navigationService', '$cookies', '$mdDialog'];\n return HomeController;\n })();\n angular\n .module('app.home')\n .controller('HomeController', HomeController);\n })(home = app.home || (app.home = {}));\n})(app || (app = {}));\n\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .provider('fuseTheming', fuseThemingProvider);\n\n /** @ngInject */\n function fuseThemingProvider()\n {\n // Inject Cookies Service\n var $cookies;\n\n angular.injector(['ngCookies']).invoke([\n '$cookies', function (_$cookies)\n {\n $cookies = _$cookies;\n }\n ]);\n\n // Inject $log service\n var $log = angular.injector(['ng']).get('$log');\n\n var registeredPalettes,\n registeredThemes;\n\n // Methods\n this.setRegisteredPalettes = setRegisteredPalettes;\n this.setRegisteredThemes = setRegisteredThemes;\n\n //////////\n\n /**\n * Set registered palettes\n *\n * @param _registeredPalettes\n */\n function setRegisteredPalettes(_registeredPalettes)\n {\n registeredPalettes = _registeredPalettes;\n }\n\n /**\n * Set registered themes\n *\n * @param _registeredThemes\n */\n function setRegisteredThemes(_registeredThemes)\n {\n registeredThemes = _registeredThemes;\n }\n\n /**\n * Service\n */\n this.$get = function ()\n {\n var service = {\n getRegisteredPalettes: getRegisteredPalettes,\n getRegisteredThemes : getRegisteredThemes,\n setActiveTheme : setActiveTheme,\n setThemesList : setThemesList,\n themes : {\n list : {},\n active: {\n 'name' : '',\n 'theme': {}\n }\n }\n };\n\n return service;\n\n //////////\n\n /**\n * Get registered palettes\n *\n * @returns {*}\n */\n function getRegisteredPalettes()\n {\n return registeredPalettes;\n }\n\n /**\n * Get registered themes\n *\n * @returns {*}\n */\n function getRegisteredThemes()\n {\n return registeredThemes;\n }\n\n /**\n * Set active theme\n *\n * @param themeName\n */\n function setActiveTheme(themeName)\n {\n // If theme does not exist, fallback to the default theme\n if ( angular.isUndefined(service.themes.list[themeName]) )\n {\n // If there is no theme called \"default\"...\n if ( angular.isUndefined(service.themes.list.default) )\n {\n $log.error('You must have at least one theme named \"default\"');\n return;\n }\n\n $log.warn('The theme \"' + themeName + '\" does not exist! Falling back to the \"default\" theme.');\n\n // Otherwise set theme to default theme\n service.themes.active.name = 'default';\n service.themes.active.theme = service.themes.list.default;\n $cookies.put('selectedTheme', service.themes.active.name);\n\n return;\n }\n\n service.themes.active.name = themeName;\n service.themes.active.theme = service.themes.list[themeName];\n $cookies.put('selectedTheme', themeName);\n }\n\n /**\n * Set available themes list\n *\n * @param themeList\n */\n function setThemesList(themeList)\n {\n service.themes.list = themeList;\n }\n };\n }\n})();\n\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .config(config);\n\n /** @ngInject */\n function config($mdThemingProvider, fusePalettes, fuseThemes, fuseThemingProvider)\n {\n // Inject Cookies Service\n var $cookies;\n angular.injector(['ngCookies']).invoke([\n '$cookies', function (_$cookies)\n {\n $cookies = _$cookies;\n }\n ]);\n\n // Check if custom theme exist in cookies\n var customTheme = $cookies.getObject('customTheme');\n if ( customTheme )\n {\n fuseThemes['custom'] = customTheme;\n }\n\n $mdThemingProvider.alwaysWatchTheme(true);\n\n // Define custom palettes\n angular.forEach(fusePalettes, function (palette)\n {\n $mdThemingProvider.definePalette(palette.name, palette.options);\n });\n\n // Register custom themes\n angular.forEach(fuseThemes, function (theme, themeName)\n {\n $mdThemingProvider.theme(themeName)\n .primaryPalette(theme.primary.name, theme.primary.hues)\n .accentPalette(theme.accent.name, theme.accent.hues)\n .warnPalette(theme.warn.name, theme.warn.hues)\n .backgroundPalette(theme.background.name, theme.background.hues);\n });\n\n // Store generated PALETTES and THEMES objects from $mdThemingProvider\n // in our custom provider, so we can inject them into other areas\n fuseThemingProvider.setRegisteredPalettes($mdThemingProvider._PALETTES);\n fuseThemingProvider.setRegisteredThemes($mdThemingProvider._THEMES);\n }\n\n})();\n(function ()\n{\n 'use strict';\n\n var fuseThemes = {\n 'default' : {\n primary : {\n name: 'fuse-pale-blue',\n hues: {\n 'default': '700',\n 'hue-1' : '500',\n 'hue-2' : '600',\n 'hue-3' : '400'\n }\n },\n accent : {\n name: 'light-blue',\n hues: {\n 'default': '600',\n 'hue-1' : '400',\n 'hue-2' : '700',\n 'hue-3' : 'A100'\n }\n },\n warn : {name: 'red'},\n background: {\n name: 'grey',\n hues: {\n 'default': 'A100',\n 'hue-1' : '100',\n 'hue-2' : '50',\n 'hue-3' : '300'\n }\n }\n },\n 'pink': {\n primary : {\n name: 'blue-grey',\n hues: {\n 'default': '800',\n 'hue-1' : '600',\n 'hue-2' : '400',\n 'hue-3' : 'A100'\n }\n },\n accent : {\n name: 'pink',\n hues: {\n 'default': '400',\n 'hue-1' : '300',\n 'hue-2' : '600',\n 'hue-3' : 'A100'\n }\n },\n warn : {name: 'blue'},\n background: {\n name: 'grey',\n hues: {\n 'default': 'A100',\n 'hue-1' : '100',\n 'hue-2' : '50',\n 'hue-3' : '300'\n }\n }\n },\n 'teal' : {\n primary : {\n name: 'fuse-blue',\n hues: {\n 'default': '900',\n 'hue-1' : '600',\n 'hue-2' : '500',\n 'hue-3' : 'A100'\n }\n },\n accent : {\n name: 'teal',\n hues: {\n 'default': '500',\n 'hue-1' : '400',\n 'hue-2' : '600',\n 'hue-3' : 'A100'\n }\n },\n warn : {name: 'deep-orange'},\n background: {\n name: 'grey',\n hues: {\n 'default': 'A100',\n 'hue-1' : '100',\n 'hue-2' : '50',\n 'hue-3' : '300'\n }\n }\n }\n };\n\n angular\n .module('app.core')\n .constant('fuseThemes', fuseThemes);\n})();\n(function () {\n 'use strict';\n\n var fusePalettes = [\n {\n name: 'fuse-blue',\n options: {\n '50': '#ebf1fa',\n '100': '#c2d4ef',\n '200': '#9ab8e5',\n '300': '#78a0dc',\n '400': '#5688d3',\n '500': '#3470ca',\n '600': '#2e62b1',\n '700': '#275498',\n '800': '#21467e',\n '900': '#1a3865',\n 'A100': '#c2d4ef',\n 'A200': '#9ab8e5',\n 'A400': '#5688d3',\n 'A700': '#275498',\n 'contrastDefaultColor': 'light',\n 'contrastDarkColors': '50 100 200 A100',\n 'contrastStrongLightColors': '300 400'\n }\n },\n {\n name: 'fuse-pale-blue',\n options: {\n '50': '#ececee',\n '100': '#c5c6cb',\n '200': '#9ea1a9',\n '300': '#7d818c',\n '400': '#5c616f',\n '500': '#3c4252',\n '600': '#353a48',\n '700': '#2d323e',\n '800': '#262933',\n '900': '#1e2129',\n 'A100': '#c5c6cb',\n 'A200': '#9ea1a9',\n 'A400': '#5c616f',\n 'A700': '#2d323e',\n 'contrastDefaultColor': 'light',\n 'contrastDarkColors': '50 100 200 A100',\n 'contrastStrongLightColors': '300 400'\n }\n }\n ];\n\n angular\n .module('app.core')\n .constant('fusePalettes', fusePalettes);\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .factory('fuseGenerator', fuseGeneratorService);\n\n /** @ngInject */\n function fuseGeneratorService($cookies, $log, fuseTheming)\n {\n // Storage for simplified themes object\n var themes = {};\n\n var service = {\n generate: generate,\n rgba : rgba\n };\n\n return service;\n\n //////////\n\n /**\n * Generate less variables for each theme from theme's\n * palette by using material color naming conventions\n */\n function generate()\n {\n var registeredThemes = fuseTheming.getRegisteredThemes();\n var registeredPalettes = fuseTheming.getRegisteredPalettes();\n\n // First, create a simplified object that stores\n // all registered themes and their colors\n\n // Iterate through registered themes\n angular.forEach(registeredThemes, function (registeredTheme)\n {\n themes[registeredTheme.name] = {};\n\n // Iterate through color types (primary, accent, warn & background)\n angular.forEach(registeredTheme.colors, function (colorType, colorTypeName)\n {\n themes[registeredTheme.name][colorTypeName] = {\n 'name' : colorType.name,\n 'levels': {\n 'default': {\n 'color' : rgba(registeredPalettes[colorType.name][colorType.hues.default].value),\n 'contrast1': rgba(registeredPalettes[colorType.name][colorType.hues.default].contrast, 1),\n 'contrast2': rgba(registeredPalettes[colorType.name][colorType.hues.default].contrast, 2),\n 'contrast3': rgba(registeredPalettes[colorType.name][colorType.hues.default].contrast, 3),\n 'contrast4': rgba(registeredPalettes[colorType.name][colorType.hues.default].contrast, 4)\n },\n 'hue1' : {\n 'color' : rgba(registeredPalettes[colorType.name][colorType.hues['hue-1']].value),\n 'contrast1': rgba(registeredPalettes[colorType.name][colorType.hues['hue-1']].contrast, 1),\n 'contrast2': rgba(registeredPalettes[colorType.name][colorType.hues['hue-1']].contrast, 2),\n 'contrast3': rgba(registeredPalettes[colorType.name][colorType.hues['hue-1']].contrast, 3),\n 'contrast4': rgba(registeredPalettes[colorType.name][colorType.hues['hue-1']].contrast, 4)\n },\n 'hue2' : {\n 'color' : rgba(registeredPalettes[colorType.name][colorType.hues['hue-2']].value),\n 'contrast1': rgba(registeredPalettes[colorType.name][colorType.hues['hue-2']].contrast, 1),\n 'contrast2': rgba(registeredPalettes[colorType.name][colorType.hues['hue-2']].contrast, 2),\n 'contrast3': rgba(registeredPalettes[colorType.name][colorType.hues['hue-2']].contrast, 3),\n 'contrast4': rgba(registeredPalettes[colorType.name][colorType.hues['hue-2']].contrast, 4)\n },\n 'hue3' : {\n 'color' : rgba(registeredPalettes[colorType.name][colorType.hues['hue-3']].value),\n 'contrast1': rgba(registeredPalettes[colorType.name][colorType.hues['hue-3']].contrast, 1),\n 'contrast2': rgba(registeredPalettes[colorType.name][colorType.hues['hue-3']].contrast, 2),\n 'contrast3': rgba(registeredPalettes[colorType.name][colorType.hues['hue-3']].contrast, 3),\n 'contrast4': rgba(registeredPalettes[colorType.name][colorType.hues['hue-3']].contrast, 4)\n }\n }\n };\n });\n });\n\n // Process themes one more time and then store them in the service for external use\n processAndStoreThemes(themes);\n\n // Iterate through simplified themes\n // object and create style variables\n var styleVars = {};\n\n // Iterate through registered themes\n angular.forEach(themes, function (theme, themeName)\n {\n styleVars = {};\n styleVars['@themeName'] = themeName;\n\n // Iterate through color types (primary, accent, warn & background)\n angular.forEach(theme, function (colorTypes, colorTypeName)\n {\n // Iterate through color levels (default, hue1, hue2 & hue3)\n angular.forEach(colorTypes.levels, function (colors, colorLevelName)\n {\n // Iterate through color name (color, contrast1, contrast2, contrast3 & contrast4)\n angular.forEach(colors, function (color, colorName)\n {\n styleVars['@' + colorTypeName + ucfirst(colorLevelName) + ucfirst(colorName)] = color;\n });\n });\n });\n\n // Render styles\n render(styleVars);\n });\n }\n\n // ---------------------------\n // INTERNAL HELPER FUNCTIONS\n // ---------------------------\n\n /**\n * Process and store themes for global use\n *\n * @param _themes\n */\n function processAndStoreThemes(_themes)\n {\n // Here we will go through every registered theme one more time\n // and try to simplify their objects as much as possible for\n // easier access to their properties.\n var themes = angular.copy(_themes);\n\n // Iterate through themes\n angular.forEach(themes, function (theme)\n {\n // Iterate through color types (primary, accent, warn & background)\n angular.forEach(theme, function (colorType, colorTypeName)\n {\n theme[colorTypeName] = colorType.levels;\n theme[colorTypeName].color = colorType.levels.default.color;\n theme[colorTypeName].contrast1 = colorType.levels.default.contrast1;\n theme[colorTypeName].contrast2 = colorType.levels.default.contrast2;\n theme[colorTypeName].contrast3 = colorType.levels.default.contrast3;\n theme[colorTypeName].contrast4 = colorType.levels.default.contrast4;\n delete theme[colorTypeName].default;\n });\n });\n\n // Store themes and set selected theme for the first time\n fuseTheming.setThemesList(themes);\n\n // Remember selected theme.\n var selectedTheme = $cookies.get('selectedTheme');\n\n if ( selectedTheme )\n {\n fuseTheming.setActiveTheme(selectedTheme);\n }\n else\n {\n fuseTheming.setActiveTheme('default');\n }\n }\n\n\n /**\n * Render css files\n *\n * @param styleVars\n */\n function render(styleVars)\n {\n var cssTemplate = '[md-theme=\"@themeName\"] a {\\n color: @accentDefaultColor;\\n}\\n\\n[md-theme=\"@themeName\"] .secondary-text,\\n[md-theme=\"@themeName\"] .icon {\\n color: @backgroundDefaultContrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .hint-text,\\n[md-theme=\"@themeName\"] .disabled-text {\\n color: @backgroundDefaultContrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .fade-text,\\n[md-theme=\"@themeName\"] .divider {\\n color: @backgroundDefaultContrast4;\\n}\\n\\n/* Primary */\\n[md-theme=\"@themeName\"] .md-primary-bg {\\n background-color: @primaryDefaultColor;\\n color: @primaryDefaultContrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg .secondary-text,\\n[md-theme=\"@themeName\"] .md-primary-bg .icon {\\n color: @primaryDefaultContrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg .hint-text,\\n[md-theme=\"@themeName\"] .md-primary-bg .disabled-text {\\n color: @primaryDefaultContrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg .fade-text,\\n[md-theme=\"@themeName\"] .md-primary-bg .divider {\\n color: @primaryDefaultContrast4;\\n}\\n\\n/* Primary, Hue-1 */\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 {\\n background-color: @primaryHue1Color;\\n color: @primaryHue1Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .secondary-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .icon {\\n color: @primaryHue1Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .hint-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .disabled-text {\\n color: @primaryHue1Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .fade-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-1 .divider {\\n color: @primaryHue1Contrast4;\\n}\\n\\n/* Primary, Hue-2 */\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 {\\n background-color: @primaryHue2Color;\\n color: @primaryHue2Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .secondary-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .icon {\\n color: @primaryHue2Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .hint-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .disabled-text {\\n color: @primaryHue2Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .fade-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-2 .divider {\\n color: @primaryHue2Contrast4;\\n}\\n\\n/* Primary, Hue-3 */\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 {\\n background-color: @primaryHue3Color;\\n color: @primaryHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .secondary-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .icon {\\n color: @primaryHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .hint-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .disabled-text {\\n color: @primaryHue3Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .fade-text,\\n[md-theme=\"@themeName\"] .md-primary-bg.md-hue-3 .divider {\\n color: @primaryHue3Contrast4;\\n}\\n\\n/* Primary foreground */\\n[md-theme=\"@themeName\"] .md-primary-fg {\\n color: @primaryDefaultColor !important;\\n}\\n\\n/* Primary foreground, Hue-1 */\\n[md-theme=\"@themeName\"] .md-primary-fg.md-hue-1 {\\n color: @primaryHue1Color !important;\\n}\\n\\n/* Primary foreground, Hue-2 */\\n[md-theme=\"@themeName\"] .md-primary-fg.md-hue-2 {\\n color: @primaryHue2Color !important;\\n}\\n\\n/* Primary foreground, Hue-3 */\\n[md-theme=\"@themeName\"] .md-primary-fg.md-hue-3 {\\n color: @primaryHue3Color !important;\\n}\\n\\n\\n/* Accent */\\n[md-theme=\"@themeName\"] .md-accent-bg {\\n background-color: @accentDefaultColor;\\n color: @accentDefaultContrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg .secondary-text,\\n[md-theme=\"@themeName\"] .md-accent-bg .icon {\\n color: @accentDefaultContrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg .hint-text,\\n[md-theme=\"@themeName\"] .md-accent-bg .disabled-text {\\n color: @accentDefaultContrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg .fade-text,\\n[md-theme=\"@themeName\"] .md-accent-bg .divider {\\n color: @accentDefaultContrast4;\\n}\\n\\n/* Accent, Hue-1 */\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 {\\n background-color: @accentHue1Color;\\n color: @accentHue1Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .secondary-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .icon {\\n color: @accentHue1Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .hint-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .disabled-text {\\n color: @accentHue1Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .fade-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-1 .divider {\\n color: @accentHue1Contrast4;\\n}\\n\\n/* Accent, Hue-2 */\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 {\\n background-color: @accentHue2Color;\\n color: @accentHue2Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .secondary-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .icon {\\n color: @accentHue2Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .hint-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .disabled-text {\\n color: @accentHue2Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .fade-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-2 .divider {\\n color: @accentHue2Contrast4;\\n}\\n\\n/* Accent, Hue-3 */\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 {\\n background-color: @accentHue3Color;\\n color: @accentHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .secondary-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .icon {\\n color: @accentHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .hint-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .disabled-text {\\n color: @accentHue3Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .fade-text,\\n[md-theme=\"@themeName\"] .md-accent-bg.md-hue-3 .divider {\\n color: @accentHue3Contrast4;\\n}\\n\\n/* Accent foreground */\\n[md-theme=\"@themeName\"] .md-accent-fg {\\n color: @accentDefaultColor !important;\\n}\\n\\n/* Accent foreground, Hue-1 */\\n[md-theme=\"@themeName\"] .md-accent-fg.md-hue-1 {\\n color: @accentHue1Color !important;\\n}\\n\\n/* Accent foreground, Hue-2 */\\n[md-theme=\"@themeName\"] .md-accent-fg.md-hue-2 {\\n color: @accentHue2Color !important;\\n}\\n\\n/* Accent foreground, Hue-3 */\\n[md-theme=\"@themeName\"] .md-accent-fg.md-hue-3 {\\n color: @accentHue3Color !important;\\n}\\n\\n\\n/* Warn */\\n[md-theme=\"@themeName\"] .md-warn-bg {\\n background-color: @warnDefaultColor;\\n color: @warnDefaultContrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg .secondary-text,\\n[md-theme=\"@themeName\"] .md-warn-bg .icon {\\n color: @warnDefaultContrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg .hint-text,\\n[md-theme=\"@themeName\"] .md-warn-bg .disabled-text {\\n color: @warnDefaultContrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg .fade-text,\\n[md-theme=\"@themeName\"] .md-warn-bg .divider {\\n color: @warnDefaultContrast4;\\n}\\n\\n/* Warn, Hue-1 */\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 {\\n background-color: @warnHue1Color;\\n color: @warnHue1Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .secondary-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .icon {\\n color: @warnHue1Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .hint-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .disabled-text {\\n color: @warnHue1Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .fade-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-1 .divider {\\n color: @warnHue1Contrast4;\\n}\\n\\n/* Warn, Hue-2 */\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 {\\n background-color: @warnHue2Color;\\n color: @warnHue2Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .secondary-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .icon {\\n color: @warnHue2Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .hint-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .disabled-text {\\n color: @warnHue2Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .fade-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-2 .divider {\\n color: @warnHue2Contrast4;\\n}\\n\\n/* Warn, Hue-3 */\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 {\\n background-color: @warnHue3Color;\\n color: @warnHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .secondary-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .icon {\\n color: @warnHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .hint-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .disabled-text {\\n color: @warnHue3Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .fade-text,\\n[md-theme=\"@themeName\"] .md-warn-bg.md-hue-3 .divider {\\n color: @warnHue3Contrast4;\\n}\\n\\n/* Warn foreground */\\n[md-theme=\"@themeName\"] .md-warn-fg {\\n color: @warnDefaultColor !important;\\n}\\n\\n/* Warn foreground, Hue-1 */\\n[md-theme=\"@themeName\"] .md-warn-fg.md-hue-1 {\\n color: @warnHue1Color !important;\\n}\\n\\n/* Warn foreground, Hue-2 */\\n[md-theme=\"@themeName\"] .md-warn-fg.md-hue-2 {\\n color: @warnHue2Color !important;\\n}\\n\\n/* Warn foreground, Hue-3 */\\n[md-theme=\"@themeName\"] .md-warn-fg.md-hue-3 {\\n color: @warnHue3Color !important;\\n}\\n\\n/* Background */\\n[md-theme=\"@themeName\"] .md-background-bg {\\n background-color: @backgroundDefaultColor;\\n color: @backgroundDefaultContrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg .secondary-text,\\n[md-theme=\"@themeName\"] .md-background-bg .icon {\\n color: @backgroundDefaultContrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg .hint-text,\\n[md-theme=\"@themeName\"] .md-background-bg .disabled-text {\\n color: @backgroundDefaultContrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg .fade-text,\\n[md-theme=\"@themeName\"] .md-background-bg .divider {\\n color: @backgroundDefaultContrast4;\\n}\\n\\n/* Background, Hue-1 */\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 {\\n background-color: @backgroundHue1Color;\\n color: @backgroundHue1Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .secondary-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .icon {\\n color: @backgroundHue1Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .hint-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .disabled-text {\\n color: @backgroundHue1Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .fade-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-1 .divider {\\n color: @backgroundHue1Contrast4;\\n}\\n\\n/* Background, Hue-2 */\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 {\\n background-color: @backgroundHue2Color;\\n color: @backgroundHue2Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .secondary-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .icon {\\n color: @backgroundHue2Contrast2;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .hint-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .disabled-text {\\n color: @backgroundHue2Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .fade-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-2 .divider {\\n color: @backgroundHue2Contrast4;\\n}\\n\\n/* Background, Hue-3 */\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 {\\n background-color: @backgroundHue3Color;\\n color: @backgroundHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .secondary-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .icon {\\n color: @backgroundHue3Contrast1;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .hint-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .disabled-text {\\n color: @backgroundHue3Contrast3;\\n}\\n\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .fade-text,\\n[md-theme=\"@themeName\"] .md-background-bg.md-hue-3 .divider {\\n color: @backgroundHue3Contrast4;\\n}\\n\\n/* Background foreground */\\n[md-theme=\"@themeName\"] .md-background-fg {\\n color: @backgroundDefaultColor !important;\\n}\\n\\n/* Background foreground, Hue-1 */\\n[md-theme=\"@themeName\"] .md-background-fg.md-hue-1 {\\n color: @backgroundHue1Color !important;\\n}\\n\\n/* Background foreground, Hue-2 */\\n[md-theme=\"@themeName\"] .md-background-fg.md-hue-2 {\\n color: @backgroundHue2Color !important;\\n}\\n\\n/* Background foreground, Hue-3 */\\n[md-theme=\"@themeName\"] .md-background-fg.md-hue-3 {\\n color: @backgroundHue3Color !important;\\n}';\n\n var regex = new RegExp(Object.keys(styleVars).join('|'), 'gi');\n var css = cssTemplate.replace(regex, function (matched)\n {\n return styleVars[matched];\n });\n\n var headEl = angular.element('head');\n var styleEl = angular.element('');\n styleEl.html(css);\n headEl.append(styleEl);\n }\n\n /**\n * Convert color array to rgb/rgba\n * Also apply contrasts if needed\n *\n * @param color\n * @param _contrastLevel\n * @returns {string}\n */\n function rgba(color, _contrastLevel)\n {\n var contrastLevel = _contrastLevel || false;\n\n // Convert 255,255,255,0.XX to 255,255,255\n // According to Google's Material design specs, white primary\n // text must have opacity of 1 and we will fix that here\n // because Angular Material doesn't care about that spec\n if ( color.length === 4 && color[0] === 255 && color[1] === 255 && color[2] === 255 )\n {\n color.splice(3, 4);\n }\n\n // If contrast level provided, apply it to the current color\n if ( contrastLevel )\n {\n color = applyContrast(color, contrastLevel);\n }\n\n // Convert color array to color string (rgb/rgba)\n if ( color.length === 3 )\n {\n return 'rgb(' + color.join(',') + ')';\n }\n else if ( color.length === 4 )\n {\n return 'rgba(' + color.join(',') + ')';\n }\n else\n {\n $log.error('Invalid number of arguments supplied in the color array: ' + color.length + '\\n' + 'The array must have 3 or 4 colors.');\n }\n }\n\n /**\n * Apply given contrast level to the given color\n *\n * @param color\n * @param contrastLevel\n */\n function applyContrast(color, contrastLevel)\n {\n var contrastLevels = {\n 'white': {\n '1': '1',\n '2': '0.7',\n '3': '0.3',\n '4': '0.12'\n },\n 'black': {\n '1': '0.87',\n '2': '0.54',\n '3': '0.26',\n '4': '0.12'\n }\n };\n\n // If white\n if ( color[0] === 255 && color[1] === 255 && color[2] === 255 )\n {\n color[3] = contrastLevels.white[contrastLevel];\n }\n // If black\n else if ( color[0] === 0 && color[1] === 0, color[2] === 0 )\n {\n color[3] = contrastLevels.black[contrastLevel];\n }\n\n return color;\n }\n\n /**\n * Uppercase first\n */\n function ucfirst(string)\n {\n return string.charAt(0).toUpperCase() + string.slice(1);\n }\n }\n\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .controller('MsThemeOptionsController', MsThemeOptionsController)\n .directive('msThemeOptions', msThemeOptions);\n\n /** @ngInject */\n function MsThemeOptionsController($cookies, fuseTheming)\n {\n var vm = this;\n\n // Data\n vm.themes = fuseTheming.themes;\n vm.layoutMode = 'wide';\n vm.layoutStyle = $cookies.get('layoutStyle') || 'verticalNavigation';\n\n // Methods\n vm.setActiveTheme = setActiveTheme;\n vm.updateLayoutMode = updateLayoutMode;\n vm.updateLayoutStyle = updateLayoutStyle;\n\n //////////\n\n /**\n * Set active theme\n *\n * @param themeName\n */\n function setActiveTheme(themeName)\n {\n // Set active theme\n fuseTheming.setActiveTheme(themeName);\n }\n\n /**\n * Update layout mode\n */\n function updateLayoutMode()\n {\n var bodyEl = angular.element('body');\n\n // Update class on body element\n bodyEl.toggleClass('boxed', (vm.layoutMode === 'boxed'));\n }\n\n /**\n * Update layout style\n */\n function updateLayoutStyle()\n {\n // Update the cookie\n $cookies.put('layoutStyle', vm.layoutStyle);\n\n // Reload the page to apply the changes\n location.reload();\n }\n }\n\n /** @ngInject */\n function msThemeOptions()\n {\n return {\n restrict : 'E',\n scope : {\n panelOpen: '=?'\n },\n controller : 'MsThemeOptionsController as vm',\n templateUrl: 'app/core/theme-options/theme-options.html',\n compile : function (tElement)\n {\n tElement.addClass('ms-theme-options');\n\n return function postLink(scope, iElement)\n {\n var bodyEl = angular.element('body'),\n backdropEl = angular.element('
');\n\n // Panel open status\n scope.panelOpen = scope.panelOpen || false;\n\n /**\n * Toggle options panel\n */\n function toggleOptionsPanel()\n {\n if ( scope.panelOpen )\n {\n closeOptionsPanel();\n }\n else\n {\n openOptionsPanel();\n }\n }\n\n function openOptionsPanel()\n {\n // Set panelOpen status\n scope.panelOpen = true;\n\n // Add open class\n iElement.addClass('open');\n\n // Append the backdrop\n bodyEl.append(backdropEl);\n\n // Register the event\n backdropEl.on('click touch', closeOptionsPanel);\n }\n\n /**\n * Close options panel\n */\n function closeOptionsPanel()\n {\n // Set panelOpen status\n scope.panelOpen = false;\n\n // Remove open class\n iElement.removeClass('open');\n\n // De-register the event\n backdropEl.off('click touch', closeOptionsPanel);\n\n // Remove the backdrop\n backdropEl.remove();\n }\n\n // Expose the toggle function\n scope.toggleOptionsPanel = toggleOptionsPanel;\n };\n }\n };\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .factory('msUtils', msUtils);\n\n /** @ngInject */\n function msUtils($window)\n {\n // Private variables\n var mobileDetect = new MobileDetect($window.navigator.userAgent),\n browserInfo = null;\n\n var service = {\n exists : exists,\n detectBrowser: detectBrowser,\n guidGenerator: guidGenerator,\n isMobile : isMobile,\n toggleInArray: toggleInArray\n };\n\n return service;\n\n //////////\n\n /**\n * Check if item exists in a list\n *\n * @param item\n * @param list\n * @returns {boolean}\n */\n function exists(item, list)\n {\n return list.indexOf(item) > -1;\n }\n\n /**\n * Returns browser information\n * from user agent data\n *\n * Found at http://www.quirksmode.org/js/detect.html\n * but modified and updated to fit for our needs\n */\n function detectBrowser()\n {\n // If we already tested, do not test again\n if ( browserInfo )\n {\n return browserInfo;\n }\n\n var browserData = [\n {\n string : $window.navigator.userAgent,\n subString : 'Edge',\n versionSearch: 'Edge',\n identity : 'Edge'\n },\n {\n string : $window.navigator.userAgent,\n subString: 'Chrome',\n identity : 'Chrome'\n },\n {\n string : $window.navigator.userAgent,\n subString : 'OmniWeb',\n versionSearch: 'OmniWeb/',\n identity : 'OmniWeb'\n },\n {\n string : $window.navigator.vendor,\n subString : 'Apple',\n versionSearch: 'Version',\n identity : 'Safari'\n },\n {\n prop : $window.opera,\n identity: 'Opera'\n },\n {\n string : $window.navigator.vendor,\n subString: 'iCab',\n identity : 'iCab'\n },\n {\n string : $window.navigator.vendor,\n subString: 'KDE',\n identity : 'Konqueror'\n },\n {\n string : $window.navigator.userAgent,\n subString: 'Firefox',\n identity : 'Firefox'\n },\n {\n string : $window.navigator.vendor,\n subString: 'Camino',\n identity : 'Camino'\n },\n {\n string : $window.navigator.userAgent,\n subString: 'Netscape',\n identity : 'Netscape'\n },\n {\n string : $window.navigator.userAgent,\n subString : 'MSIE',\n identity : 'Explorer',\n versionSearch: 'MSIE'\n },\n {\n string : $window.navigator.userAgent,\n subString : 'Trident/7',\n identity : 'Explorer',\n versionSearch: 'rv'\n },\n {\n string : $window.navigator.userAgent,\n subString : 'Gecko',\n identity : 'Mozilla',\n versionSearch: 'rv'\n },\n {\n string : $window.navigator.userAgent,\n subString : 'Mozilla',\n identity : 'Netscape',\n versionSearch: 'Mozilla'\n }\n ];\n\n var osData = [\n {\n string : $window.navigator.platform,\n subString: 'Win',\n identity : 'Windows'\n },\n {\n string : $window.navigator.platform,\n subString: 'Mac',\n identity : 'Mac'\n },\n {\n string : $window.navigator.platform,\n subString: 'Linux',\n identity : 'Linux'\n },\n {\n string : $window.navigator.platform,\n subString: 'iPhone',\n identity : 'iPhone'\n },\n {\n string : $window.navigator.platform,\n subString: 'iPod',\n identity : 'iPod'\n },\n {\n string : $window.navigator.platform,\n subString: 'iPad',\n identity : 'iPad'\n },\n {\n string : $window.navigator.platform,\n subString: 'Android',\n identity : 'Android'\n }\n ];\n\n var versionSearchString = '';\n\n function searchString(data)\n {\n for ( var i = 0; i < data.length; i++ )\n {\n var dataString = data[i].string;\n var dataProp = data[i].prop;\n\n versionSearchString = data[i].versionSearch || data[i].identity;\n\n if ( dataString )\n {\n if ( dataString.indexOf(data[i].subString) !== -1 )\n {\n return data[i].identity;\n\n }\n }\n else if ( dataProp )\n {\n return data[i].identity;\n }\n }\n }\n\n function searchVersion(dataString)\n {\n var index = dataString.indexOf(versionSearchString);\n\n if ( index === -1 )\n {\n return;\n }\n\n return parseInt(dataString.substring(index + versionSearchString.length + 1));\n }\n\n var browser = searchString(browserData) || 'unknown-browser';\n var version = searchVersion($window.navigator.userAgent) || searchVersion($window.navigator.appVersion) || 'unknown-version';\n var os = searchString(osData) || 'unknown-os';\n\n // Prepare and store the object\n browser = browser.toLowerCase();\n version = browser + '-' + version;\n os = os.toLowerCase();\n\n browserInfo = {\n browser: browser,\n version: version,\n os : os\n };\n\n return browserInfo;\n }\n\n /**\n * Generates a globally unique id\n *\n * @returns {*}\n */\n function guidGenerator()\n {\n var S4 = function ()\n {\n return (((1 + Math.random()) * 0x10000) || 0).toString(16).substring(1);\n };\n return (S4() + S4() + S4() + S4() + S4() + S4());\n }\n\n /**\n * Return if current device is a\n * mobile device or not\n */\n function isMobile()\n {\n return mobileDetect.mobile();\n }\n\n /**\n * Toggle in array (push or splice)\n *\n * @param item\n * @param array\n */\n function toggleInArray(item, array)\n {\n if ( array.indexOf(item) === -1 )\n {\n array.push(item);\n }\n else\n {\n array.splice(array.indexOf(item), 1);\n }\n }\n }\n}());\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .filter('filterByTags', filterByTags)\n .filter('filterSingleByTags', filterSingleByTags);\n\n /** @ngInject */\n function filterByTags()\n {\n return function (items, tags)\n {\n if ( items.length === 0 || tags.length === 0 )\n {\n return items;\n }\n\n var filtered = [];\n\n items.forEach(function (item)\n {\n var match = tags.every(function (tag)\n {\n var tagExists = false;\n\n item.tags.forEach(function (itemTag)\n {\n if ( itemTag.name === tag.name )\n {\n tagExists = true;\n return;\n }\n });\n\n return tagExists;\n });\n\n if ( match )\n {\n filtered.push(item);\n }\n });\n\n return filtered;\n };\n }\n\n /** @ngInject */\n function filterSingleByTags()\n {\n return function (itemTags, tags)\n {\n if ( itemTags.length === 0 || tags.length === 0 )\n {\n return;\n }\n\n if ( itemTags.length < tags.length )\n {\n return [];\n }\n\n var filtered = [];\n\n var match = tags.every(function (tag)\n {\n var tagExists = false;\n\n itemTags.forEach(function (itemTag)\n {\n if ( itemTag.name === tag.name )\n {\n tagExists = true;\n return;\n }\n });\n\n return tagExists;\n });\n\n if ( match )\n {\n filtered.push(itemTags);\n }\n\n return filtered;\n };\n }\n\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .filter('toTrusted', toTrustedFilter)\n .filter('htmlToPlaintext', htmlToPlainTextFilter)\n .filter('nospace', nospaceFilter)\n .filter('humanizeDoc', humanizeDocFilter);\n\n /** @ngInject */\n function toTrustedFilter($sce)\n {\n return function (value)\n {\n return $sce.trustAsHtml(value);\n };\n }\n\n /** @ngInject */\n function htmlToPlainTextFilter()\n {\n return function (text)\n {\n return String(text).replace(/<[^>]+>/gm, '');\n };\n }\n\n /** @ngInject */\n function nospaceFilter()\n {\n return function (value)\n {\n return (!value) ? '' : value.replace(/ /g, '');\n };\n }\n\n /** @ngInject */\n function humanizeDocFilter()\n {\n return function (doc)\n {\n if ( !doc )\n {\n return;\n }\n if ( doc.type === 'directive' )\n {\n return doc.name.replace(/([A-Z])/g, function ($1)\n {\n return '-' + $1.toLowerCase();\n });\n }\n return doc.label || doc.name;\n };\n }\n\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .directive('hljs', hljsDirective);\n\n /** @ngInject */\n function hljsDirective($timeout, $q, $interpolate)\n {\n return {\n restrict: 'EA',\n compile : function (tElement, tAttrs)\n {\n var code;\n //No attribute? code is the content\n if ( !tAttrs.code )\n {\n code = tElement.html();\n tElement.empty();\n }\n\n return function (scope, iElement, iAttrs)\n {\n if ( iAttrs.code )\n {\n // Attribute? code is the evaluation\n code = scope.$eval(iAttrs.code);\n }\n var shouldInterpolate = scope.$eval(iAttrs.shouldInterpolate);\n\n $q.when(code).then(function (code)\n {\n if ( code )\n {\n if ( shouldInterpolate )\n {\n code = $interpolate(code)(scope);\n }\n\n var contentParent = angular.element(\n '
'\n );\n\n iElement.append(contentParent);\n\n // Defer highlighting 1-frame to prevent GA interference...\n $timeout(function ()\n {\n render(code, contentParent);\n }, 34, false);\n }\n });\n\n function render(contents, parent)\n {\n var codeElement = parent.find('code');\n var lines = contents.split('\\n');\n\n // Remove empty lines\n lines = lines.filter(function (line)\n {\n return line.trim().length;\n });\n\n // Make it so each line starts at 0 whitespace\n var firstLineWhitespace = lines[0].match(/^\\s*/)[0];\n var startingWhitespaceRegex = new RegExp('^' + firstLineWhitespace);\n\n lines = lines.map(function (line)\n {\n return line\n .replace(startingWhitespaceRegex, '')\n .replace(/\\s+$/, '');\n });\n\n var highlightedCode = hljs.highlight(iAttrs.language || iAttrs.lang, lines.join('\\n'), true);\n highlightedCode.value = highlightedCode.value\n .replace(/=\"\"<\\/span>/gi, '')\n .replace('', '')\n .replace('', '');\n codeElement.append(highlightedCode.value).addClass('highlight');\n }\n };\n }\n };\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .provider('fuseConfig', fuseConfigProvider);\n\n /** @ngInject */\n function fuseConfigProvider()\n {\n // Default configuration\n var fuseConfiguration = {\n 'disableCustomScrollbars' : false,\n 'disableMdInkRippleOnMobile' : true,\n 'disableCustomScrollbarsOnMobile': false\n };\n\n // Methods\n this.config = config;\n\n //////////\n\n /**\n * Extend default configuration with the given one\n *\n * @param configuration\n */\n function config(configuration)\n {\n fuseConfiguration = angular.extend({}, fuseConfiguration, configuration);\n }\n\n /**\n * Service\n */\n this.$get = function ()\n {\n var service = {\n getConfig: getConfig,\n setConfig: setConfig\n };\n\n return service;\n\n //////////\n\n /**\n * Returns a config value\n */\n function getConfig(configName)\n {\n if ( angular.isUndefined(fuseConfiguration[configName]) )\n {\n return false;\n }\n\n return fuseConfiguration[configName];\n }\n\n /**\n * Creates or updates config object\n *\n * @param configName\n * @param configValue\n */\n function setConfig(configName, configValue)\n {\n fuseConfiguration[configName] = configValue;\n }\n };\n }\n\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.toolbar', [])\n .config(config);\n\n /** @ngInject */\n function config($translatePartialLoaderProvider)\n {\n $translatePartialLoaderProvider.addPart('app/toolbar');\n }\n})();\n\nvar fuse;\n(function (fuse) {\n var ToolbarController = (function () {\n function ToolbarController($rootScope, $mdSidenav, $translate, $mdToast, $cookies, navigationService) {\n this.$rootScope = $rootScope;\n this.$mdSidenav = $mdSidenav;\n this.$translate = $translate;\n this.$mdToast = $mdToast;\n this.$cookies = $cookies;\n this.navigationService = navigationService;\n this.bodyEl = angular.element('body');\n $rootScope.global = {\n search: ''\n };\n }\n ToolbarController.prototype.toggleSidenav = function (sidenavId) {\n this.$mdSidenav(sidenavId).toggle();\n };\n ToolbarController.prototype.toggleHorizontalMobileMenu = function () {\n this.bodyEl.toggleClass('ms-navigation-horizontal-mobile-menu-active');\n };\n ToolbarController.prototype.goto = function (item) {\n console.log('click!');\n };\n ToolbarController.prototype.gotoHome = function () {\n //this.$cookies.put('noPopup', 'false');\n this.navigationService.toState('app.home', {});\n };\n ToolbarController.$inject = ['$rootScope', '$mdSidenav', '$translate', '$mdToast', '$cookies', 'navigationService'];\n return ToolbarController;\n })();\n fuse.ToolbarController = ToolbarController;\n angular\n .module('app.toolbar')\n .controller('ToolbarController', ToolbarController);\n})(fuse || (fuse = {}));\n\n(function () {\n 'use strict';\n\n angular\n .module('app.quickPanel')\n .controller('QuickPanelController', QuickPanelController);\n\n /** @ngInject */\n function QuickPanelController(api) {\n var vm = this;\n\n // Data\n vm.date = new Date();\n vm.settings = {\n notify: true,\n cloud: false,\n retro: true\n };\n\n api.quickPanel.activities.get({}, function (response) {\n vm.activities = response.data;\n });\n\n api.quickPanel.events.get({}, function (response) {\n vm.events = response.data;\n });\n\n api.quickPanel.notes.get({}, function (response) {\n vm.notes = response.data;\n });\n\n // Methods\n\n //////////\n }\n\n})();\nvar backoffice;\n(function (backoffice) {\n var States = (function () {\n function States() {\n }\n States.SAMPLE = 'app.sample';\n States.MANAGEMENT_SEARCH = 'app.management_search';\n States.MANAGEMENT_USER = 'app.management_user';\n States.MANAGEMENT_ADDUSER = 'app.management_adduser';\n States.DASHBOARD = 'app.dashboard';\n States.COMPANY_BUSINESSHOUR = 'app.company_businesshour';\n States.COMPANY_CONTACTINFO = 'app.company_contactinfo';\n States.COMPANY_LOCATION = 'app.company_location';\n States.CMS_BLOCK = 'app.cms_block';\n States.CMS_IMAGE = 'app.cms_image';\n States.INIT = 'app.init';\n States.TABLE_SETTINGS = 'app.settings_table';\n States.FORM_SETTINGS = 'app.settings_form';\n return States;\n })();\n backoffice.States = States;\n var Routes = (function () {\n function Routes() {\n }\n Routes.SAMPLE = '/sample';\n Routes.MANAGEMENT_SEARCH = '/management/search';\n Routes.MANAGEMENT_USER = '/management/user';\n Routes.MANAGEMENT_ADDUSER = '/management/adduser';\n Routes.DASHBOARD = '/dashboard';\n Routes.COMPANY_BUSINESSHOUR = '/company/businesshour';\n Routes.COMPANY_CONTACTINFO = '/company/contactinfo';\n Routes.COMPANY_LOCATION = '/company/location';\n Routes.CMS_BLOCK = '/cms/block';\n Routes.CMS_IMAGE = '/cms/image';\n Routes.INIT = '/init/:id';\n Routes.TABLE_SETTINGS = '/settings/table/:id/:reference';\n Routes.FORM_SETTINGS = '/settings/form/:id/:reference';\n return Routes;\n })();\n backoffice.Routes = Routes;\n})(backoffice || (backoffice = {}));\n\nvar pancake;\n(function (pancake) {\n angular\n .module('app.pancake')\n .config(function (CacheFactoryProvider) {\n angular.extend(CacheFactoryProvider.defaults, { maxAge: 15 * 60 * 1000 });\n });\n})(pancake || (pancake = {}));\n\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.navigation', [])\n .config(config);\n\n /** @ngInject */\n function config($translatePartialLoaderProvider)\n {\n $translatePartialLoaderProvider.addPart('app/navigation');\n }\n\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.navigation')\n .controller('NavigationController', NavigationController);\n\n /** @ngInject */\n function NavigationController($scope)\n {\n var vm = this;\n\n // Data\n vm.bodyEl = angular.element('body');\n vm.folded = false;\n vm.msScrollOptions = {\n suppressScrollX: true\n };\n\n // Methods\n vm.toggleMsNavigationFolded = toggleMsNavigationFolded;\n\n //////////\n\n /**\n * Toggle folded status\n */\n function toggleMsNavigationFolded()\n {\n vm.folded = !vm.folded;\n }\n\n // Close the mobile menu on $stateChangeSuccess\n $scope.$on('$stateChangeSuccess', function ()\n {\n vm.bodyEl.removeClass('ms-navigation-horizontal-mobile-menu-active')\n })\n }\n\n})();\n(function ()\n{\n 'use strict';\n\n /**\n * Main module of the Fuse\n */\n angular\n .module('fuse', [\n\n // Core\n 'app.core',\n\n // Framework\n 'app.pancake',\n\n // Navigation\n 'app.navigation',\n\n // Toolbar\n 'app.toolbar',\n\n // Quick panel\n 'app.quickPanel',\n\n // Pages\n 'app.home',\n 'app.scrumrow'\n ]);\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('fuse')\n .controller('MainController', MainController);\n\n /** @ngInject */\n function MainController($scope, $rootScope)\n {\n // Data\n\n //////////\n\n // Remove the splash screen\n $scope.$on('$viewContentAnimationEnded', function (event)\n {\n if ( event.targetScope.$id === $scope.$id )\n {\n $rootScope.$broadcast('msSplashScreen::remove');\n }\n });\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .run(runBlock);\n\n /** @ngInject */\n function runBlock(msUtils, fuseGenerator, fuseConfig)\n {\n /**\n * Generate extra classes based on registered themes so we\n * can use same colors with non-angular-material elements\n */\n fuseGenerator.generate();\n\n /**\n * Disable md-ink-ripple effects on mobile\n * if 'disableMdInkRippleOnMobile' config enabled\n */\n if ( fuseConfig.getConfig('disableMdInkRippleOnMobile') && msUtils.isMobile() )\n {\n var bodyEl = angular.element('body');\n bodyEl.attr('md-no-ink', true);\n }\n\n /**\n * Put isMobile() to the html as a class\n */\n if ( msUtils.isMobile() )\n {\n angular.element('html').addClass('is-mobile');\n }\n\n /**\n * Put browser information to the html as a class\n */\n var browserInfo = msUtils.detectBrowser();\n if ( browserInfo )\n {\n var htmlClass = browserInfo.browser + ' ' + browserInfo.version + ' ' + browserInfo.os;\n angular.element('html').addClass(htmlClass);\n }\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('app.core')\n .config(config);\n\n /** @ngInject */\n function config($ariaProvider, $logProvider, msScrollConfigProvider, $translateProvider, $provide, fuseConfigProvider)\n {\n // Enable debug logging\n $logProvider.debugEnabled(true);\n\n // toastr configuration\n toastr.options.timeOut = 3000;\n toastr.options.positionClass = 'toast-top-right';\n toastr.options.preventDuplicates = true;\n toastr.options.progressBar = true;\n\n // angular-translate configuration\n $translateProvider.useLoader('$translatePartialLoader', {\n urlTemplate: '{part}/i18n/{lang}.json'\n });\n $translateProvider.preferredLanguage('nl');\n $translateProvider.useSanitizeValueStrategy('sanitize');\n\n /*eslint-disable */\n\n // ng-aria configuration\n $ariaProvider.config({\n tabindex: false\n });\n\n // Fuse theme configurations\n fuseConfigProvider.config({\n 'disableCustomScrollbars' : false,\n 'disableCustomScrollbarsOnMobile': false,\n 'disableMdInkRippleOnMobile' : true\n });\n\n // msScroll configuration\n msScrollConfigProvider.config({\n wheelPropagation: true\n });\n\n /*eslint-enable */\n }\n})();\n(function () {\n 'use strict';\n\n angular\n .module('fuse')\n .run(runBlock);\n\n /** @ngInject */\n function runBlock($rootScope, $timeout, $state) {\n // Activate loading indicator\n var stateChangeStartEvent = $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {\n $rootScope.loadingProgress = true;\n });\n\n // De-activate loading indicator\n var stateChangeSuccessEvent = $rootScope.$on('$stateChangeSuccess', function () {\n $timeout(function () {\n $rootScope.loadingProgress = false;\n });\n });\n\n // Store state in the root scope for easy access\n $rootScope.state = $state;\n\n // Cleanup\n $rootScope.$on('$destroy', function () {\n stateChangeStartEvent();\n stateChangeSuccessEvent();\n })\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('fuse')\n .config(routeConfig);\n\n /** @ngInject */\n function routeConfig($stateProvider, $urlRouterProvider, $locationProvider)\n {\n $locationProvider.html5Mode(true);\n\n $urlRouterProvider.otherwise('/home');\n\n var $cookies;\n angular.injector(['ngCookies']).invoke([\n '$cookies', function (_$cookies)\n {\n $cookies = _$cookies;\n }\n ]);\n\n var layoutStyle = $cookies.get('layoutStyle') || 'websiteWithFeaturing';\n\n var layouts = {\n verticalNavigation : {\n main : 'app/core/layouts/vertical-navigation.html',\n toolbar : 'app/toolbar/layouts/vertical-navigation/toolbar.html',\n navigation: 'app/navigation/layouts/vertical-navigation/navigation.html'\n },\n horizontalNavigation: {\n main : 'app/core/layouts/horizontal-navigation.html',\n toolbar : 'app/toolbar/layouts/horizontal-navigation/toolbar.html',\n navigation: 'app/navigation/layouts/horizontal-navigation/navigation.html'\n },\n contentOnly : {\n main : 'app/core/layouts/content-only.html',\n toolbar : '',\n navigation: ''\n },\n contentWithToolbar : {\n main : 'app/core/layouts/content-with-toolbar.html',\n toolbar : 'app/toolbar/layouts/content-with-toolbar/toolbar.html',\n navigation: ''\n },\n websiteWithFeaturing: {\n main : 'app/core/layouts/website-with-featuring.html',\n toolbar : 'app/toolbar/layouts/website/toolbar.html',\n navigation: 'app/navigation/layouts/horizontal-navigation/navigation.html'\n },\n };\n\n\n // State definitions\n $stateProvider\n .state('app', {\n abstract: true,\n views : {\n 'main@' : {\n templateUrl: layouts[layoutStyle].main,\n controller : 'MainController as vm'\n },\n 'toolbar@app' : {\n templateUrl: layouts[layoutStyle].toolbar,\n controller : 'ToolbarController as vm'\n },\n 'navigation@app': {\n templateUrl: layouts[layoutStyle].navigation,\n controller : 'NavigationController as vm'\n },\n 'quickPanel@app': {\n templateUrl: 'app/quick-panel/quick-panel.html',\n controller : 'QuickPanelController as vm'\n }\n }\n });\n // .state('login', {\n // views : {\n // 'main@' : {\n // templateUrl: 'app/core/layouts/content-only.html',\n // controller : 'MainController as vm'\n // },\n // 'content@login': {\n // templateUrl: 'app/main/auth/login/login.html',\n // controller : 'LoginController as vm'\n // }\n // }\n // });\n }\n\n})();\n\n(function ()\n{\n 'use strict';\n\n angular\n .module('fuse')\n .controller('IndexController', IndexController);\n\n /** @ngInject */\n function IndexController(fuseTheming)\n {\n var vm = this;\n\n // Data\n vm.themes = fuseTheming.themes;\n\n //////////\n }\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('fuse');\n})();\n\n(function ()\n{\n 'use strict';\n\n angular\n .module('fuse')\n .config(config);\n\n /** @ngInject */\n function config()\n {\n // Put your custom configurations here\n }\n\n})();\n(function ()\n{\n 'use strict';\n\n angular\n .module('fuse')\n .factory('api', apiService);\n\n /** @ngInject */\n function apiService($resource)\n {\n /**\n * You can use this service to define your API urls. The \"api\" service\n * is designed to work in parallel with \"apiResolver\" service which you can\n * find in the \"app/core/services/api-resolver.service.js\" file.\n *\n * You can structure your API urls whatever the way you want to structure them.\n * You can either use very simple definitions, or you can use multi-dimensional\n * objects.\n *\n * Here's a very simple API url definition example:\n *\n * api.getBlogList = $resource('http://api.example.com/getBlogList');\n *\n * While this is a perfectly valid $resource definition, most of the time you will\n * find yourself in a more complex situation where you want url parameters:\n *\n * api.getBlogById = $resource('http://api.example.com/blog/:id', {id: '@id'});\n *\n * You can also define your custom methods. Custom method definitions allows you to\n * add hardcoded parameters to your API calls that you want them to be sent every\n * time you make that API call:\n *\n * api.getBlogById = $resource('http://api.example.com/blog/:id', {id: '@id'}, {\n * 'getFromHomeCategory' : {method: 'GET', params: {blogCategory: 'home'}}\n * });\n *\n * In addition to these definitions, you can also create multi-dimensional objects.\n * They are nothing to do with the $resource object, it's just a more convenient\n * way that we have created for you to packing your related API urls together:\n *\n * api.blog = {\n * list : $resource('http://api.example.com/blog);\n * getById : $resource('http://api.example.com/blog/:id', {id: '@id'});\n * getByDate: $resource('http://api.example.com/blog/:date', {id: '@date'},\n * 'get': {method: 'GET', params: {getByDate: true}}\n * );\n * }\n *\n * If you look at the last example from above, we overrode the 'get' method to put a\n * hardcoded parameter. Now every time we make the \"getByDate\" call, the {getByDate: true}\n * object will also be sent along with whatever data we are sending.\n *\n * All the above methods are using standard $resource service. You can learn more about\n * it at: https://docs.angularjs.org/api/ngResource/service/$resource\n *\n * -----\n *\n * After you defined your API urls, you can use them in Controllers, Services and even\n * in the UIRouter state definitions.\n *\n * If we use the last example from above, you can do an API call in your Controllers and\n * Services like this:\n *\n * function MyController (api)\n * {\n * // Get the blog list\n * api.blog.list.get({},\n *\n * // Success\n * function (response)\n * {\n * console.log(response);\n * },\n *\n * // Error\n * function (response)\n * {\n * console.error(response);\n * }\n * );\n *\n * // Get the blog with the id of 3\n * var id = 3;\n * api.blog.getById.get({'id': id},\n *\n * // Success\n * function (response)\n * {\n * console.log(response);\n * },\n *\n * // Error\n * function (response)\n * {\n * console.error(response);\n * }\n * );\n *\n * // Get the blog with the date by using custom defined method\n * var date = 112314232132;\n * api.blog.getByDate.get({'date': date},\n *\n * // Success\n * function (response)\n * {\n * console.log(response);\n * },\n *\n * // Error\n * function (response)\n * {\n * console.error(response);\n * }\n * );\n * }\n *\n * Because we are directly using $resource servive, all your API calls will return a\n * $promise object.\n *\n * --\n *\n * If you want to do the same calls in your UI Router state definitions, you need to use\n * \"apiResolver\" service we have prepared for you:\n *\n * $stateProvider.state('app.blog', {\n * url : '/blog',\n * views : {\n * 'content@app': {\n * templateUrl: 'app/main/apps/blog/blog.html',\n * controller : 'BlogController as vm'\n * }\n * },\n * resolve : {\n * Blog: function (apiResolver)\n * {\n * return apiResolver.resolve('blog.list@get');\n * }\n * }\n * });\n *\n * You can even use parameters with apiResolver service:\n *\n * $stateProvider.state('app.blog.show', {\n * url : '/blog/:id',\n * views : {\n * 'content@app': {\n * templateUrl: 'app/main/apps/blog/blog.html',\n * controller : 'BlogController as vm'\n * }\n * },\n * resolve : {\n * Blog: function (apiResolver, $stateParams)\n * {\n * return apiResolver.resolve('blog.getById@get', {'id': $stateParams.id);\n * }\n * }\n * });\n *\n * And the \"Blog\" object will be available in your BlogController:\n *\n * function BlogController(Blog)\n * {\n * var vm = this;\n *\n * // Data\n * vm.blog = Blog;\n *\n * ...\n * }\n */\n\n var api = {};\n\n // Base Url\n api.baseUrl = 'app/data/';\n\n api.sample = $resource(api.baseUrl + 'sample/sample.json');\n\n api.quickPanel = {\n activities: $resource(api.baseUrl + 'quick-panel/activities.json'),\n contacts : $resource(api.baseUrl + 'quick-panel/contacts.json'),\n events : $resource(api.baseUrl + 'quick-panel/events.json'),\n notes : $resource(api.baseUrl + 'quick-panel/notes.json')\n };\n\n return api;\n }\n\n})();\nvar pancake;\n(function (pancake) {\n 'use strict';\n configureStates.$inject = ['$stateProvider', '$translatePartialLoaderProvider', 'msNavigationServiceProvider'];\n /* @ngInject */\n function configureStates($stateProvider, $translatePartialLoaderProvider, msNavigationServiceProvider) {\n var states = getStates();\n states.forEach(function (state) {\n $stateProvider.state(state.state, state.config);\n });\n // Translation\n $translatePartialLoaderProvider.addPart('app/main/scrumrow');\n }\n function getStates() {\n return [\n {\n state: 'app.scrumrow',\n config: {\n url: '/scrumrow/:id',\n views: {\n 'content@app': {\n templateUrl: 'app/main/scrumrow/scrumrow.html',\n controller: 'ScrumrowController as vm'\n }\n }\n }\n }\n ];\n }\n angular\n .module('app.scrumrow', [])\n .config(configureStates);\n})(pancake || (pancake = {}));\n\nangular.module(\"fuse\").run([\"$templateCache\", function($templateCache) {$templateCache.put(\"app/quick-panel/quick-panel.html\",\"ENVIRONMENTS\");\n$templateCache.put(\"app/core/layouts/content-only.html\",\"
\");\n$templateCache.put(\"app/core/layouts/content-with-toolbar.html\",\"
\");\n$templateCache.put(\"app/core/layouts/horizontal-navigation.html\",\"
\");\n$templateCache.put(\"app/core/layouts/vertical-navigation.html\",\"
\");\n$templateCache.put(\"app/core/layouts/website-with-featuring.html\",\"
\\n
\");\n$templateCache.put(\"app/core/theme-options/theme-options.html\",\"
Layout Style:
Vertical Navigation\\nHorizontal NavigationContent OnlyContent with Toolbar\\n
\\nLayout Mode:
Boxed\\nWide
Color Palette:
\\n\\n{{themeName}}
\");\n$templateCache.put(\"app/main/home/home.html\",\"
\\n
\");\n$templateCache.put(\"app/main/scrumrow/popup.html\",\"\\n

{{ vm.title }}

{{ vm.description }}

Name

Email

\\n
Anonymous please...Okay!\\n
\");\n$templateCache.put(\"app/main/scrumrow/scrumrow.html\",\"
\\n
\\n
{{rowinfo.name}}
{{rowinfo.name}}
{{ scrumrow.description }}
\\n
\\n
\\n
\\n
Send Feedback
\\nSend Feedback
\\n

\\nby Scrumrows, {{contributor}}

\\n
\");\n$templateCache.put(\"app/core/directives/ms-search-bar/ms-search-bar.html\",\"
\");\n$templateCache.put(\"app/navigation/layouts/horizontal-navigation/navigation.html\",\"
\");\n$templateCache.put(\"app/navigation/layouts/vertical-navigation/navigation.html\",\"
I \\nInkredible
\");\n$templateCache.put(\"app/pancake/components/directives/featuring.html\",\"\");\n$templateCache.put(\"app/pancake/components/directives/language-selection.html\",\"
{{vm.selectedLanguage.code}}\\n
\\n {{lang.title}}\\n
\");\n$templateCache.put(\"app/pancake/components/directives/menu.html\",\"\");\n$templateCache.put(\"app/pancake/components/directives/site-nav.html\",\"
\");\n$templateCache.put(\"app/pancake/components/directives/user-menu.html\",\"
\\nJohn Doe
\\nMy ProfileInbox\\n{{vm.userStatus.title}}\\n{{status.title}}\\nLogout
\\n
\");\n$templateCache.put(\"app/pancake/core/views/loader.html\",\"{{vm.progressDescription}}\");\n$templateCache.put(\"app/pancake/scrumrows/directives/scrumrows.html\",\"
\\n
{{row.title}}\\n
\");\n$templateCache.put(\"app/quick-panel/tabs/activity/activity-tab.html\",\"Friends\\n\\\"{{friend.name}}\\\"
{{contact.unread}}

{{friend.message}}

{{friend.time}}

\\n
Application Servers

{{server.location}}

{{server.detail}}

\\n
User Stats
\\n{{stat.title}} ({{stat.current}} / {{stat.total}})
\");\n$templateCache.put(\"app/quick-panel/tabs/chat/chat-tab.html\",\"
Recent\\\"{{contact.name}}\\\"
{{contact.unread}}

{{contact.name}}

{{contact.lastMessage}}

\\n
Start New Chat\\\"{{contact.name}}\\\"
\\n

{{contact.name}}

\\n{{vm.chat.contact.name}}

\\n
\\\"{{vm.chat.contact.name}}\\\"
{{dialog.message}}
{{dialog.time}}
\\n
\\n
\");\n$templateCache.put(\"app/quick-panel/tabs/today/today-tab.html\",\"Today\\n
\\n
{{vm.date | date:\\'EEEE\\'}}
{{vm.date | date:\\'d\\'}} \\nth {{vm.date | date:\\'MMMM\\'}}
\\nEvents\\n

{{event.title}}

{{event.detail}}

\\nNotes\\n
\\n

{{note.title}}

{{note.detail}}

\\nQuick Settings\\n

Notifications

Cloud Sync

\\n

Retro Thrusters

\");\n$templateCache.put(\"app/toolbar/layouts/content-with-toolbar/toolbar.html\",\"
F FUSE
\\n
\\nJohn Doe
\\nMy ProfileInbox\\n{{vm.userStatus.title}}\\n{{status.title}}\\nLogout\\n
\\n{{vm.selectedLanguage.code}}
\\n {{lang.title}}
\\n
\\n
\");\n$templateCache.put(\"app/toolbar/layouts/horizontal-navigation/toolbar.html\",\"
SR SCRUM ROWS\\n
\\n
\");\n$templateCache.put(\"app/toolbar/layouts/vertical-navigation/toolbar.html\",\"
\\n
{{ vm.currentUser.fullname }}
\\nLogout
\\n\\n
{{vm.selectedLanguage.code}}\\n
\\n {{lang.title}}\\n
\");\n$templateCache.put(\"app/toolbar/layouts/website/toolbar.html\",\"
\");\n$templateCache.put(\"app/core/directives/ms-navigation/templates/horizontal.html\",\"
\");\n$templateCache.put(\"app/core/directives/ms-navigation/templates/vertical.html\",\"\\n\");}]);"],"sourceRoot":"/source/"}