diff options
author | 2018-03-21 22:37:37 +0000 | |
---|---|---|
committer | 2018-03-21 22:37:37 +0000 | |
commit | 5e27c8ebdce0f5542ca94e2dd2970cdfd7f08d24 (patch) | |
tree | fd62efbf41141b89f3eae81ba1e56b79dec7f94c /static | |
parent | Countdown (diff) |
Rewrite countdown; Now a notification present on all pages
Diffstat (limited to 'static')
-rw-r--r-- | static/js/countdown.js | 119 |
1 files changed, 76 insertions, 43 deletions
diff --git a/static/js/countdown.js b/static/js/countdown.js index 53553fb7..80cfb30c 100644 --- a/static/js/countdown.js +++ b/static/js/countdown.js @@ -1,44 +1,77 @@ -var heading = document.getElementById("countdown-title"); -var startjam = new Date(Date.UTC(2018, 2, 23)); -var endjam = new Date(Date.UTC(2018, 2, 26)); -var goal; -var now = Date.now(); -if (now+1000 >= endjam.getTime()) { - heading.innerHTML = "Code Jam has finished!"; -} else { - if (now > startjam.getTime()) { - heading.innerHTML = "Code Jam ends in..."; - goal = endjam.getTime(); - } else { - heading.innerHTML = "Next Code Jam starts in..."; - goal = startjam.getTime(); - } - var refreshCountdown = setInterval(function() { - var delta = goal - Date.now(); - if (delta <= 1000) { - clearInterval(refreshCountdown); - location.reload(); - } - var days = Math.floor(delta / (24*60*60*1000)); - delta -= days * (24*60*60*1000); - var hours = Math.floor(delta / (60*60*1000)); - delta -= hours * (60*60*1000); - var minutes = Math.floor(delta / (60*1000)); - delta -= minutes * (60*1000); - var seconds = Math.floor(delta / 1000); - if (days < 10) { - days = "0"+days; - } - if (hours < 10) { - hours = "0"+hours; +"use strict"; + +(function(){ // Use a closure to avoid polluting global scope + const startjam = new Date(Date.UTC(2018, 2, 23)); + const endjam = new Date(Date.UTC(2018, 2, 26)); + + let now = Date.now(); + let goal; + + if (now+1000 < endjam.getTime()) { // Only do anything if the jam hasn't ended + UIkit.notification( // Spawn the notification + { + message: + "<div class='uk-text-center'>" + + " <span id=\"countdown-title\" class=\"uk-text-center\">" + + " <a href=\"/info/jams\">Code Jam</a> Countdown" + + " </span>" + + " <p class='uk-text-large' id=\"countdown-remaining\"></p>" + + "</div>", + pos: "bottom-right", + timeout: endjam - now + } + ); + + const heading = document.getElementById("countdown-title"); + + if (now > startjam.getTime()) { // Jam's already started + heading.innerHTML = "<a href=\"/info/jams\">code jam</a> Countdown ends in..."; + goal = endjam.getTime(); + } else { + heading.innerHTML = "Next <a href=\"/info/jams\">code jam</a> starts in..."; + goal = startjam.getTime(); } - if (minutes < 10) { - minutes = "0"+minutes; - } - if (seconds < 10) { - seconds = "0"+seconds; - } - let formatted = `${days}:${hours}:${minutes}:${seconds}` - document.getElementById('remaining').innerHTML = formatted; - }, 100); -} + + let refreshCountdown = setInterval(function() { // Create a repeating task + let delta = goal - Date.now(); // Time until the goal is met + + if (delta <= 1000) { // Goal has been met, best reload + clearInterval(refreshCountdown); + return location.reload(); + } + + let days = Math.floor(delta / (24*60*60*1000)); + delta -= days * (24*60*60*1000); + + let hours = Math.floor(delta / (60*60*1000)); + delta -= hours * (60*60*1000); + + let minutes = Math.floor(delta / (60*1000)); + delta -= minutes * (60*1000); + + let seconds = Math.floor(delta / 1000); + + if (days < 10) { + days = "0"+days; + } + + if (hours < 10) { + hours = "0"+hours; + } + + if (minutes < 10) { + minutes = "0"+minutes; + } + + if (seconds < 10) { + seconds = "0"+seconds; + } + + try { + document.getElementById('countdown-remaining').innerHTML = `${days}:${hours}:${minutes}:${seconds}`; + } catch (e) { // Notification was probably closed, so we can stop counting + return clearInterval(refreshCountdown); + } + }, 500); + } +}()); |