election/doc/source/_static/event_timer.js
Sean McGinnis 7c4e97a838
Update event table to work with simulateneous events
This updates the table status logic to handle multiple Current or Next
events. It also simplifies some of that detection logic and handles
multiple items in the countdown timer.

Change-Id: Iff85bb59d4d9a472b56b552f663709f7364b992a
Signed-off-by: Sean McGinnis <sean.mcginnis@gmail.com>
2020-03-24 13:45:41 -05:00

68 lines
2.6 KiB
JavaScript

/* Licensed under the Apache License, Version 2.0
*/
var event_date;
function startTime() {
var delta = parseInt(event_date - (new Date).getTime() / 1000);
var days = parseInt(delta / (3600 * 24));
var hours = parseInt(delta / 3600) % 24;
var minutes = parseInt( delta / 60 ) % 60;
var seconds = delta % 60;
document.getElementById('eventtimer').innerHTML = days+'d '+hours+'h '+minutes+'m '+seconds+'s';
var t = setTimeout(startTime, 500);
}
function set_event_status(event_name, event_status) {
var td = $("td:contains('"+event_name+"')");
if (event_status == 'Next' || event_status == 'Current') {
td.css("font-weight", "bold")
}
td.next().next().next().html(event_status);
}
function setup_timeline() {
var now = parseInt((new Date).getTime() / 1000);
var next_events = []
var current_events = []
var next_event_end
for (i = 0; i < events_timeline.length; i++) {
var current_event = events_timeline[i];
var current_event_start = Date.parse(current_event.start + "Z") / 1000;
var current_event_end = Date.parse(current_event.end + "Z") / 1000;
if (now > current_event_end) {
set_event_status(current_event.name, 'Past');
}
else if (now >= current_event_start && now < current_event_end) {
set_event_status(current_event.name, 'Current');
if (next_event_end == undefined) {
next_event_end = current_event_end;
}
current_events.push(current_event.name)
event_date = current_event_end
startTime();
}
else if (now < current_event_start &&
(next_event_end == undefined || current_event_end <= next_event_end)) {
set_event_status(current_event.name, 'Next');
if (next_event_end == undefined) {
next_event_end = current_event_end;
}
next_events.push(current_event.name)
event_date = current_event_start
startTime();
}
else if (now < current_event_start && current_event_end > next_event_end) {
set_event_status(current_event.name, 'Future');
}
}
// Set the countdown timer based on any active or upcoming events
if (current_events.length > 0) {
document.getElementById('eventname').innerHTML = current_events.join(" and ") + ' end in';
}
else if (next_events.length > 0) {
document.getElementById('eventname').innerHTML = next_events.join(" and ") + ' start in';
}
}
$(document).ready(setup_timeline);