-(function(){
- 'use strict';
+let offset = 0;
- function update_timer(timer){
- var start = parseInt(timer.dataset.start);
- var stop = parseInt(timer.dataset.stop);
- var value = parseInt(timer.dataset.value);
- var now = Math.floor(Date.now() / 1000);
+function update_timer(timer){
+ var start = parseInt(timer.dataset.start);
+ var stop = parseInt(timer.dataset.stop);
+ var value = parseInt(timer.dataset.value);
+ var now = Math.floor(Date.now() / 1000) + offset;
- var left = stop - now;
- var total = stop - start;
- if(left < 0)
- left = 0;
+ var left = stop - now;
+ var total = stop - start;
+ if(left < 0)
+ left = 0;
- if(value) {
- value = Math.max(value * 3 / 10, value * left / total);
- timer.innerHTML = Math.floor(value);
- } else {
- var hours = left / 60 / 60;
- var minutes = left / 60 % 60;
- var seconds = left % 60;
- timer.innerHTML = sprintf('%02d:%02d:%02d', hours, minutes, seconds);
- }
+ if(value) {
+ value = Math.max(value * 3 / 10, value * left / total);
+ timer.innerHTML = Math.floor(value);
+ } else {
+ var hours = Math.floor(left / 60 / 60);
+ hours = hours < 10 ? '0' + hours : hours;
+ var minutes = Math.floor(left / 60) % 60;
+ minutes = minutes < 10 ? '0' + minutes : minutes;
+ var seconds = left % 60;
+ seconds = seconds < 10 ? '0' + seconds : seconds;
+ timer.innerHTML = hours + ':' + minutes + ':' + seconds;
}
+}
- $( document ).ready(function() {
- $('.timer').each(function(index, item){
- update_timer(item);
- setInterval(function(){update_timer(item)}, 1000);
- });
+$(() => {
+ $('.timer').each(item => {
+ update_timer(item);
+ setInterval(() => update_timer(item), 1000);
});
-})();
+ if($('.timer').length > 0) {
+ let xhr = new XMLHttpRequest();
+ xhr.open('HEAD', '/');
+ xhr.onload = () => {
+ let srvtime = Date.parse(xhr.getResponseHeader('Date'));
+ offset = Math.ceil((srvtime - Date.now()) / 1000);
+ console.log("Offset from server: " + offset);
+ };
+ xhr.send();
+ }
+});