{"version":3,"sources":["app.js","app.config.js","app.routes.js","js/admin/AdminCtrl.js","js/home/HomeCtrl.js","js/shared/FooterCtrl.js","js/shared/NavCtrl.js","js/shared/NotificationCtrl.js","js/account/forgot/ForgotPasswordCtrl.js","js/account/forgot/PasswordResetCtrl.js","js/account/login/LoginCtrl.js","js/account/register/RegisterCtrl.js","js/admin/approvals/AdminApprovalCtrl.js","js/admin/documents/AdminDocumentsCtrl.js","js/admin/notification/AdminNotificationCtrl.js","js/admin/settings/AdminSettingsCtrl.js","js/admin/users/AdminUsersCtrl.js","js/common/services/authInterceptorService.js","js/common/services/authService.js","js/common/services/trackingService.js","js/common/services/utilService.js","templates.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3QA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACxNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACvEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AChHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;6ECjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"app.min.js","sourcesContent":["(function () {\r\n 'use strict';\r\n\r\n //used by template cache gulp build task\r\n angular.module('templates', []);\r\n\r\n angular.module('app', [\r\n 'ui.router',\r\n 'ngResource',\r\n 'ngMessages',\r\n 'ui.bootstrap',\r\n 'angular-loading-bar',\r\n 'restangular',\r\n 'LocalStorageModule',\r\n 'toastr',\r\n 'templates',\r\n 'ngSanitize',\r\n 'ngFileUpload',\r\n 'ngTagsInput',\r\n 'checklist-model'\r\n ])\r\n .value('appData', $.parseJSON($('#application-data').html()))\r\n .run([\r\n '$rootScope',\r\n '$state',\r\n 'appData',\r\n 'Restangular',\r\n '$uibModalStack',\r\n '$window',\r\n '$stateParams',\r\n 'authService',\r\n 'trackingService',\r\n function ($rootScope, $state, appData, restangular, $uibModalStack, $window, $stateParams, authService, trackingService) {\r\n\r\n authService.initialize();\r\n $rootScope.$state = $state;\r\n restangular.setBaseUrl(appData.applicationRoot + 'api');\r\n\r\n $rootScope.unauthenticated = true;\r\n\r\n $rootScope.$on('$stateChangeSuccess', function () {\r\n $uibModalStack.dismissAll();\r\n });\r\n\r\n $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState) {\r\n if (toState.name === 'login') return;\r\n $rootScope.unauthenticated = !authService.authentication.isAuth;;\r\n\r\n var requiresAuth = toState.data && toState.data.requireLogin;\r\n //check if url requires authentication\r\n if (requiresAuth && authService.authentication.isAuth === false) {\r\n event.preventDefault();\r\n $rootScope.redirectUrl = $state.href(toState.name, toParams);\r\n $state.go('login');\r\n return;\r\n }\r\n\r\n //check if route requires a specific role\r\n var requiredRole = toState.data && toState.data.allowed;\r\n if (requiredRole && requiredRole !== authService.authentication.role) {\r\n event.preventDefault();\r\n $state.go('home');\r\n return;\r\n }\r\n });\r\n\r\n\r\n $rootScope.$on('$stateChangeSuccess', function () {\r\n $window.scrollTo(0, 0);\r\n });\r\n\r\n }\r\n ]);\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app')\r\n .config([\r\n '$urlRouterProvider',\r\n '$httpProvider',\r\n '$uibModalProvider',\r\n '$uiViewScrollProvider',\r\n '$anchorScrollProvider',\r\n '$provide',\r\n 'RestangularProvider',\r\n config\r\n ]);\r\n\r\n function config($urlRouterProvider, $httpProvider, $uibModalProvider, $uiViewScrollProvider, $anchorScrollProvider) {\r\n $httpProvider.interceptors.push('authInterceptorService');\r\n $anchorScrollProvider.disableAutoScrolling();\r\n $uiViewScrollProvider.useAnchorScroll();\r\n\r\n $uibModalProvider.options = {\r\n animation: false,\r\n size: 'md'\r\n };\r\n\r\n $httpProvider.interceptors.push(['$window', '$q', '$injector', function ($window, $q, $injector) {\r\n return {\r\n 'responseError': function (rejection) {\r\n\r\n switch (rejection.status) {\r\n case 401:\r\n $window.location = 'login';\r\n return;\r\n case 500:\r\n $injector.get('toastr').error('An application exception occurred.');\r\n }\r\n\r\n return $q.reject(rejection);\r\n\r\n }\r\n };\r\n }]);\r\n \r\n };\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app')\r\n .config([\r\n '$stateProvider',\r\n '$locationProvider',\r\n '$urlRouterProvider',\r\n config\r\n ]);\r\n\r\n function config($stateProvider, $locationProvider, $urlRouterProvider) {\r\n\r\n $urlRouterProvider.otherwise('/');\r\n\r\n $stateProvider\r\n .state('home', {\r\n url: '/',\r\n views: {\r\n nav: {\r\n templateUrl: 'shared/nav.html',\r\n controller: 'NavCtrl as vm'\r\n },\r\n footer: {\r\n templateUrl: 'shared/footer.html',\r\n controller: 'FooterCtrl as vm'\r\n },\r\n content: {\r\n templateUrl: 'home/home.html',\r\n controller: 'HomeCtrl as vm'\r\n },\r\n 'notification@home': {\r\n templateUrl: 'shared/notificationbar.html',\r\n controller: 'NotificationCtrl as vm'\r\n }\r\n },\r\n data: { requireLogin: true }\r\n });\r\n\r\n $stateProvider\r\n .state('admin', {\r\n url: '/admin',\r\n abstract: true,\r\n views: {\r\n nav: {\r\n templateUrl: 'shared/nav.html',\r\n controller: 'NavCtrl as vm'\r\n },\r\n footer: {\r\n templateUrl: 'shared/footer.html',\r\n controller: 'FooterCtrl as vm'\r\n },\r\n content: {\r\n templateUrl: 'admin/admin.html',\r\n controller: 'AdminCtrl as vm'\r\n }\r\n },\r\n data: {\r\n requireLogin: true,\r\n allowed: 'Administrator'\r\n }\r\n });\r\n\r\n $stateProvider\r\n .state('admin.users', {\r\n url: '/users',\r\n views: {\r\n nav: {\r\n templateUrl: 'shared/nav.html',\r\n controller: 'NavCtrl as vm'\r\n },\r\n footer: {\r\n templateUrl: 'shared/footer.html',\r\n controller: 'FooterCtrl as vm'\r\n },\r\n content: {\r\n templateUrl: 'admin/admin.html',\r\n controller: 'AdminCtrl as vm'\r\n },\r\n section: {\r\n templateUrl: 'admin/users/users.html',\r\n controller: 'AdminUsersCtrl as vm'\r\n }\r\n },\r\n data: { requireLogin: true }\r\n });\r\n\r\n $stateProvider\r\n .state('admin.outstanding-approvals', {\r\n url: '/outstanding-approvals',\r\n views: {\r\n nav: {\r\n templateUrl: 'shared/nav.html',\r\n controller: 'NavCtrl as vm'\r\n },\r\n footer: {\r\n templateUrl: 'shared/footer.html',\r\n controller: 'FooterCtrl as vm'\r\n },\r\n content: {\r\n templateUrl: 'admin/admin.html',\r\n controller: 'AdminCtrl as vm'\r\n },\r\n section: {\r\n templateUrl: 'admin/approvals/approvals.html',\r\n controller: 'AdminApprovalCtrl as vm'\r\n }\r\n },\r\n data: { requireLogin: true }\r\n });\r\n\r\n $stateProvider\r\n .state('admin.document-management', {\r\n url: '/document-management',\r\n views: {\r\n nav: {\r\n templateUrl: 'shared/nav.html',\r\n controller: 'NavCtrl as vm'\r\n },\r\n footer: {\r\n templateUrl: 'shared/footer.html',\r\n controller: 'FooterCtrl as vm'\r\n },\r\n content: {\r\n templateUrl: 'admin/admin.html',\r\n controller: 'AdminCtrl as vm'\r\n },\r\n section: {\r\n templateUrl: 'admin/documents/documents.html',\r\n controller: 'AdminDocumentsCtrl as vm'\r\n }\r\n },\r\n data: { requireLogin: true }\r\n });\r\n\r\n $stateProvider\r\n .state('admin.notifications', {\r\n url: '/notifications',\r\n views: {\r\n nav: {\r\n templateUrl: 'shared/nav.html',\r\n controller: 'NavCtrl as vm'\r\n },\r\n footer: {\r\n templateUrl: 'shared/footer.html',\r\n controller: 'FooterCtrl as vm'\r\n },\r\n content: {\r\n templateUrl: 'admin/admin.html',\r\n controller: 'AdminCtrl as vm'\r\n },\r\n section: {\r\n templateUrl: 'admin/notification/notification.html',\r\n controller: 'AdminNotificationCtrl as vm'\r\n }\r\n },\r\n data: { requireLogin: true }\r\n });\r\n\r\n $stateProvider\r\n .state('admin.document-categories', {\r\n url: '/document-categories',\r\n views: {\r\n nav: {\r\n templateUrl: 'shared/nav.html',\r\n controller: 'NavCtrl as vm'\r\n },\r\n footer: {\r\n templateUrl: 'shared/footer.html',\r\n controller: 'FooterCtrl as vm'\r\n },\r\n content: {\r\n templateUrl: 'admin/admin.html',\r\n controller: 'AdminCtrl as vm'\r\n },\r\n section: {\r\n templateUrl: 'admin/settings/settings.html',\r\n controller: 'AdminSettingsCtrl as vm'\r\n }\r\n },\r\n data: { requireLogin: true }\r\n });\r\n\r\n $stateProvider\r\n .state('login', {\r\n url: '/login',\r\n views: {\r\n nav: {\r\n templateUrl: 'shared/nav.html',\r\n controller: 'NavCtrl as vm'\r\n },\r\n content: {\r\n templateUrl: 'account/account.html'\r\n },\r\n 'form@login': {\r\n templateUrl: 'account/login/login.html',\r\n controller: 'LoginCtrl as vm'\r\n }\r\n }\r\n });\r\n\r\n $stateProvider\r\n .state('forgotpassword', {\r\n url: '/forgotpassword',\r\n views: {\r\n nav: {\r\n templateUrl: 'shared/nav.html',\r\n controller: 'NavCtrl as vm'\r\n },\r\n content: {\r\n templateUrl: 'account/account.html'\r\n },\r\n 'form@forgotpassword': {\r\n templateUrl: 'account/forgot/forgotpassword.html',\r\n controller: 'ForgotPasswordCtrl as vm'\r\n }\r\n }\r\n });\r\n\r\n $stateProvider\r\n .state('passwordreset', {\r\n url: '/passwordreset?email&token',\r\n views: {\r\n nav: {\r\n templateUrl: 'shared/nav.html',\r\n controller: 'NavCtrl as vm'\r\n },\r\n content: {\r\n templateUrl: 'account/account.html'\r\n },\r\n 'form@passwordreset': {\r\n templateUrl: 'account/forgot/passwordreset.html',\r\n controller: 'PasswordResetCtrl as vm'\r\n }\r\n },\r\n resolve: {\r\n email: ['$stateParams', function ($stateParams) {\r\n return $stateParams.email;\r\n }],\r\n token: ['$stateParams', function ($stateParams) {\r\n return $stateParams.token;\r\n }]\r\n }\r\n });\r\n\r\n $stateProvider\r\n .state('register', {\r\n url: '/register',\r\n views: {\r\n nav: {\r\n templateUrl: 'shared/nav.html',\r\n controller: 'NavCtrl as vm'\r\n },\r\n content: {\r\n templateUrl: 'account/account.html'\r\n },\r\n 'form@register': {\r\n templateUrl: 'account/register/register.html',\r\n controller: 'RegisterCtrl as vm'\r\n }\r\n }\r\n });\r\n\r\n $locationProvider.html5Mode(true);\r\n };\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n function AdminCtrl(restangular) {\r\n var vm = this;\r\n };\r\n\r\n angular\r\n .module('app')\r\n .controller('AdminCtrl', ['Restangular', AdminCtrl]);\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n function HomeCtrl(restangular, appData, authService, $state, $uibModal, $scope, $window, trackingService) {\r\n var vm = this;\r\n\r\n vm.searchOptions = {\r\n term: ''\r\n }; \r\n\r\n vm.showResults = function () {\r\n return vm.searchOptions.term !== '';\r\n }\r\n\r\n restangular.all('categories').one('secondary').getList().then(function (data) {\r\n vm.secondaryCategories = _.sortBy(data, 'name');\r\n });\r\n\r\n restangular.all('categories').one('primary').getList().then(function (data) {\r\n vm.primaryCategories = data;\r\n });\r\n \r\n vm.filterDocuments = function (primaryCategory, secondaryCategory) {\r\n return _.filter(vm.documents, function (document) {\r\n return document.primaryCategory === primaryCategory && document.secondaryCategory === secondaryCategory.name;\r\n });\r\n };\r\n\r\n vm.filterCategories = function (primaryCategory) {\r\n vm.filteredCategories = _.filter(vm.secondaryCategories, function (o) { return o.primaryCategory == primaryCategory; });\r\n }\r\n\r\n function fetch() {\r\n restangular\r\n .one('documents')\r\n .one('all')\r\n .get(vm.searchOptions)\r\n .then(function (data) {\r\n vm.documents = data;\r\n vm.filterCategories('COM 2000/3000');\r\n });\r\n };\r\n\r\n $scope.$watch(function () { return vm.searchOptions; }, fetch, true);\r\n\r\n vm.documentDownload = function(document) {\r\n trackingService.trackEvent(document.name);\r\n $window.location = document.downloadLink + '?token=' + authService.authentication.token;\r\n }\r\n\r\n vm.documentClick = function(document) {\r\n if (document.isStreamable) {\r\n trackingService.trackEvent(document.name, 'View');\r\n playVideo(document);\r\n return;\r\n }\r\n trackingService.trackEvent(document.name, 'Download');\r\n $window.open(document.downloadLink + '?token=' + authService.authentication.token);\r\n }\r\n\r\n function playVideo(document){\r\n $uibModal.open({\r\n templateUrl: 'home/video.html',\r\n controller: ['$scope', 'document',\r\n function ($scope, document) {\r\n $scope.name = document.name;\r\n $scope.videoUrl = document.streamLink + '?token=' + authService.authentication.token;\r\n }],\r\n resolve: {\r\n document: function() {\r\n return document;\r\n }\r\n },\r\n size: 'lg',\r\n backdrop: true\r\n });\r\n }\r\n };\r\n\r\n angular\r\n .module('app')\r\n .controller('HomeCtrl', ['Restangular', 'appData', 'authService', '$state', '$uibModal', '$scope', '$window', 'trackingService', HomeCtrl]);\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app')\r\n .controller('FooterCtrl', ['appData', FooterCtrl]);\r\n\r\n function FooterCtrl(appData) {\r\n var vm = this;\r\n\r\n vm.showBuildNumber = appData.trackingVersion === 'stage';\r\n vm.buildNumber = appData.buildNumber;\r\n };\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app')\r\n .controller('NavCtrl', ['$scope', 'authService', NavCtrl]);\r\n\r\n function NavCtrl($scope, authService) {\r\n var vm = this;\r\n\r\n vm.auth = authService;\r\n vm.isCollapsed = true;\r\n\r\n $scope.$on('$stateChangeSuccess', function () {\r\n vm.isCollapsed = true;\r\n });\r\n\r\n vm.logout = function () {\r\n authService.logout();\r\n };\r\n };\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app')\r\n .controller('NotificationCtrl', ['$uibModal', 'appData', NotificationCtrl]);\r\n\r\n function NotificationCtrl($uibModal, appData) {\r\n var vm = this;\r\n\r\n vm.notification = appData.notification;\r\n vm.viewNotification = viewNotification;\r\n\r\n ////////////////////////////////////////////\r\n\r\n function viewNotification() {\r\n $uibModal.open({\r\n templateUrl: 'shared/notification.html',\r\n controller: ['$scope', function($scope) {\r\n $scope.description = appData.notification.description;\r\n }]\r\n });\r\n }\r\n\r\n };\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n function ForgotPasswordCtrl(restangular, toastr, $window, utilService) {\r\n var vm = this;\r\n \r\n vm.busy = false;\r\n vm.email = null;\r\n vm.sent = false;\r\n vm.sendPasswordReset = sendPasswordReset;\r\n vm.validationErrors = [];\r\n\r\n //////////////////////////////////////////\r\n function sendPasswordReset(form) {\r\n if (!form.$valid || vm.busy) return;\r\n vm.validationErrors = [];\r\n vm.busy = true;\r\n restangular\r\n .one('account')\r\n .post('forgotpassword', { email: vm.email })\r\n .then(function () {\r\n vm.sent = true;\r\n vm.busy = false;\r\n }, function (err) {\r\n vm.validationErrors = utilService.parseViewModelResponse(err, utilService.errorEnum.ALL);\r\n $window.scroll(0, 0);\r\n toastr.error('Unable to send password instructions.', 'Error');\r\n vm.busy = false;\r\n });\r\n }\r\n };\r\n\r\n angular\r\n .module('app')\r\n .controller('ForgotPasswordCtrl', [\r\n 'Restangular', 'toastr', '$window', 'utilService', ForgotPasswordCtrl]);\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n function PasswordResetCtrl(restangular, toastr, email, token, $state, utilService) {\r\n var vm = this;\r\n \r\n vm.busy = false;\r\n vm.validationErrors = [];\r\n vm.userInfo = {\r\n email: email,\r\n token: token\r\n };\r\n\r\n vm.resetPassword = resetPassword;\r\n\r\n //////////////////////////////////////////\r\n function resetPassword(form) {\r\n if (!form.$valid || vm.busy) return;\r\n\r\n vm.busy = true;\r\n vm.validationErrors = [];\r\n restangular\r\n .one('account')\r\n .post('resetpassword', vm.userInfo)\r\n .then(function () {\r\n vm.busy = false;\r\n toastr.info('Your password has been successfully reset.', 'Notification');\r\n $state.go('login');\r\n }, function (err) {\r\n vm.validationErrors = utilService.parseViewModelResponse(err, utilService.errorEnum.VALIDATIONS);\r\n vm.busy = false;\r\n });\r\n }\r\n };\r\n\r\n angular\r\n .module('app')\r\n .controller('PasswordResetCtrl', [\r\n 'Restangular', 'toastr', 'email', 'token', '$state', 'utilService', PasswordResetCtrl]);\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n function LoginCtrl(authService, $state, toastr) {\r\n var vm = this;\r\n\r\n vm.validationErrors = [];\r\n vm.busy = false;\r\n vm.loginData = {\r\n userName: '',\r\n password: ''\r\n };\r\n \r\n vm.login = function (form) {\r\n if (vm.busy) return;\r\n\r\n if (form.$valid) {\r\n vm.busy = true;\r\n vm.validationErrors = [];\r\n authService.login(vm.loginData).then(\r\n function () {\r\n $state.go('home');\r\n },\r\n function (err) {\r\n toastr.error('Unable to log in.', 'Error');\r\n if (err && err.error_description) {\r\n vm.validationErrors.push(err.error_description);\r\n }\r\n vm.busy = false;\r\n }\r\n );\r\n } else {\r\n vm.busy = false;\r\n }\r\n };\r\n };\r\n\r\n angular\r\n .module('app')\r\n .controller('LoginCtrl', [\r\n 'authService',\r\n '$state',\r\n 'toastr', LoginCtrl]);\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n function RegisterCtrl(appData, authService, $state, toastr, $uibModal, utilService, $window) {\r\n var vm = this;\r\n\r\n vm.busy = false;\r\n vm.validationErrors = [];\r\n\r\n vm.roles = appData.applicationRoles;\r\n\r\n vm.registerData = {\r\n userName: '',\r\n password: '',\r\n role: ''\r\n };\r\n\r\n vm.register = function (form) {\r\n if (vm.busy) return;\r\n vm.busy = true;\r\n if (form.$valid) {\r\n authService.register(vm.registerData).then(function () {\r\n $uibModal.open({\r\n templateUrl: 'account/register/confirmation.html'\r\n }).result.finally(function () {\r\n $state.go('login');\r\n });\r\n }, function (err) {\r\n toastr.error('Unable to register.', 'Error');\r\n vm.validationErrors = utilService.parseViewModelResponse(err, utilService.errorEnum.ALL);\r\n $window.scroll(0, 0);\r\n vm.busy = false;\r\n });\r\n } else {\r\n vm.busy = false;\r\n }\r\n };\r\n };\r\n\r\n angular\r\n .module('app')\r\n .controller('RegisterCtrl', ['appData', 'authService', '$state', 'toastr', '$uibModal', 'utilService', '$window', RegisterCtrl]);\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n function AdminApprovalCtrl(restangular, toastr, $scope) {\r\n var vm = this;\r\n\r\n vm.searchOptions = {\r\n size: 10,\r\n page: 1\r\n };\r\n \r\n vm.approveUser = approveUser;\r\n vm.removeUser = removeUser;\r\n\r\n $scope.$watch(function () { return vm.searchOptions; }, fetch, true);\r\n\r\n ////////////////////////////////////////\r\n function fetch() {\r\n restangular\r\n .one('users')\r\n .one('pending')\r\n .get(vm.searchOptions)\r\n .then(function (users) {\r\n vm.approvals = users;\r\n });\r\n }\r\n\r\n function approveUser(user) {\r\n restangular\r\n .one('users')\r\n .post('approve', JSON.stringify(user.id))\r\n .then(function () {\r\n fetch();\r\n toastr.info('User has been approved.', 'User Approved');\r\n });\r\n }\r\n\r\n function removeUser(user) {\r\n restangular\r\n .one('users', user.id)\r\n .one(true)\r\n .remove()\r\n .then(function () {\r\n fetch();\r\n toastr.info('User has been removed.', 'User Removed');\r\n });\r\n }\r\n };\r\n\r\n angular\r\n .module('app')\r\n .controller('AdminApprovalCtrl', ['Restangular', 'toastr', '$scope', AdminApprovalCtrl]);\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n function AdminDocumentsCtrl(restangular, toastr, $scope, $uibModal, appData, $window, authService) {\r\n var vm = this;\r\n\r\n vm.searchOptions = {\r\n size: 10,\r\n page: 1\r\n };\r\n\r\n vm.removeDocument = removeDocument;\r\n vm.addDocument = addDocument;\r\n vm.editDocument = editDocument;\r\n\r\n $scope.$watch(function () { return vm.searchOptions; }, fetch, true);\r\n restangular.all('categories').one('secondary').getList().then(function (data) {\r\n vm.secondaryCategories = data;\r\n });\r\n\r\n restangular.all('categories').one('primary').getList().then(function (data) {\r\n vm.primaryCategories = data;\r\n });\r\n\r\n\r\n /////////////////////////////////////\r\n function fetch() {\r\n restangular\r\n .one('documents')\r\n .get(vm.searchOptions)\r\n .then(function (data) {\r\n _.each(data.rows, function (document) {\r\n document.downloadLink = document.downloadLink + '?token=' + authService.authentication.token;\r\n });\r\n vm.documents = data;\r\n });\r\n }\r\n\r\n function removeDocument(document) {\r\n $uibModal.open({ templateUrl: 'admin/documents/confirmation.html' }).result.then(function () {\r\n restangular.one('documents', document.id).customDELETE().then(function () {\r\n toastr.info('Document has been removed.', 'Document Removed');\r\n fetch();\r\n }, function () {\r\n toastr.error('Unable to remove document.', 'Error');\r\n });\r\n });\r\n }\r\n\r\n function addDocument() {\r\n $uibModal.open({\r\n templateUrl: 'admin/documents/add.html',\r\n controller: ['$scope', 'Upload', 'cfpLoadingBar', 'primaryCategories', 'secondaryCategories',\r\n function ($scope, upload, cfpLoadingBar, primaryCategories, secondaryCategories) {\r\n\r\n $scope.roles = _.filter(appData.applicationRoles, function(item) {\r\n return item !== 'Administrator';\r\n });\r\n\r\n $scope.primaryCategories = primaryCategories;\r\n $scope.secondaryCategories = secondaryCategories;\r\n\r\n $scope.selectedRoles = [];\r\n\r\n $scope.document = {\r\n searchTerms: '',\r\n description: '',\r\n roles: ''\r\n };\r\n\r\n $scope.onPrimaryCategoryChange = function () {\r\n $scope.filteredCategories = _.filter(secondaryCategories, function (o) { return o.primaryCategory == $scope.document.primaryCategory; });\r\n }\r\n\r\n $scope.roleSelected = function () {\r\n return $scope.document.roles.length > 0;\r\n }\r\n\r\n $scope.roleChanged = function() {\r\n $scope.document.roles = $scope.selectedRoles.join(',');\r\n }\r\n\r\n $scope.fileSelect = function(file) {\r\n $scope.selectedFile = file;\r\n }\r\n\r\n $scope.upload = function (form) {\r\n if (form.$valid) {\r\n $scope.cfpLoadingBar = cfpLoadingBar;\r\n $scope.uploading = true;\r\n var data = _.extend({ file: $scope.selectedFile }, $scope.document);\r\n upload.upload({\r\n url: appData.applicationRoot + 'api/documents',\r\n data: data,\r\n transformRequest: angular.identity,\r\n headers: { 'Content-Type': undefined }\r\n }).then(function () {\r\n toastr.info('Document uploaded successfully.', 'Notification');\r\n $scope.uploading = false;\r\n fetch();\r\n $scope.$dismiss();\r\n }, function () {\r\n toastr.error('Unable to upload document.', 'Error');\r\n $scope.uploading = false;\r\n });\r\n }\r\n }\r\n\r\n $scope.cancel = function () {\r\n $scope.$dismiss();\r\n };\r\n }],\r\n resolve: {\r\n primaryCategories: function() {\r\n return vm.primaryCategories;\r\n },\r\n secondaryCategories: function() {\r\n return vm.secondaryCategories;\r\n }\r\n }\r\n });\r\n }\r\n\r\n function editDocument(document) {\r\n restangular\r\n .one('documents', document.id)\r\n .get()\r\n .then(function (documentDetails) {\r\n $uibModal.open({\r\n templateUrl: 'admin/documents/edit.html',\r\n controller: ['$scope', 'Upload', 'cfpLoadingBar', 'document', 'primaryCategories', 'secondaryCategories',\r\n function ($scope, upload, cfpLoadingBar, document, primaryCategories, secondaryCategories) {\r\n\r\n $scope.roles = _.filter(appData.applicationRoles, function (item) {\r\n return item !== 'Administrator';\r\n });\r\n $scope.fileChanged = false;\r\n $scope.selectedRoles = document.roles;\r\n\r\n $scope.primaryCategories = primaryCategories;\r\n $scope.secondaryCategories = secondaryCategories;\r\n\r\n $scope.document = $scope.selectedFile = document;\r\n\r\n $scope.roleChanged = function () {\r\n $scope.document.roles = $scope.selectedRoles.join(',');\r\n };\r\n $scope.roleChanged();\r\n\r\n $scope.fileSelect = function (file) {\r\n $scope.fileChanged = true;\r\n $scope.selectedFile = file;\r\n }\r\n\r\n $scope.roleSelected = function () {\r\n return $scope.document.roles.length > 0;\r\n }\r\n\r\n $scope.onPrimaryCategoryChange = function () {\r\n $scope.filteredCategories = _.filter(secondaryCategories, function (o) { return o.primaryCategory == $scope.document.primaryCategory; });\r\n }\r\n\r\n $scope.onPrimaryCategoryChange();\r\n\r\n $scope.update = function (form) {\r\n var data = {};\r\n if (form.$valid) {\r\n if ($scope.fileChanged) {\r\n $scope.cfpLoadingBar = cfpLoadingBar;\r\n $scope.uploading = true;\r\n var data = _.extend({ file: $scope.selectedFile }, $scope.document);\r\n } else {\r\n var data = $scope.document;\r\n }\r\n upload.upload({\r\n url: appData.applicationRoot + 'api/documents/update',\r\n data: data,\r\n transformRequest: angular.identity,\r\n headers: { 'Content-Type': undefined }\r\n }).then(function () {\r\n toastr.info('Document updated successfully.', 'Notification');\r\n $scope.uploading = false;\r\n fetch();\r\n $scope.$dismiss();\r\n }, function () {\r\n toastr.error('Unable to update document.', 'Error');\r\n $scope.uploading = false;\r\n });\r\n }\r\n }\r\n\r\n $scope.cancel = function () {\r\n $scope.$dismiss();\r\n };\r\n }],\r\n resolve: {\r\n document: function() {\r\n return documentDetails;\r\n },\r\n primaryCategories: function () {\r\n return vm.primaryCategories;\r\n },\r\n secondaryCategories: function () {\r\n return vm.secondaryCategories;\r\n }\r\n }\r\n });\r\n });\r\n \r\n }\r\n };\r\n\r\n angular\r\n .module('app')\r\n .controller('AdminDocumentsCtrl', ['Restangular', 'toastr', '$scope', '$uibModal', 'appData', '$window', 'authService', AdminDocumentsCtrl]);\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n function AdminNotificationCtrl(restangular, toastr, appData) {\r\n var vm = this;\r\n\r\n restangular\r\n .one('application')\r\n .one('notification')\r\n .get()\r\n .then(function (response) {\r\n vm.notification = response;\r\n });\r\n\r\n vm.saveNotification = saveNotification;\r\n vm.clearNotification = clearNotification;\r\n\r\n /////////////////////////////////////\r\n function saveNotification() {\r\n vm.notification.save().then(function() {\r\n toastr.info('Notification has been updated.', 'Updated');\r\n appData.notification = vm.notification;\r\n },\r\n function() {\r\n toastr.error('Unable to save notification.', 'Error');\r\n });\r\n }\r\n\r\n function clearNotification() {\r\n if (vm.notification) {\r\n vm.notification.title = null;\r\n vm.notification.description = null;\r\n saveNotification();\r\n }\r\n }\r\n };\r\n\r\n angular\r\n .module('app')\r\n .controller('AdminNotificationCtrl', ['Restangular', 'toastr', 'appData', AdminNotificationCtrl]);\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n function AdminSettingsCtrl(restangular, toastr, $uibModal) {\r\n var vm = this;\r\n\r\n restangular\r\n .one('application')\r\n .one('secondarycategory')\r\n .get()\r\n .then(function (response) {\r\n vm.secondaryCategories = response;\r\n vm.aepCategories = _.filter(response, function (o) { return o.primaryCategory == 'AEP' });\r\n vm.dreCategories = _.filter(response, function (o) { return o.primaryCategory == 'DRE' });\r\n vm.drePlusCategories = _.filter(response, function (o) { return o.primaryCategory == 'DRE Plus' });\r\n vm.com2000Categories = _.filter(response, function (o) { return o.primaryCategory == 'COM 2000/3000' });\r\n vm.miscCategories = _.filter(response, function (o) { return o.primaryCategory == 'Misc' });\r\n });\r\n\r\n vm.onSecondaryTagAdding = onSecondaryTagAdding;\r\n vm.onSecondaryTagRemoving = onSecondaryTagRemoving;\r\n\r\n /////////////////////////////////////\r\n function onSecondaryTagRemoving(tag, primaryCategory) {\r\n if (vm[primaryCategory].length === 1) {\r\n toastr.error('At least one secondary category is required.', 'Error');\r\n return false;\r\n }\r\n return $uibModal.open({\r\n templateUrl: 'scripts/js/admin/settings/confirmdelete.html',\r\n size: 'md',\r\n controller: [\r\n '$scope', '$uibModalInstance', function ($scope, $uibModalInstance) {\r\n $scope.cancel = function () { $uibModalInstance.close(false); }\r\n $scope.remove = function () {\r\n return vm.secondaryCategories.customDELETE(tag.id).then(function() {\r\n toastr.info('Secondary category removed.', 'Notification');\r\n $uibModalInstance.close(true);\r\n },\r\n function (err) {\r\n var message = _.get(err, 'data.message') || 'Unable to remove secondary category.';\r\n toastr.error(message, 'Error');\r\n $uibModalInstance.close(false);\r\n });\r\n };\r\n }\r\n ]\r\n }).result;\r\n }\r\n\r\n function capitalize(text) {\r\n return text.charAt(0).toUpperCase() + text.slice(1);\r\n }\r\n\r\n function onSecondaryTagAdding(tag, primaryCategory) {\r\n tag.name = capitalize(tag.name);\r\n return vm.secondaryCategories.customPOST({ secondaryCategory: tag.name, primaryCategory: primaryCategory }).then(function (result) {\r\n tag.id = result.id;\r\n toastr.info('Secondary category created.', 'Notification');\r\n return true;\r\n }, function () {\r\n toastr.error('Unable to save secondary category.', 'Error');\r\n return false;\r\n });;\r\n }\r\n };\r\n\r\n angular\r\n .module('app')\r\n .controller('AdminSettingsCtrl', ['Restangular', 'toastr', '$uibModal', AdminSettingsCtrl]);\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n function AdminUsersCtrl(restangular, toastr, $scope, $uibModal) {\r\n var vm = this;\r\n\r\n vm.searchOptions = {\r\n size: 10,\r\n page: 1,\r\n roleId: null\r\n };\r\n\r\n vm.removeUser = removeUser;\r\n vm.saveUser = saveUser;\r\n vm.roles = [];\r\n\r\n vm.selectedRole = selectedRole;\r\n\r\n restangular.all('users').one('roles').getList().then(function (data) {\r\n vm.roles = data;\r\n });\r\n\r\n $scope.$watch(function () { return vm.searchOptions; }, fetch, true);\r\n\r\n /////////////////////////////////////\r\n function fetch() {\r\n restangular\r\n .one('users')\r\n .get(vm.searchOptions)\r\n .then(function (users) {\r\n vm.users = users;\r\n });\r\n }\r\n\r\n function saveUser(user) {\r\n restangular\r\n .one('users', user.id)\r\n .post('setrole', JSON.stringify(user.roles[0].roleId)).then(function () {\r\n toastr.info('User has been updated', 'User updated');\r\n fetch();\r\n }, function() {\r\n toastr.error('Unable to update user role.', 'Error');\r\n user.edit = false;\r\n });\r\n }\r\n\r\n function removeUser(user) {\r\n $uibModal.open({ templateUrl: 'admin/users/confirmation.html' }).result.then(function () {\r\n restangular.one('users', user.id).customDELETE().then(function () {\r\n toastr.info('User has been removed.', 'User removed');\r\n fetch();\r\n }, function () {\r\n toastr.error('Unable to remove document.', 'Error');\r\n });\r\n });\r\n\r\n }\r\n\r\n function selectedRole() {\r\n if (!vm.roles) return 'users';\r\n \r\n return vm.searchOptions.roleId == null\r\n ? 'users'\r\n : _.get(_.find(vm.roles, { id: vm.searchOptions.roleId }), 'name') + 's';\r\n }\r\n };\r\n\r\n angular\r\n .module('app')\r\n .controller('AdminUsersCtrl', ['Restangular', 'toastr', '$scope', '$uibModal', AdminUsersCtrl]);\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app')\r\n .factory('authInterceptorService', ['localStorageService', authInterceptorService]);\r\n\r\n function authInterceptorService(localStorageService) {\r\n\r\n var request = function (config) {\r\n config.headers = config.headers || {};\r\n\r\n var authData = localStorageService.get('authorizationData');\r\n if (authData) {\r\n config.headers.Authorization = 'Bearer ' + authData.token;\r\n }\r\n\r\n return config;\r\n }\r\n\r\n return {\r\n request: request\r\n };\r\n\r\n };\r\n\r\n})();","\r\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app')\r\n .factory('authService', ['$http', '$q', 'localStorageService', '$rootScope', '$location', 'appData', 'trackingService', authService]);\r\n\r\n function authService($http, $q, localStorageService, $rootScope, $location, appData, trackingService) {\r\n\r\n var authentication = {\r\n isAuth: false,\r\n token: '',\r\n userId: '',\r\n userName: '',\r\n role: '',\r\n expiration: null\r\n },\r\n format = 'YYYY-MM-DD HH:mm';\r\n\r\n function register(registration) {\r\n return $http.post(appData.applicationRoot + 'api/account/register', registration).then(function (response) {\r\n return response;\r\n });\r\n };\r\n\r\n function login(loginData) {\r\n var data = 'grant_type=password&username=' + window.encodeURIComponent(loginData.userName) + '&password=' + window.encodeURIComponent(loginData.password);\r\n\r\n var deferred = $q.defer();\r\n\r\n $http.post(appData.applicationRoot + 'token',\r\n data, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } })\r\n .success(function (response) {\r\n\r\n if (!response.access_token) {\r\n logout();\r\n deferred.reject();\r\n return;\r\n }\r\n\r\n authentication.isAuth = true;\r\n authentication.token = response.access_token;\r\n authentication.userId = response.userId;\r\n authentication.userName = response.userName;\r\n authentication.role = response.role;\r\n authentication.expiration = moment().add(response.expires_in, 'seconds').format(format);\r\n\r\n localStorageService.set('authorizationData', authentication);\r\n\r\n $rootScope.$broadcast('auth:change');\r\n trackingService.trackEvent('Log in');\r\n\r\n deferred.resolve(response);\r\n\r\n })\r\n .error(function (err) {\r\n logout();\r\n deferred.reject(err);\r\n });\r\n\r\n return deferred.promise;\r\n };\r\n\r\n function logout() {\r\n var model = {\r\n email: authentication.userName\r\n };\r\n $http.post(appData.applicationRoot + 'api/account/logout', model).then(function () {\r\n localStorageService.remove('authorizationData');\r\n\r\n authentication.isAuth = false;\r\n authentication.token = '';\r\n authentication.userId = '';\r\n authentication.userName = '';\r\n authentication.role = '';\r\n authentication.expiration = null;\r\n });\r\n $location.path('/login');\r\n };\r\n\r\n function initialize() {\r\n\r\n var authData = localStorageService.get('authorizationData');\r\n if (authData) {\r\n\r\n authentication.isAuth = true;\r\n authentication.token = authData.token;\r\n authentication.userName = authData.userName;\r\n authentication.userId = authData.userId;\r\n authentication.role = authData.role;\r\n authentication.expiration = authData.expiration;\r\n\r\n if (moment().isAfter(authentication.expiration)) {\r\n logout();\r\n return;\r\n }\r\n\r\n $rootScope.$broadcast('auth:change');\r\n }\r\n\r\n };\r\n\r\n return {\r\n login: login,\r\n logout: logout,\r\n initialize: initialize,\r\n register: register,\r\n authentication: authentication\r\n }\r\n };\r\n\r\n})();","(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app')\r\n .factory('trackingService', ['$window', trackingService]);\r\n\r\n function trackingService($window) {\r\n return {\r\n trackEvent: function (action, position) {\r\n if (typeof $window.DataMappingInterface !== 'undefined') {\r\n $window.DataMappingInterface.init({\r\n eventAction: 'linkClick',\r\n eventCode: 'Link_Click',\r\n prioritypush: true,\r\n additionaldata: {\r\n 'events.linkName': action,\r\n 'events.linkPositions': position || 'Body'\r\n },\r\n datatransform: false\r\n });\r\n }\r\n }\r\n }\r\n };\r\n\r\n})();","\r\n(function () {\r\n 'use strict';\r\n\r\n angular\r\n .module('app')\r\n .factory('utilService', [utilService]);\r\n\r\n function utilService() {\r\n\r\n var errorEnum = {\r\n ALL: 0,\r\n VALIDATIONS: 1,\r\n EXCEPTIONS: 2\r\n }\r\n\r\n var parseViewModelResponse = function(resp, errorEnum) {\r\n switch (errorEnum) {\r\n case 0:\r\n return parseValidations(resp).concat(parseExceptions(resp));\r\n case 1:\r\n return parseValidations(resp);\r\n case 2:\r\n return parseExceptions(resp);\r\n default:\r\n return [];\r\n }\r\n };\r\n\r\n var parseValidations = function (resp) {\r\n\r\n var validationErrors = [];\r\n\r\n if (resp && resp.data && resp.data.modelState) {\r\n _.forOwn(resp.data.modelState,\r\n function(value, key) {\r\n _.forOwn(resp.data.modelState[key],\r\n function(val, idx) {\r\n validationErrors.push(resp.data.modelState[key][idx]);\r\n });\r\n });\r\n }\r\n\r\n return validationErrors;\r\n };\r\n\r\n var parseExceptions = function (resp) {\r\n\r\n var exceptions = [];\r\n\r\n if (resp && resp.data && resp.data.exceptions) {\r\n _.each(resp.data.exceptions, function (error) {\r\n exceptions.push(error);\r\n });\r\n }\r\n\r\n return exceptions;\r\n };\r\n\r\n return {\r\n errorEnum: errorEnum,\r\n parseViewModelResponse: parseViewModelResponse\r\n }\r\n };\r\n\r\n})();","angular.module(\"templates\").run([\"$templateCache\", function($templateCache) {$templateCache.put(\"account/account.html\",\"
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n

New user?Please allow one business day for your approval to be emailed to you.

\\r\\n

SupportFor support contact DIRECTV Commercial Tech Services Support at g25625@directv.com. Email is monitored Monday through Friday, 5:00 am to 5:30 pm MT. Response time is one business day or less.

\\r\\n
\\r\\n
\\r\\n
\");\n$templateCache.put(\"admin/admin.html\",\"
\\r\\n
\\r\\n
\\r\\n

Site administration

\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\");\n$templateCache.put(\"home/home.html\",\"
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n

Access support documents and videos

\\r\\n

The information you need to successfully sell and install DIRECTV Lodging & Institutions solutions.

\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\\"\\\"\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
{{secondaryCategory.name}}
\\r\\n {{document.name}}\\r\\n
{{document.description}}\\r\\n
{{document.fileSizeText}} \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n Download\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n {{document.name}}\\r\\n
{{document.description}}\\r\\n
{{document.fileSizeText}}\\r\\n \\\"\\\"Download\\r\\n
\\r\\n
\\r\\n

No documents match that criteria.

\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\");\n$templateCache.put(\"home/video.html\",\"
\\r\\n

{{name}}

\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\");\n$templateCache.put(\"shared/footer.html\",\"
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n

Contact support

\\r\\n

For support contact DIRECTV Commercial Tech Services Support at g25625@directv.com. Email is monitored Monday through Friday, 5:00 am to 5:30 pm MT. Response time is one business day or less.

\\r\\n
\\r\\n v {{vm.buildNumber }}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\");\n$templateCache.put(\"shared/nav.html\",\"
\\r\\n \\r\\n
\");\n$templateCache.put(\"shared/notification.html\",\"
\\r\\n

Notifications

\\r\\n
\\r\\n
\\r\\n
\\r\\n

{{description}}

\\r\\n
\\r\\n
\\r\\n \\r\\n
\");\n$templateCache.put(\"shared/notificationbar.html\",\"
\\r\\n
\\r\\n
\\r\\n \\\"\\\"\\r\\n
\\r\\n
\\r\\n

{{vm.notification.title}} Learn more.

\\r\\n
\\r\\n
\\r\\n
\\r\\n\");\n$templateCache.put(\"account/forgot/forgotpassword.html\",\"
Forgot password
\\r\\n
\\r\\n

Thank you

\\r\\n

Instructions have been sent to the email address provided. Please note that it may taek up to 15 minutes for the email to arrive.

\\r\\n
If you don\\'t see the email after 15 minutes...
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n Valid email address is required\\r\\n
\\r\\n \\r\\n
\\r\\n Cancel\\r\\n
\\r\\n
\");\n$templateCache.put(\"account/forgot/passwordreset.html\",\"
Password reset for {{vm.userInfo.email}}
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n Password is required\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n Password confirmation is required\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n Cancel\\r\\n
\\r\\n
\");\n$templateCache.put(\"account/login/login.html\",\"
Welcome to
\\r\\n

\\r\\n DIRECTV L&I
\\r\\n Product Support\\r\\n

\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n Email address is required\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n Password is required\\r\\n
\\r\\n
\\r\\n Forgot Password?\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n Not registered? Get started here\\r\\n
\\r\\n
\\r\\n
\\r\\n
\");\n$templateCache.put(\"account/register/confirmation.html\",\"
\\r\\n

Request created

\\r\\n
\\r\\n
\\r\\n
\\r\\n

Your request for a registered user account has been received. You will receive an email regarding your account status within 1 business day.

\\r\\n
\\r\\n
\\r\\n \\r\\n
\");\n$templateCache.put(\"account/register/register.html\",\"
Register
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n Login credentials\\r\\n
\\r\\n \\r\\n \\r\\n Email address is required\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n Email address confirmation is required\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n Password is required\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n Password confirmation is required\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n Account type is required\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n Account information\\r\\n
\\r\\n \\r\\n \\r\\n First name is required\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n Last name is required\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n Contact information\\r\\n
\\r\\n \\r\\n \\r\\n Address 1 is required\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n Address 2 is required\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n City is required\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n State is required\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n ZIP is required\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n Office phone is required\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n Mobile phone is required\\r\\n
\\r\\n\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n Already have an account?Sign in\\r\\n
\\r\\n
\\r\\n\\r\\n
\");\n$templateCache.put(\"admin/approvals/approvals.html\",\"
\\r\\n

Outstanding approvals

\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\\"\\\"\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n

No results found.

\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n Actions\\r\\n \\r\\n Name\\r\\n \\r\\n Role\\r\\n \\r\\n Email\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
    \\r\\n
    \\r\\n
    \\r\\n
    \\r\\n
    \\r\\n \\r\\n \\r\\n \\r\\n
    \\r\\n
    \\r\\n
    \\r\\n
    \\r\\n
    \\r\\n
    \\r\\n

    Showing {{ vm.approvals.rows.length }} of {{ vm.approvals.pagination.total }} total users pending approval.

    \\r\\n
    \\r\\n
    \\r\\n
    \\r\\n
    \\r\\n\");\n$templateCache.put(\"admin/documents/add.html\",\"
    \\r\\n
    \\r\\n

    Document

    \\r\\n
    \\r\\n
    \\r\\n
    \\r\\n
    \\r\\n

    \\r\\n \\r\\n File is required\\r\\n
    \\r\\n
    \\r\\n \\r\\n \\r\\n Document description is required\\r\\n
    \\r\\n
    \\r\\n \\r\\n \\r\\n Search term is required\\r\\n
    \\r\\n
    \\r\\n \\r\\n \\r\\n Primary category is required\\r\\n
    \\r\\n
    \\r\\n \\r\\n \\r\\n Secondary category is required\\r\\n
    \\r\\n
    \\r\\n \\r\\n At least one role is required\\r\\n
    \\r\\n
    \\r\\n
    \\r\\n

    Uploading...

    \\r\\n \\r\\n
    \\r\\n \\r\\n \\r\\n
    \\r\\n
    \\r\\n
    \");\n$templateCache.put(\"admin/documents/confirmation.html\",\"
    \\r\\n

    Please confirm

    \\r\\n
    \\r\\n
    \\r\\n
    \\r\\n

    Are you sure you want to permanently remove this document?

    \\r\\n
    \\r\\n
    \\r\\n \\r\\n \\r\\n
    \");\n$templateCache.put(\"admin/documents/documents.html\",\"
    \\r\\n

    Document management

    \\r\\n\\r\\n
    \\r\\n
    \\r\\n \\r\\n
    \\r\\n
    \\r\\n
    \\r\\n \\r\\n \\\"\\\"\\r\\n
    \\r\\n
    \\r\\n
    \\r\\n
    \\r\\n No results found.\\r\\n
    \\r\\n
    \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
    NameSizeCreated
    \\r\\n \\r\\n \\r\\n
    \\r\\n
    \\r\\n
    \\r\\n
    \\r\\n
    \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n

      Showing {{ vm.documents.rows.length }} of {{ vm.documents.pagination.total }} total documents.

      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\");\n$templateCache.put(\"admin/documents/edit.html\",\"
      \\r\\n
      \\r\\n

      Document

      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n

      \\r\\n \\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n Document description is required\\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n Search term is required\\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n Primary category is required\\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n Secondary category is required\\r\\n
      \\r\\n \\r\\n At least one role is required\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n

      Uploading...

      \\r\\n \\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n
      \");\n$templateCache.put(\"admin/notification/notification.html\",\"
      \\r\\n

      Notifications

      \\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n\");\n$templateCache.put(\"admin/settings/confirmdelete.html\",\"
      \\r\\n

      Please confirm

      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n

      Are you sure you want to permanently remove this secondary category?

      \\r\\n

      Removing this category will permanently remove all documents associated with this secondary category. To avoid losing any documents, please reassign any documents using this secondary category before deleting.

      \\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n
      \");\n$templateCache.put(\"admin/settings/settings.html\",\"
      \\r\\n

      Document categories

      \\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n
      \\r\\n
      \\r\\n\");\n$templateCache.put(\"admin/users/confirmation.html\",\"
      \\r\\n

      Please confirm

      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n

      Are you sure you want to permanently remove this user?

      \\r\\n
      \\r\\n
      \\r\\n \\r\\n \\r\\n
      \");\n$templateCache.put(\"admin/users/users.html\",\"
      \\r\\n

      Users

      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n \\r\\n \\\"\\\"\\r\\n\\r\\n
      \\r\\n
      \\r\\n
      \\r\\n \\r\\n
      \\r\\n No results found.\\r\\n
      \\r\\n\\r\\n
      \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
      \\r\\n Actions\\r\\n \\r\\n Name\\r\\n Role\\r\\n Email\\r\\n
      \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
      \\r\\n \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
      \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n \\r\\n \\r\\n \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n

        Showing {{ vm.users.rows.length }} of {{ vm.users.pagination.total }} total approved {{ vm.selectedRole()}}.

        \\r\\n
        \\r\\n
        \\r\\n
        \\r\\n\");}]);"]}