config.js 5.64 KB
angular.module('flashy', [
'flashy.LogoutController',
'flashy.LoginController',
'flashy.RootController',
'flashy.FeedController',
'flashy.DeckController',
'flashy.ClassAddController',
'flashy.RequestResetController',
'flashy.StudyController',
'flashy.UserService',
'flashy.FlashcardDirective',
'flashy.ResetPasswordController',
'flashy.VerifyEmailController',
'flashy.CardListController',
'ngCookies']).
config(function ($stateProvider, $urlRouterProvider, $httpProvider, $locationProvider) {
'use strict';
$httpProvider.defaults.withCredentials = true;
$httpProvider.defaults.xsrfCookieName = 'csrftoken';
$httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
var arrayMethods = Object.getOwnPropertyNames(Array.prototype);
arrayMethods.forEach(attachArrayMethodsToNodeList);
function attachArrayMethodsToNodeList(methodName) {
if (methodName !== 'length') {
NodeList.prototype[methodName] = Array.prototype[methodName];
}
};
$httpProvider.interceptors.push(function ($q) {
return {
'responseError': function (rejection) {
if (rejection.status >= 500) {
console.log('got error');
console.log(rejection);
$('body').html('<div class="card">Sorry, the server is not serving requests properly. Try again later</div>');
}
return $q.reject(rejection);
}
};
});
$locationProvider.html5Mode(true);
$urlRouterProvider.otherwise('/404');
var auth_resolve = {
authorize: function ($q, $state, UserService) {
console.log('resolving user before continuing');
var redirectAsNeeded = function () {
if (!UserService.isLoggedIn()) {
console.log(UserService.getUserData());
console.log('making the user log in');
$state.go('login');
}
};
if (UserService.isResolved()) return redirectAsNeeded();
return UserService.getUserData().then(redirectAsNeeded);
}
};
$stateProvider.
state('login', {
url: '/login',
templateUrl: 'templates/login.html',
controller: 'LoginController'
}).
state('logout', {
resolve: auth_resolve,
url: '/logout',
templateUrl: 'templates/logout.html',
controller: 'LogoutController'
}).
state('root', {
resolve: auth_resolve,
url: '/',
controller: 'RootController'
}).
state('feed', {
resolve: auth_resolve,
url: '/feed/{sectionId}',
templateUrl: 'templates/feed.html',
controller: 'FeedController'
}).
state('cardlist', {
resolve: auth_resolve,
url: '/cards/{sectionId}',
templateUrl: 'templates/cardlist.html',
controller: 'CardListController'
}).
state('addclass', {
resolve: auth_resolve,
url: '/addclass',
templateUrl: 'templates/addclass.html',
controller: 'ClassAddController'
}).
state('deck', {
resolve: auth_resolve,
url: '/deck/{sectionId}',
templateUrl: 'templates/deck.html',
controller: 'DeckController'
}).
state('study', {
resolve: auth_resolve,
url: '/study',
templateUrl: 'templates/study.html',
controller: 'StudyController'
}).
state('flashcard', {
resolve: auth_resolve,
url: '/flashcard',
templateUrl: 'templates/flashcard.html',
controller: 'FlashcardController'
}).
state('requestpasswordreset', {
url: '/requestpasswordreset',
templateUrl: 'templates/requestpasswordreset.html',
controller: 'RequestResetController'
}).
state('resetpassword', {
url: '/resetpassword/{uid}/{token}',
templateUrl: 'templates/resetpassword.html',
controller: 'ResetPasswordController'
}).
state('verifyemail', {
resolve: auth_resolve,
url: '/verifyemail/{key}',
templateUrl: 'templates/verifyemail.html',
controller: 'VerifyEmailController'
}).
state('404', {
url: '/404',
template: "<h1>This page doesn't exist!</h1>"
});
}).
run(function ($rootScope, $state, $stateParams, $location, UserService) {
$rootScope.$on('$stateChangeError', function (event, toState, toParams, fromState, fromParams, error) {
console.log('failed to change state: ' + error);
$state.go('login');
});
$rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {
if (['feed', 'deck', 'cardlist'].indexOf(toState.name) >= 0) {
localStorage.setItem('last_state', toState.name);
localStorage.setItem('last_state_params', JSON.stringify(toParams));
}
});
});