|
|
| Line 1: |
Line 1: |
| /* Any JavaScript here will be loaded for all users on every page load. */ | | /* Any JavaScript here will be loaded for all users on every page load. */ |
|
| |
|
| |
| /* This is for the countdown timers */
| |
|
| |
| (function () {
| |
| 'use strict';
| |
|
| |
| var verifyTime = function (value) {
| |
| var time = parseInt(value, 10);
| |
| if (isNaN(time)) time = 0;
| |
| return time * 1000;
| |
| };
| |
|
| |
| var verifyText = function (text, defaultText, hasTime) {
| |
| if (text === undefined) return defaultText;
| |
| if (hasTime && !text.includes('%s')) text = text + ' %s.';
| |
| return text;
| |
| };
| |
|
| |
| var formatTime = function (days, hours, minutes, seconds) {
| |
| var result = '';
| |
| result += days ? ' ' + days.toString() + 'd' : '';
| |
| result += hours ? ' ' + hours.toString() + 'h' : '';
| |
| result += minutes ? ' ' + minutes.toString() + 'm' : '';
| |
| result += seconds ? ' ' + Math.max(seconds - 1, 0).toString() + 's' : '';
| |
| return result;
| |
| };
| |
|
| |
| var updateCountdownText = function (el) {
| |
| var now = new Date();
| |
| var startDate = new Date(parseInt(el.dataset.startTime, 10));
| |
| var endDate = new Date(parseInt(el.dataset.endTime, 10));
| |
|
| |
| var startDiff = startDate.getTime() - now.getTime();
| |
| var endDiff = endDate.getTime() - now.getTime();
| |
|
| |
| var text = el.dataset.textEnd;
| |
| var diff = startDiff;
| |
| if (startDiff > 1000) {
| |
| if (startDate < endDate) text = el.dataset.textStart;
| |
| } else if (endDiff > 1000) {
| |
| diff = endDiff;
| |
| } else {
| |
| text = el.dataset.textAfter;
| |
| }
| |
|
| |
| if (diff < 1000) {
| |
| el.innerHTML = text; // + ' (start: ' + startDate.toUTCString() + ', end: ' + endDate.toUTCString() + ')';
| |
| return;
| |
| }
| |
|
| |
| diff = diff / 1000;
| |
| var days = Math.floor(diff / 86400);
| |
| var hours = Math.floor((diff % 86400) / 3600);
| |
| var minutes = Math.floor((diff % 3600) / 60);
| |
| var seconds = ((diff % 3600) % 60).toFixed(0);
| |
|
| |
| if (days === 1) {
| |
| hours += 24;
| |
| days = 0;
| |
| }
| |
| if (hours > 1 || days > 0) seconds = 0;
| |
| if (days > 0) minutes = 0;
| |
|
| |
| var result = formatTime(days, hours, minutes, seconds);
| |
|
| |
| var interval = 1000;
| |
| if (days > 0) {
| |
| interval = 60 * 60 * 1000;
| |
| } else if (hours > 1) {
| |
| interval = 60 * 1000;
| |
| }
| |
|
| |
| el.innerHTML = text.replace('%s', result); // + ' (start: ' + startDate.toUTCString() + ', end: ' + endDate.toUTCString() + ', diff: ' + diff +', interval: ' + interval + ')';
| |
|
| |
| window.setTimeout(function () {
| |
| updateCountdownText(el);
| |
| }, interval);
| |
| };
| |
|
| |
| const nth = function (d) {
| |
| if (d > 3 && d < 21) return 'th';
| |
| switch (d % 10) {
| |
| case 1:
| |
| return 'st';
| |
| case 2:
| |
| return 'nd';
| |
| case 3:
| |
| return 'rd';
| |
| default:
| |
| return 'th';
| |
| }
| |
| };
| |
|
| |
| var updateTimeText = function (el, time) {
| |
| var months = [
| |
| 'January',
| |
| 'February',
| |
| 'March',
| |
| 'April',
| |
| 'May',
| |
| 'June',
| |
| 'July',
| |
| 'August',
| |
| 'September',
| |
| 'October',
| |
| 'November',
| |
| 'December',
| |
| ];
| |
| var date = new Date(time);
| |
| var output = '';
| |
| if (el.dataset.format == 'hm' || el.dataset.format == 'H:i') {
| |
| output =
| |
| ('000' + date.getHours()).slice(-2) +
| |
| ':' +
| |
| ('000' + date.getMinutes()).slice(-2);
| |
| } else if (el.dataset.format == 'md') {
| |
| output =
| |
| months[date.getMonth()] + ' ' + date.getDate() + nth(date.getDate());
| |
| } else if (el.dataset.format == 'mdy') {
| |
| output =
| |
| months[date.getMonth()] +
| |
| ' ' +
| |
| date.getDate() +
| |
| nth(date.getDate()) +
| |
| ', ' +
| |
| date.getFullYear();
| |
| } else {
| |
| output =
| |
| ('000' + date.getHours()).slice(-2) +
| |
| ':' +
| |
| ('000' + date.getMinutes()).slice(-2) +
| |
| ', ' +
| |
| months[date.getMonth()] +
| |
| ' ' +
| |
| date.getDate() +
| |
| nth(date.getDate()) +
| |
| ', ' +
| |
| date.getFullYear();
| |
| }
| |
| el.innerHTML = output;
| |
| };
| |
|
| |
| var ready = function () {
| |
| var elements = document.querySelectorAll('.localtime');
| |
| Array.from(elements).forEach(function (el) {
| |
| var startTime = verifyTime(el.dataset.start);
| |
| var endTime = verifyTime(el.dataset.end);
| |
| var time = verifyTime(el.dataset.time);
| |
| el.dataset.textStart = verifyText(
| |
| el.dataset.textStart,
| |
| 'Starts in %s.',
| |
| true
| |
| );
| |
| el.dataset.textEnd = verifyText(el.dataset.textEnd, 'Ends in %s.', true);
| |
| el.dataset.textAfter = verifyText(
| |
| el.dataset.textAfter,
| |
| 'Event has ended.',
| |
| false
| |
| );
| |
| if (startTime + endTime > 0) {
| |
| el.dataset.startTime = startTime;
| |
| el.dataset.endTime = endTime;
| |
| updateCountdownText(el);
| |
| } else if (time > 0) {
| |
| updateTimeText(el, time);
| |
| }
| |
| });
| |
| };
| |
|
| |
| if (document.readyState == 'loading') {
| |
| document.addEventListener('DOMContentLoaded', ready);
| |
| } else {
| |
| ready();
| |
| }
| |
| })();
| |