server/frontend/static/js/public.js

182 lines
5.3 KiB
JavaScript

angular.module("FICApp", ["ngSanitize", "ngAnimate"]);
String.prototype.capitalize = function() {
return this
.toLowerCase()
.replace(
/(^|\s)([a-z])/g,
function(m,p1,p2) { return p1+p2.toUpperCase(); }
);
}
angular.module("FICApp")
.controller("TimeController", function($scope, $rootScope, $http, $timeout) {
$scope.time = {};
var initTime = function() {
$timeout.cancel($scope.cbi);
$scope.cbi = $timeout(initTime, 10000);
$http.get("/time.json").success(function(time) {
console.log("upd time");
time.he = (new Date()).getTime();
sessionStorage.userService = angular.toJson(time);
});
};
initTime();
function updTime() {
$timeout.cancel($scope.cb);
$scope.cb = $timeout(updTime, 1000);
if (sessionStorage.userService) {
var time = angular.fromJson(sessionStorage.userService);
var srv_cur = (Date.now() + (time.cu * 1000 - time.he)) / 1000;
var remain = time.du;
if (time.st == Math.floor(srv_cur)) {
$scope.refresh(true);
$rootScope.startIn = 0;
}
if (time.st > 0 && time.st <= srv_cur) {
remain = time.st + time.du - srv_cur;
} else if (time.st > 0) {
$rootScope.startIn = Math.floor(time.st - srv_cur);
}
if (remain < 0) {
remain = 0;
$scope.time.end = true;
$scope.time.expired = true;
} else if (remain < 60) {
$scope.time.end = false;
$scope.time.expired = true;
} else {
$scope.time.end = false;
$scope.time.expired = false;
}
$scope.time.start = time.st * 1000;
$scope.time.duration = time.du;
$scope.time.remaining = remain;
$scope.time.hours = Math.floor(remain / 3600);
$scope.time.minutes = Math.floor((remain % 3600) / 60);
$scope.time.seconds = Math.floor(remain % 60);
}
}
updTime();
})
.controller("EventsController", function($scope, $http, $interval) {
$scope.events = [];
var refreshEvents = function() {
$http.get("/events.json").then(function(response) {
if ($scope.lasteventsetag != undefined && $scope.lasteventsetag == response.headers().etag)
return;
$scope.lasteventsetag = response.headers().etag;
var events = response.data;
var now = new Date();
var key = 0;
angular.forEach($scope.events, function(event) {
event.keep = 0;
});
angular.forEach(events, function(event) {
event.time = Date.parse(event.time);
//event.since = now.getTime() - now.getTimezoneOffset() * 60000 - event.time;
event.since = now.getTime() - event.time;
event.keep = 1;
while (key <= $scope.events.length) {
if (key >= $scope.events.length) {
$scope.events.push(event);
break;
} else if (event.id == $scope.events[key].id) {
$scope.events[key].txt = event.txt;
$scope.events[key].time = event.time;
$scope.events[key].kind = event.kind;
$scope.events[key].since = event.since;
$scope.events[key].keep = 1;
break;
} else if (event.time > $scope.events[key].time) {
$scope.events.unshift(event);
break;
} else {
key += 1;
}
}
});
angular.forEach($scope.events, function(event, i) {
if (event.keep == 0) {
$scope.events.splice(i, 1);
}
});
});
}
refreshEvents()
$interval(refreshEvents, 2100);
})
.controller("DataController", function($scope, $http, $rootScope, $interval) {
var refreshScene = function() {
$http.get("/public.json").then(function(response) {
if ($scope.lastpublicetag == response.headers().etag)
return;
$scope.lastpublicetag = response.headers().etag;
$scope.scene = response.data;
});
}
var refreshData = function() {
$http.get("/my.json").then(function(response) {
if ($scope.lastmyetag == response.headers().etag)
return;
$scope.lastmyetag = response.headers().etag;
$scope.my = response.data;
});
$http.get("/stats.json").success(function(stats) {
$scope.stats = stats;
});
$http.get("/settings.json").success(function(settings) {
$scope.settings = settings;
});
$http.get("/themes.json").then(function(response) {
if ($scope.lastthemeetag == response.headers().etag)
return;
$scope.lastthemeetag = response.headers().etag;
var themes = response.data;
$scope.themes = themes;
$scope.max_gain = 0;
angular.forEach(themes, function(theme, key) {
this[key].exercice_count = Object.keys(theme.exercices).length;
this[key].gain = 0;
angular.forEach(theme.exercices, function(ex, k) {
this.gain += ex.gain;
}, theme);
$scope.max_gain += theme.gain;
}, themes);
});
$http.get("/teams.json").then(function(response) {
if ($scope.lastteametag == response.headers().etag)
return;
$scope.lastteametag = response.headers().etag;
var teams = response.data;
$scope.teams_count = Object.keys(teams).length
$scope.teams = teams;
$scope.rank = [];
angular.forEach($scope.teams, function(team, tid) {
team.id = tid;
if (team.rank) {
this.push(team);
}
}, $scope.rank);
});
}
refreshData();
refreshScene();
$interval(refreshData, 4200);
$interval(refreshScene, 900);
})
.controller("TeamController", function($scope, $http, $interval) {
$scope.mystats = null;
$http.get("/api/teams/" + $scope.team.id + "/stats.json").success(function(mstats) {
$scope.mystats = mstats;
});
});