User:Harimaron/common.js

$(function {	'use strict';	function removeColors(ev) {		var els = document.querySelectorAll("#bodyContent span");		var i, el;		for (i = 0; i < els.length; i++) {			el = els[i];			if (el.style.color) {				el.style.color = null;			}		}	}	var els = document.querySelectorAll(".ColorRemover");	var i, el, btn;	for (i = 0; i < els.length; i++) {		el = els[i];		btn = document.createElement("button");		btn.type = "button";		btn.textContent = "Remove Colors";		btn.addEventListener("click", removeColors);		el.appendChild(btn);	} });

window.addEventListener("load", function {

/////////////////////////////////////////////////////////////////////////////// //                          ChallengeSchedule Class                            // ///////////////////////////////////////////////////////////////////////////////

// Maintains auto-updating Challenge schedule elements

// Object constructor var ChallengeSchedule = function { "use strict"; this.timesEl = [ document.getElementById("challengeTime1"), document.getElementById("challengeTime2"), ];	if (!this.timesEl[0]) return; // No schedule data var lblFetched = document.getElementById("battleFetched"); if (!lblFetched) return; var now = new Date; var fetched = parseFetched(now, lblFetched.innerHTML); /**    * @param {string} str */   function parse(str) { if (!str.endsWith(" UTC")) return null; var dates = str.split("-", 2); if (dates.length != 2) return null; return ({           start: parseSchedule(fetched, dates[0].trim),            end: parseSchedule(fetched, dates[1].slice(0, -4).trim),        }); }   this.data = []; for (var i = 0; i < this.timesEl.length; i++) { var timeEl = this.timesEl[i]; var orderEl = timeEl.getElementsByClassName("challengeOrder"); if (!orderEl.length) continue; var current = { orderEl: orderEl[0], slots: [/*{ el: new HTMLElement, start: new Date, end: new Date, },*/],       };        var slotsEl = timeEl.getElementsByClassName("challengeTimeSlot"); for (var j = 0; j < slotsEl.length; j++) { var slotEl = slotsEl[j]; var slot = parse(slotEl.innerText); if (!slot) continue; current.slots.push({               el: slotEl,                start: slot.start,                end: slot.end,            }); }       if (current.slots.length > 0) this.data.push(current); }

if (!this.data.length) return; var _this = this; this.timer = setInterval(function { _this.onTick(new Date); }, 1000); this.onTick(new Date); };

// Periodic update handler /** * @param now {Date} */ ChallengeSchedule.prototype.onTick = function(now) { "use strict"; var upcomingOrNext = 1; var hasFuture = false; for (var i = 0; i < this.data.length; i++) { var current = this.data[i]; for (var j = 0; j < current.slots.length; j++) { var slot = current.slots[j]; var startStr = now >= slot.start && now < slot.end ? "Now" : formatDateTime(slot.start); var endStr = formatDateTime(slot.end); slot.el.innerText = startStr + " - " + endStr; if (now >= slot.end) { slot.el.style.textDecoration = "line-through"; slot.el.style.fontWeight = "normal"; } else if (now >= slot.start) { slot.el.style.fontWeight = "bold"; } else { slot.el.style.fontWeight = "normal"; }       }        var start = current.slots[0].start; var end = current.slots[current.slots.length - 1].end; if (now >= end) { upcomingOrNext = 0; current.orderEl.innerText = "Past"; } else if (now >= start) { upcomingOrNext = 0; hasFuture = true; current.orderEl.innerText = "Current"; } else if (upcomingOrNext <= 1) { hasFuture = true; current.orderEl.innerText = "Upcoming"; } else { hasFuture = true; current.orderEl.innerText = "Next"; }       upcomingOrNext++; }   if (!hasFuture) { clearInterval(this.timer); } };

window.challengeSchedule = new ChallengeSchedule;

});