election/doc/source/_static/event_timer.js
Tony Breeds 4fdb2016a3 [JavaScript] Switch from jQuery().ready() to pure JavaScript
After [1,2] were merged in openstack/requirements we get a new versions
of Sphinx and Docutils.  I don't fully understand why but these new
versions seem to alter the asynchronous loading behavior sych that when
event_timer.js is loaded the jQuery code hasn't been fully initialised.

This results in `$(document).ready(setup_timeline);` generating an
"uncaught ReferenceError: $ is not defined" JS error.  We don't
actually need jQuery just a way to detect that the page is loaded to
update the event table.

This change switches to pure JS to set an onload() function.

[1] https://review.opendev.org/c/openstack/requirements/+/891751
[2] https://review.opendev.org/c/openstack/requirements/+/891694

Change-Id: Ia44a55cb7a32fb6ddf9f05ac77bb56921cef446a
2023-08-28 17:26:14 -07: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';
}
}
window.onload = function () { setup_timeline() }