String.prototype.capitalize = function() { return this .toLowerCase() .replace( /(^|\s|-)([a-z])/g, function(m,p1,p2) { return p1+p2.toUpperCase(); } ); } Array.prototype.inArray = function(v) { return this.reduce(function(presence, current) { return presence || current == v; }, false); } angular.module("FICApp") .directive('autofocus', ['$timeout', function($timeout) { return { restrict: 'A', link : function($scope, $element) { $timeout(function() { $element[0].focus(); }); } } }]) .directive('autocarousel', ['$timeout', function($timeout) { return { restrict: 'A', link : function($scope, $element) { $timeout(function() { $($element[0]).carousel(); }); } } }]); angular.module("FICApp") .filter("stripHTML", function() { return function(input) { if (!input) return input; return input.replace( /(<([^>]+)>)/ig, "" ); } }) .filter("capitalize", function() { return function(input) { return input.capitalize(); } }) .filter("rankTitle", function() { var itms = { "rank": "Rang", "name": "Équipe", "score": "Score", }; return function(input) { if (itms[input] != undefined) { return itms[input]; } else { return input; } } }) .filter("time", function() { return function(input) { input = Math.floor(input); if (input == undefined) { return "--"; } else if (input >= 10) { return input; } else { return "0" + input; } } }) .filter("since", function() { return function(passed) { if (passed < 120000) { return "Il y a " + Math.floor(passed/1000) + " secondes"; } else { return "Il y a " + Math.floor(passed/60000) + " minutes"; } } }) .filter("size", function() { var units = [ "o", "kio", "Mio", "Gio", "Tio", "Pio", "Eio", "Zio", "Yio", ] return function(input) { var res = input; var unit = 0; while (res > 1024) { unit += 1; res = res / 1024; } return (Math.round(res * 100) / 100) + " " + units[unit]; } }) .filter("coeff", function() { return function(input) { if (input > 1) { return "+" + Math.floor((input - 1) * 100) + " %" } else if (input < 1) { return "-" + Math.floor((1 - input) * 100) + " %" } else { return ""; } } }) .filter("objectLength", function() { return function(input) { if (input !== undefined) return Object.keys(input).length; else return ""; } }); angular.module("FICApp") .controller("CountdownController", function($scope, $rootScope, $interval) { var time; if (sessionStorage.userService) time = angular.fromJson(sessionStorage.userService); $scope.time = {}; $rootScope.getSrvTime = function() { if (time.cu && time.he) return new Date(Date.now() + (time.cu - time.he)); else return undefined; } $rootScope.recvTime = function(response) { time = { "cu": Math.floor(response.headers("x-fic-time") * 1000), "he": (new Date()).getTime(), }; sessionStorage.userService = angular.toJson(time); return time; } function updTime() { if (time && $rootScope.settings) { var srv_cur = new Date(Date.now() + (time.cu - time.he)); // Refresh on start/activate time reached if (Math.floor($rootScope.settings.start / 1000) == Math.floor(srv_cur / 1000) ||Math.floor($rootScope.settings.activateTime / 1000) == Math.floor(srv_cur / 1000)) $rootScope.refresh(true, true); var remain = 0; if ($rootScope.settings.start == 0) { $scope.time = {}; return } else if ($rootScope.settings.start > srv_cur) { $scope.startIn = Math.floor(($rootScope.settings.start - srv_cur) / 1000); remain = $rootScope.settings.end - $rootScope.settings.start; } else if ($rootScope.settings.end > srv_cur) { $scope.startIn = 0; remain = $rootScope.settings.end - srv_cur; } $rootScope.timeProgression = 1 - remain / ($rootScope.settings.end - $rootScope.settings.start); remain = remain / 1000; 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.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(); $interval(updTime, 1000); })