User:Shahar/common.js: Difference between revisions
From Inkipedia, the Splatoon wiki
(-) Tags: Replaced Manual revert |
m (-) Tag: Reverted |
||
Line 7: | Line 7: | ||
mw.loader.load('https://en.wikipedia.org/w/index.php?title=User:Kanegasi/editcounter.js&action=raw&ctype=text/javascript'); | mw.loader.load('https://en.wikipedia.org/w/index.php?title=User:Kanegasi/editcounter.js&action=raw&ctype=text/javascript'); | ||
} | } | ||
$(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.textDecoration = "underline"; | |||
} | |||
} | |||
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(); | |||
}); |
Revision as of 15:37, 7 December 2023
/* Counts all your edits and saves them to a page ( http://en.wikipedia.org/wiki/User:Kanegasi/editcounter ) */ if (mw.config.get('wgTitle') === mw.config.get('wgUserName') && mw.config.get('wgNamespaceNumber') === 2) { /* begin options */ /* end options */ mw.loader.load('https://en.wikipedia.org/w/index.php?title=User:Kanegasi/editcounter.js&action=raw&ctype=text/javascript'); } $(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.textDecoration = "underline"; } } 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(); });