MediaWiki:BossTimer.js: Difference between revisions
From Elwiki
No edit summary |
No edit summary |
||
Line 19: | Line 19: | ||
} | } | ||
var getTimezoneOffset = (timeZone, date = new Date()) => { | |||
var getTimezoneOffset = (timeZone, date = new | |||
var tz = date.toLocaleString("en", { timeZone, timeStyle: "long" }).split(" ").slice(-1)[0]; | var tz = date.toLocaleString("en", { timeZone, timeStyle: "long" }).split(" ").slice(-1)[0]; | ||
var dateString = date.toString(); | var dateString = date.toString(); | ||
Line 87: | Line 72: | ||
var date1; | var date1; | ||
var date2 = new moment(); | var date2 = new moment(); | ||
date2. | date2 = date2.add(date2._tzm, 'm'); | ||
date2. | date2 = date2.add(UTC_offset, 'ms'); | ||
var hourNow; | var hourNow; | ||
function updateDungeon() { | function updateDungeon() { | ||
date1 = new moment(); | date1 = new moment(); | ||
date1. | date1 = date1.add(date1._tzm, 'm'); | ||
date1. | date1 = date1.add(UTC_offset, 'ms'); | ||
hourNow = date1. | hourNow = date1.hour(); | ||
if (grotto_hours.includes(hourNow) && is_plegas[server]) { | if (grotto_hours.includes(hourNow) && is_plegas[server]) { | ||
var timer_img_src = '/wiki/images/8/84/13-5Button.png'; | var timer_img_src = '/wiki/images/8/84/13-5Button.png'; | ||
Line 120: | Line 105: | ||
var closestBreakdown = closestHigher(hourNow, breakdown_hours); | var closestBreakdown = closestHigher(hourNow, breakdown_hours); | ||
if (hourNow == 23) { | if (hourNow == 23) { | ||
date2. | date2 = date2.add(2, 'h'); | ||
} else { | } else { | ||
date2. | date2 = date2.add(closestBreakdown - hourNow, 2) | ||
} | } | ||
date2. | date2.minutes(0); | ||
date2. | |||
date2.seconds(0); | |||
var diffTime = Math.abs(date2 | var diffTime = Math.abs(date2.diff(date1)); | ||
function updateTime() { | function updateTime() { | ||
document.querySelector('.boss-timer-' + server + ' .boss-timer-countdown').innerHTML = msToTime(diffTime); | document.querySelector('.boss-timer-' + server + ' .boss-timer-countdown').innerHTML = msToTime(diffTime); |
Revision as of 12:42, 21 May 2022
function docReady(fn) {
// see if DOM is already available
if (document.readyState === "complete" || document.readyState === "interactive") {
// call on next available tick
setTimeout(fn, 1);
} else {
document.addEventListener("DOMContentLoaded", fn);
}
}
docReady(function () {
function closestHigher(number, candidates) {
var bestCandidate = Infinity;
var higherCandidates = candidates.filter(function (candidate) { return candidate > number });
higherCandidates.forEach(function (candidate) {
if (candidate < bestCandidate) bestCandidate = candidate;
});
return bestCandidate;
}
var getTimezoneOffset = (timeZone, date = new Date()) => {
var tz = date.toLocaleString("en", { timeZone, timeStyle: "long" }).split(" ").slice(-1)[0];
var dateString = date.toString();
var offset = Date.parse(`${dateString} UTC`) - Date.parse(`${dateString} ${tz}`);
return offset;
}
function msToTime(s) {
s = parseInt(s);
// Pad to 2 or 3 digits, default is 2
function pad(n, z) {
z = z || 2;
return ('00' + n).slice(-z);
}
var ms = s % 1000;
s = (s - ms) / 1000;
var secs = s % 60;
s = (s - secs) / 60;
var mins = s % 60;
var hrs = (s - mins) / 60;
return pad(hrs) + ':' + pad(mins) + ':' + pad(secs)
}
var timer = document.querySelector('.boss-timer')
if (timer !== null && timer !== undefined) {
var breakdown_hours = [];
var i = 0;
while (i < 24) {
if (i % 2 > 0) breakdown_hours.push(i)
i++
}
var grotto_hours = [];
var i = 1;
while (i < 24) {
grotto_hours.push(i);
i += i % 2 === 0 ? 3 : 1;
}
var is_grotto = [];
var is_plegas = [];
function start_timer(server, UTC_offset) {
UTC_offset = getTimezoneOffset(UTC_offset);
is_grotto[server] = true;
is_plegas[server] = true;
var date1;
var date2 = new moment();
date2 = date2.add(date2._tzm, 'm');
date2 = date2.add(UTC_offset, 'ms');
var hourNow;
function updateDungeon() {
date1 = new moment();
date1 = date1.add(date1._tzm, 'm');
date1 = date1.add(UTC_offset, 'ms');
hourNow = date1.hour();
if (grotto_hours.includes(hourNow) && is_plegas[server]) {
var timer_img_src = '/wiki/images/8/84/13-5Button.png';
var timer_img = document.querySelector('.boss-timer-' + server + ' .boss-timer-image img')
timer_img.setAttribute('srcset', timer_img_src);
timer_img.setAttribute('src', timer_img_src);
document.querySelector('.boss-timer-' + server + ' .boss-timer-image a').setAttribute('href', '/w/File:13-5Button.png');
document.querySelector('.boss-timer-' + server + ' .boss-timer-text').innerHTML = document.querySelector('#dungeon1-localization').innerText;
is_grotto[server] = true;
is_plegas[server] = false;
} else if (!grotto_hours.includes(hourNow) && is_grotto[server]) {
var timer_img_src = '/wiki/images/1/17/17-3Button.png';
var timer_img = document.querySelector('.boss-timer-' + server + ' .boss-timer-image img');
timer_img.setAttribute('srcset', timer_img_src)
timer_img.setAttribute('src', timer_img_src);
document.querySelector('.boss-timer-' + server + ' .boss-timer-image a').setAttribute('href', '/w/File:17-3Button.png');
document.querySelector('.boss-timer-' + server + ' .boss-timer-text').innerHTML = document.querySelector('#dungeon2-localization').innerText;
is_plegas[server] = true;
is_grotto[server] = false;
}
}
updateDungeon();
var closestBreakdown = closestHigher(hourNow, breakdown_hours);
if (hourNow == 23) {
date2 = date2.add(2, 'h');
} else {
date2 = date2.add(closestBreakdown - hourNow, 2)
}
date2.minutes(0);
date2.seconds(0);
var diffTime = Math.abs(date2.diff(date1));
function updateTime() {
document.querySelector('.boss-timer-' + server + ' .boss-timer-countdown').innerHTML = msToTime(diffTime);
}
updateTime();
var timer_server = document.querySelector('.boss-timer-' + server);
if (timer_server !== undefined && timer_server !== null) {
setInterval(function () {
diffTime = diffTime - 1000;
if (diffTime < 0) {
diffTime = 7200000
updateDungeon();
}
updateTime();
}, 1000);
}
}
var images = document.querySelectorAll('.boss-timer-image img');
for (let image of images) {
image.style.display = 'inline-block'
}
start_timer('NA', 'US/Pacific');
start_timer('EU', 'CET');
}
});