let index = 0; let cue_timestamp = []; let query_timestamp = []; let min_timespan = []; let eventSource = new EventSource("eventsource.php?query=-1", { headers: { 'Accept-Encoding:': 'identity' } }); eventSource.onmessage = function (event) { let data = JSON.parse(event.data); for (let elementID in data) if (elementID.substring(0, 6) === "evt_tp") { index = Number(elementID.substring(6)); query_timestamp[index] = Number(data[elementID]); } else if (elementID.substring(0, 6) === "evt_tm") { index = Number(elementID.substring(6)); min_timespan[index] = Number(data[elementID]); } else if (elementID.substring(0, 6) === "evt_ts") { index = Number(elementID.substring(6)); cue_timestamp[index] = Number(data[elementID]); countup(index); } else { let element = document.getElementById(elementID); if (element) element.innerHTML = data[elementID]; } }; function countup(index) { let timespan = new Date().getTime() - cue_timestamp[index] * 1000; let timestring; let nextCountup; if (timespan < 1000) { timestring = "jetzt"; nextCountup = 1000-timespan; } else { let h = Math.floor(timespan / 3600000); let m = Math.floor(timespan / 60000) % 60; let s = Math.floor(timespan / 1000) % 60; let ms = timespan % 1000; if (h > 0) { timestring = (h > 0 ? h + " h, " : "") + (h > 0 && m < 10 ? "0" : "") + m + " min"; nextCountup = 60001 - ms - 1000 * s; } else { nextCountup = 1001 - ms; timestring = (m > 0 ? m + " min, " : "") + (m > 0 && s < 10 ? "0" : "") + s + " s"; } } setTimeout(countup, nextCountup, index); let elementID = "evt_ts" + index; let el = document.getElementById(elementID); if (el != null) el.innerHTML = timestring; } function countdown(index) { let timespan = query_timestamp[index] * 1000 - new Date().getTime(); if (timespan < min_timespan[index]*1000) timespan = min_timespan[index]*1000; let timestring; let nextCountdown; if (timespan < 1000) { timestring = "Aufruf erfolgt in Kürze."; nextCountdown = 1000; } else { let h = Math.floor(timespan / 3600000); let m = Math.floor(timespan / 60000) % 60; let s = Math.floor(timespan / 1000) % 60; let ms = timespan % 1000; if (h*60+m > 61) { timestring = (h > 0 ? h + " h, " : "") + (h > 0 && m < 10 ? "0" : "") + m + " min"; nextCountdown = ms+1 + 1000*s; } else { nextCountdown = ms+1; timestring = (m > 0 ? m + " min, " : "") + (m > 0 && s < 10 ? "0" : "") + s + " s"; } } setTimeout(countdown, nextCountdown, index); let elementID = "evt_tp" + index; let el = document.getElementById(elementID); if (el != null) el.innerHTML = timestring; } $(window).on('beforeunload', function(){ eventSource.close(); });