User:ToxiBoi/LiveCountdown.js

From Wikipedia, the free encyclopedia

This is an old revision of this page, as edited by ToxiBoi (talk | contribs) at 04:06, 17 April 2020 ([v1.1] Move function outside of loop). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
var MainLoop = function (index) {
  var RefreshingAlready = false;
  // Setup again
  endDate = new Date(index.getAttribute("data-end")).getTime();
  now = new Date().getTime();
  distance = endDate - now;
  // Time calculations for days, hours, minutes and seconds (copied from W3Schools)
  var days = Math.floor(distance / (1000 * 60 * 60 * 24));
  var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
  var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
  var seconds = Math.floor((distance % (1000 * 60)) / 1000);

  // Display the result
  index.innerHTML =
    "There are <b>" +
    days +
    "</b> days, <b>" +
    hours +
    "</b> hours, <b>" +
    minutes +
    "</b> minutes, and <b>" +
    seconds +
    "</b> seconds until " +
    index.getAttribute("data-event") +
    ".";

  // If the count down is finished, refresh
  if (distance < 0) {
    index.innerHTML = "Countdown expired, refreshing...";
    if (!RefreshingAlready) {
      document.location.reload();
      RefreshingAlready = true;
    }
  }
};
var counts = document.getElementsByClassName("toxicountdown");
if (counts.length > 0) {
  for (var i = 0; i < counts.length; i++) {
    counts[i].innerHTML = "Loading countdown...";
    var endDate = new Date(counts[i].getAttribute("data-end")).getTime();
    var now = new Date().getTime();
    var distance = endDate - now;

    if (distance < 0) {
      counts[i].innerHTML = "The countdown finished.";
    } else {
      var update = setInterval(MainLoop(counts[i]), 1000);
    }
  }
} else {
  console.log("[LiveCountdown] No countdown widgets detected.");
}