angular.module("FICApp", ["ngRoute"]) .config(function($routeProvider, $locationProvider) { $routeProvider .when("/edit", { controller: "MyTeamController", templateUrl: "views/team-edit.html" }) .when("/rank", { controller: "RankController", templateUrl: "views/rank.html" }) .when("/:theme", { controller: "ExerciceController", templateUrl: "views/theme.html" }) .when("/:theme/:exercice", { controller: "ExerciceController", templateUrl: "views/theme.html" }) .when("/", { controller: "HomeController", templateUrl: "views/home.html" }) .otherwise({ redirectTo: "/" }); $locationProvider.html5Mode(true); }) .run(function($rootScope) { $rootScope.current_theme = 0; $rootScope.current_exercice = 0; }); angular.module("FICApp") .controller("DataController", function($scope, $http, $rootScope) { var actMenu = function() { if ($scope.my && $scope.themes) { angular.forEach($scope.themes, function(theme, key) { $scope.themes[key].exercice_solved = 0; angular.forEach(theme.exercices, function(exercice, k) { if ($scope.my.exercices[k] && $scope.my.exercices[k].solved) { $scope.themes[key].exercice_solved++; } }); }); } } var repeat = function() { $http.get("/themes.json").success(function(themes) { $scope.themes = themes; angular.forEach(themes, function(theme, key) { this[key].exercice_count = Object.keys(theme.exercices).length; }, themes); actMenu(); }); $http.get("/teams.json").success(function(teams) { $scope.teams_count = Object.keys(teams).length $scope.teams = teams; $scope.rank = []; angular.forEach($scope.teams, function(team, tid) { team.id = tid; this.push(team); }, $scope.rank); }); $http.get("/my.json").success(function(my) { $scope.my = my; actMenu(); }); console.log("refresh!"); } repeat(); setInterval(repeat, 60000); }) .controller("ExerciceController", function($scope, $routeParams, $http, $rootScope) { $rootScope.current_theme = $routeParams.theme; if ($routeParams.exercice) { $rootScope.current_exercice = $routeParams.exercice; } else { if ($scope.themes && $scope.my && $scope.themes[$scope.current_theme]) { var exos = Object.keys($scope.themes[$scope.current_theme].exercices); var i = 0; for (; i < exos.length - 1; i++) { if (!$scope.my.exercices[exos[i]] || !$scope.my.exercices[exos[i]].solved) break; } $rootScope.current_exercice = exos[i]; } else { $rootScope.current_exercice = 0; } } $scope.ssubmit = function() { if (!$("#solution").val().length) { return false } $http({ url: "/submit/" + $rootScope.current_exercice, method: "POST", data: $("#solution").val() }).success(function(data, status, header, config) { $scope.messageClass = {"alert-success": true}; $scope.message = data.errmsg; $scope.refresh = function() { $http.get("/my.json").success(function(my) { if ($scope.my.exercices[$rootScope.current_exercice].solved_time != my.exercices[$rootScope.current_exercice].solved_time) { $scope.my = my; } else { setTimeout($scope.refresh, 750); } }); }; $scope.refresh() }).error(function(data, status, header, config) { if (status >= 500) { $scope.my.exercices[$rootScope.current_exercice].submitted = false; } $scope.messageClass = {"alert-danger": true}; $scope.message = data.errmsg; }); $scope.my.exercices[$rootScope.current_exercice].submitted = true; }; }) .controller("MyTeamController", function($scope, $rootScope) { $rootScope.current_theme = 0; $rootScope.current_exercice = 0; $rootScope.title = "Edit team"; }) .controller("RankController", function($scope, $rootScope) { $rootScope.current_theme = 0; $rootScope.current_exercice = 0; $rootScope.title = "Classement général"; $scope.fields = ["rank", "name", "score"]; $scope.rankOrder = "rank"; $scope.reverse = false; $scope.order = function(fld) { if ($scope.rankOrder == fld) { $scope.reverse = !$scope.reverse; } else { $scope.rankOrder = fld; $scope.reverse = false; } }; }) .controller("HomeController", function($scope, $rootScope) { $rootScope.current_theme = 0; $rootScope.current_exercice = 0; $rootScope.title = ""; }); function sready() { if ($("#solution").val().length) { $("#sbmt").removeClass("disabled"); } else { $("#sbmt").addClass("disabled"); } };