server/dashboard/static/js/dashboard.js

221 lines
6.5 KiB
JavaScript
Raw Normal View History

2016-01-25 02:09:22 +00:00
angular.module("FICApp", ["ngSanitize", "ngAnimate"]);
2018-02-04 20:24:40 +00:00
angular.module("FICApp")
.filter("objectLength", function() {
return function(input) {
if (input !== undefined)
return Object.keys(input).length;
else
return "";
}
});
2016-01-25 02:09:22 +00:00
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) {
2018-11-21 04:19:57 +00:00
$rootScope.time = {};
$rootScope.recvTime = function(response) {
sessionStorage.userService = angular.toJson({
"cu": Math.floor(response.headers("x-fic-time") * 1000),
"he": (new Date()).getTime(),
2016-01-25 02:09:22 +00:00
});
2018-11-21 04:19:57 +00:00
}
2016-01-25 02:09:22 +00:00
function updTime() {
$timeout.cancel($scope.cb);
$scope.cb = $timeout(updTime, 1000);
2018-11-21 04:19:57 +00:00
if (sessionStorage.userService && $rootScope.settings) {
2016-01-25 02:09:22 +00:00
var time = angular.fromJson(sessionStorage.userService);
2018-11-21 04:19:57 +00:00
var settings = $rootScope.settings;
var srv_cur = new Date(Date.now() + (time.cu - time.he));
if (Math.floor(settings.start / 1000) == Math.floor(srv_cur / 1000)) {
$rootScope.refresh(true);
2016-01-25 02:09:22 +00:00
}
2018-11-21 04:19:57 +00:00
var remain = 0;
if (settings.start == 0) {
$rootScope.time = {};
return
} else if (settings.start > srv_cur) {
$rootScope.startIn = Math.floor((settings.start - srv_cur) / 1000);
remain = settings.end - settings.start;
} else if (settings.end > srv_cur) {
$rootScope.startIn = 0;
remain = settings.end - srv_cur;
2016-01-25 02:09:22 +00:00
}
2018-11-21 04:19:57 +00:00
remain = remain / 1000;
2016-01-25 02:09:22 +00:00
if (remain < 0) {
remain = 0;
2018-11-21 04:19:57 +00:00
$rootScope.time.end = true;
$rootScope.time.expired = true;
2016-01-25 02:09:22 +00:00
} else if (remain < 60) {
2018-11-21 04:19:57 +00:00
$rootScope.time.end = false;
$rootScope.time.expired = true;
2016-01-25 02:09:22 +00:00
} else {
2018-11-21 04:19:57 +00:00
$rootScope.time.end = false;
$rootScope.time.expired = false;
2016-01-25 02:09:22 +00:00
}
2018-11-21 04:19:57 +00:00
$rootScope.time.remaining = remain;
$rootScope.time.hours = Math.floor(remain / 3600);
$rootScope.time.minutes = Math.floor((remain % 3600) / 60);
$rootScope.time.seconds = Math.floor(remain % 60);
2016-01-25 02:09:22 +00:00
}
}
updTime();
})
2017-03-31 17:47:48 +00:00
.controller("EventsController", function($scope, $http, $interval) {
$scope.events = [];
var refreshEvents = function() {
2018-01-23 01:26:55 +00:00
// Update times
var now = new Date().getTime();
$scope.events.forEach(function(ev) {
ev.since = now - ev.time;
});
2017-03-31 17:47:48 +00:00
$http.get("/events.json").then(function(response) {
2018-01-23 01:26:55 +00:00
// Don't make anything if the page hasn't changed
2017-03-31 17:47:48 +00:00
if ($scope.lasteventsetag != undefined && $scope.lasteventsetag == response.headers().etag)
return;
$scope.lasteventsetag = response.headers().etag;
var events = response.data;
2018-01-23 01:26:55 +00:00
var kEvents = {};
events.forEach(function(ev) {
kEvents[ev.id] = ev;
2017-03-31 17:47:48 +00:00
});
2018-01-23 01:26:55 +00:00
var kxEvents = {}
$scope.events.forEach(function(ev) {
kxEvents[ev.id] = ev;
2016-01-25 02:09:22 +00:00
});
2018-01-23 01:26:55 +00:00
var oldEvents = $(Object.keys(kxEvents)).not(Object.keys(kEvents)).get();
var newEvents = $(Object.keys(kEvents)).not(Object.keys(kxEvents)).get();
$scope.events.filter(function(val) {
return !oldEvents.inArray(val.id);
});
newEvents.forEach(function(ev) {
var event = kEvents[ev];
event.time = Date.parse(event.time);
event.since = now - event.time;
$scope.events.unshift(event);
2017-03-31 17:47:48 +00:00
});
});
}
refreshEvents()
$interval(refreshEvents, 2100);
})
2017-12-17 19:44:23 +00:00
.controller("CountdownController", function($scope, $interval) {
$scope.duration = 0;
$scope.init = function(end) {
$scope.initT(Date.parse(end)/1000);
}
$scope.initT = function(end) {
var time = angular.fromJson(sessionStorage.userService);
var srv_cur = (Date.now() + (time.cu * 1000 - time.he)) / 1000;
$scope.duration += Math.floor(end - srv_cur);
}
var stop = $interval(function() {
$scope.duration -= 1;
if ($scope.duration < -10)
$interval.cancel(stop);
}, 1000);
})
2017-03-31 17:47:48 +00:00
.controller("DataController", function($scope, $http, $rootScope, $interval) {
var pathname = window.location.pathname;
if (pathname == "/")
pathname = "/public0.html"
2017-03-31 17:47:48 +00:00
var refreshScene = function() {
$http.get(pathname.replace(".html", ".json")).then(function(response) {
if ($scope.lastpublicetag != undefined && $scope.lastpublicetag == response.headers().etag)
2017-03-31 17:47:48 +00:00
return;
$scope.lastpublicetag = response.headers().etag;
$scope.scene = response.data;
2016-01-25 02:09:22 +00:00
});
2017-03-31 17:47:48 +00:00
}
var refreshData = function() {
$http.get("/my.json").then(function(response) {
if ($scope.lastmyetag != undefined && $scope.lastmyetag == response.headers().etag)
2017-03-31 17:47:48 +00:00
return;
$scope.lastmyetag = response.headers().etag;
$scope.my = response.data;
2016-01-25 02:09:22 +00:00
});
2017-12-14 02:20:38 +00:00
$http.get("/stats.json").then(function(response) {
$scope.stats = response.data;
2016-01-25 02:09:22 +00:00
});
2017-12-14 02:20:38 +00:00
$http.get("/settings.json").then(function(response) {
2018-11-21 04:19:57 +00:00
$rootScope.recvTime(response);
response.data.start = new Date(response.data.start);
response.data.end = new Date(response.data.end);
response.data.generation = new Date(response.data.generation);
$rootScope.settings = response.data;
2017-04-02 09:40:23 +00:00
});
2017-03-31 17:47:48 +00:00
$http.get("/themes.json").then(function(response) {
if ($scope.lastthemeetag != undefined && $scope.lastthemeetag == response.headers().etag)
2017-03-31 17:47:48 +00:00
return;
$scope.lastthemeetag = response.headers().etag;
var themes = response.data;
2016-01-25 02:09:22 +00:00
$scope.themes = themes;
$scope.max_gain = 0;
angular.forEach(themes, function(theme, key) {
2018-01-26 11:01:05 +00:00
if (theme.exercices)
this[key].exercice_count = Object.keys(theme.exercices).length;
else
this[key].exercice_count = 0;
2016-01-25 02:09:22 +00:00
this[key].gain = 0;
angular.forEach(theme.exercices, function(ex, k) {
this.gain += ex.gain;
}, theme);
$scope.max_gain += theme.gain;
}, themes);
});
2017-03-31 17:47:48 +00:00
$http.get("/teams.json").then(function(response) {
if ($scope.lastteametag != undefined && $scope.lastteametag == response.headers().etag)
2017-03-31 17:47:48 +00:00
return;
$scope.lastteametag = response.headers().etag;
var teams = response.data;
2016-01-25 02:09:22 +00:00
$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);
2018-02-04 20:24:40 +00:00
$scope.pagesrank = Array(Math.ceil($scope.rank.length / 7)).fill(0).map(function(v, i){ return i; });
2016-01-25 02:09:22 +00:00
});
}
2017-03-31 17:47:48 +00:00
refreshData();
refreshScene();
$interval(refreshData, 4200);
$interval(refreshScene, 900);
})
.controller("TeamController", function($scope, $http, $interval) {
$scope.mystats = null;
2017-12-14 02:20:38 +00:00
$http.get("/api/teams/" + $scope.team.id + "/stats.json").then(function(response) {
$scope.mystats = response.data;
2017-03-31 17:47:48 +00:00
});
2016-01-25 02:09:22 +00:00
});