mirror of
https://github.com/pretix/pretix.git
synced 2026-05-06 15:24:02 +00:00
Synchronize cart countdown with server time
This commit is contained in:
@@ -3,6 +3,22 @@ var cart = {
|
||||
_deadline: null,
|
||||
_deadline_interval: null,
|
||||
_deadline_call: 0,
|
||||
_time_offset: 0,
|
||||
|
||||
_get_now: function () {
|
||||
return moment().add(cart._time_offset, 'ms');
|
||||
},
|
||||
|
||||
_calc_offset: function () {
|
||||
if (typeof window.performance === "undefined") {
|
||||
return;
|
||||
}
|
||||
var perf = window.performance.timing;
|
||||
var server_time = Math.round(parseFloat($("body").attr("data-now")) * 1000);
|
||||
// We use requestStart as we don't know how latency is distributed and we rather want to err on the safe side
|
||||
var client_time = perf.requestStart;
|
||||
cart._time_offset = server_time - client_time;
|
||||
},
|
||||
|
||||
draw_deadline: function () {
|
||||
function pad(n, width, z) {
|
||||
@@ -16,8 +32,9 @@ var cart = {
|
||||
// Language files are not loaded yet, don't run during the first seconds
|
||||
return;
|
||||
}
|
||||
var diff_minutes = Math.floor(cart._deadline.diff(moment()) / 1000 / 60);
|
||||
var diff_seconds = Math.floor(cart._deadline.diff(moment()) / 1000 % 60);
|
||||
var now = cart._get_now();
|
||||
var diff_minutes = Math.floor(cart._deadline.diff(now) / 1000 / 60);
|
||||
var diff_seconds = Math.floor(cart._deadline.diff(now) / 1000 % 60);
|
||||
if (diff_minutes < 0) {
|
||||
$("#cart-deadline").text(gettext("The items in your cart are no longer reserved for you."));
|
||||
$("#cart-deadline-short").text(
|
||||
@@ -40,6 +57,7 @@ var cart = {
|
||||
"use strict";
|
||||
cart._deadline = moment($("#cart-deadline").attr("data-expires"));
|
||||
cart._deadline_interval = window.setInterval(cart.draw_deadline, 500);
|
||||
cart._calc_offset();
|
||||
cart.draw_deadline();
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user