Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Press Ctrl-F5.
/* Any JavaScript here will be loaded for all users on every page load. */
switch(mw.config.get('wgPageName')){
/* JS for the Event Countdown on the main page */
case 'Idle_Champions_of_the_Forgotten_Realms_Wiki':
{
function DST_Check()
{
var sDate = $( ".countdowndate" ).text();
var dtDate = new Date(sDate);
if (dtDate.isDstObserved())
{
dtDate = new Date(dtDate.getFullYear(), dtDate.getMonth(), dtDate.getDate(), dtDate.getHours(), dtDate.getMinutes() - 60, dtDate.getSeconds());
}
$( ".countdowndate" ).text(dtDate);
return;
}
$(function() {
DST_Check();
});
break;
}
/* JS for the Event Token Calculator */
case 'Event_Token_Calculator':
{
function GetEventInfo()
{
var sTitle = $( ".EVENT_NAME" ).text();
var sStartTime = $( ".EVENT_STARTTIME" ).text();
var sEndTime = $( ".EVENT_ENDTIME" ).text();
$( ".LBL_EVENTNAME" ).text(sTitle);
$( ".LBL_TIME_START_PST" ).text(sStartTime);
$( ".LBL_TIME_END_PST" ).text(sEndTime);
}
function GetTimeRemaining()
{
var sStartDate = $( ".LBL_TIME_START_PST" ).text();
var sEndDate = $( ".LBL_TIME_END_PST" ).text();
var dtStart = new Date(sStartDate);
var dtEnd = new Date(sEndDate);
//alert(dtStart + " " + dtEnd)
var diff = dtEnd.getTime() - dtStart.getTime();
var second_ticks = 1000;
var minute_ticks = 60 * second_ticks;
var hour_ticks = 60 * minute_ticks;
var day_ticks = 24 * hour_ticks;
var days = Math.floor(diff / day_ticks);
diff -= days * day_ticks;
var hours = Math.floor(diff / hour_ticks);
diff -= hours * hour_ticks;
var mins = Math.floor(diff / minute_ticks);
diff -= mins * minute_ticks;
var sResult = days + " days " + hours + " Hours " + mins + " Minutes" ;
var nTokens = (((((days * 24) + hours ) * 60 ) + mins ) * 2)
var nFP = Math.floor(nTokens / 2500);
//alert("Time Remaining: " + sResult);
$( ".LBL_TIME_REMAINING" ).text(sResult);
$( ".LBL_TOKENS_REMAINING" ).text(nTokens);
$( ".LBL_FPS_REMAINING" ).text(nFP);
//$( ".TXT_TIME_DAYS" ).text(days);
//$( ".TXT_TIME_HOURS" ).text(hours);
//$( ".TXT_TIME_MINUTES" ).text(mins);
return;
}
function UpdateFinalTokens()
{
var nRemainingTokens = Number($( ".LBL_TOKENS_REMAINING" ).text());
var nDays = Number($( ".TXT_TIME_DAYS" ).text());
var nHours = Number($( ".TXT_TIME_HOURS" ).text());
var nMinutes = Number($( ".TXT_TIME_MINUTES" ).text());
var nCurrentTokens = Number($( ".TXT_TOKENS_CURRENT" ).text());
var nContract_Count_SML = Number($( ".TXT_NUM_CONTRACT_SML" ).text());
var nContract_Count_MED = Number($( ".TXT_NUM_CONTRACT_MED" ).text());
var nContract_Count_LRG = Number($( ".TXT_NUM_CONTRACT_LRG" ).text());
var rate_per_min = 2
var tokens_per_small = 30 * rate_per_min; //30 min
var tokens_per_medium = 4 * 60 * rate_per_min; //4 hrs
var tokens_per_large = 8 * 60 * rate_per_min; //8 hrs
var nTokens = (((((nDays * 24) + nHours ) * 60 ) + nMinutes ) * 2)
var nFinalTokens = nTokens + nCurrentTokens + (nContract_Count_SML * tokens_per_small) + (nContract_Count_MED * tokens_per_medium) + (nContract_Count_LRG * tokens_per_large);
$( ".LBL_TOKENS_FINAL" ).text(nFinalTokens);
return;
}
function UpdateDates()
{
var sStartDate = $( ".LBL_TIME_START_PST" ).text();
var sEndDate = $( ".LBL_TIME_END_PST" ).text();
var dtStart = new Date(sStartDate);
var dtEnd = new Date(sEndDate);
dtStart = Convert_PSTtoLocal(dtStart);
dtEnd = Convert_PSTtoLocal(dtEnd);
dtLocal = new Date();
if (dtStart < dtLocal)
{
var dtLocal_PST = Convert_LocalToPST(dtLocal);
$( ".LBL_TIME_START_PST" ).text(FormatDate(dtLocal_PST));
dtStart = dtLocal;
}
$( ".LBL_TIME_START_LOCAL" ).text(FormatDate(dtStart));
$( ".LBL_TIME_END_LOCAL").text(FormatDate(dtEnd));
return;
}
$(function() {
$( ".BTN_CALCULATE" ).on("click", function() { UpdateFinalTokens(); } );
$(".TXT_TOKENS_CURRENT").on("keydown", function() { if (event.keyCode === 13) { UpdateFinalTokens(); return false; } } );
$(".TXT_NUM_CONTRACT_SML").on("keydown", function() { if (event.keyCode === 13) { UpdateFinalTokens(); return false; } } );
$(".TXT_NUM_CONTRACT_MED").on("keydown", function() { if (event.keyCode === 13) { UpdateFinalTokens(); return false; } } );
$(".TXT_NUM_CONTRACT_LRG").on("keydown", function() { if (event.keyCode === 13) { UpdateFinalTokens(); return false; } } );
$(".TXT_TIME_DAYS").on("keydown", function() { if (event.keyCode === 13) { UpdateFinalTokens(); return false; } } );
$(".TXT_TIME_HOURS").on("keydown", function() { if (event.keyCode === 13) { UpdateFinalTokens(); return false; } } );
$(".TXT_TIME_MINUTES").on("keydown", function() { if (event.keyCode === 13) { UpdateFinalTokens(); return false; } } );
GetEventInfo();
UpdateDates();
GetTimeRemaining();
UpdateFinalTokens();
});
break;
}
}
Date.prototype.stdTimezoneOffset = function () {
var jan = new Date(this.getFullYear(), 0, 1);
var jul = new Date(this.getFullYear(), 6, 1);
return Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset());
}
Date.prototype.isDstObserved = function () {
return this.getTimezoneOffset() < this.stdTimezoneOffset();
}
function FormatDate(date)
{
var month = date.getMonth() + 1;
var day = date.getDate();
var year = date.getFullYear() - 2000;
var hour = date.getHours();
var minutes = date.getMinutes();
var AM_PM = 'AM';
if (hour > 12)
{
hour = hour - 12;
AM_PM = 'PM'
}
if (month < 10)
{
month = '0' + month
}
if (day < 10)
{
day = '0' + day
}
if (hour < 10)
{
hour = '0' + hour
}
if (minutes < 10)
{
minutes = '0' + minutes
}
return month + '/' + day + '/' + year + ' ' + hour + ':' + minutes + ' ' + AM_PM;
}
function Convert_PSTtoLocal(date)
{
var d = new Date();
var nOffSet_LOCAL = d.getTimezoneOffset(); //Local TZ from GMT
var Offset_PST = 480 //8-7(dst) hrs behind GMT
if (d.isDstObserved())
{
Offset_PST = 420;
}
var minutes_diff = Offset_PST - nOffSet_LOCAL
var dt = new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes() + minutes_diff);
return dt;
}
function Convert_LocalToPST(date)
{
var d = new Date();
var nOffSet_LOCAL = d.getTimezoneOffset(); //Local TZ from GMT
var Offset_PST = 480 //8-7(dst) hrs behind GMT
if (d.isDstObserved())
{
Offset_PST = 420;
}
var minutes_diff = Offset_PST - nOffSet_LOCAL
var dt = new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes() - minutes_diff);
return dt;
}
/*JS for the Event Table (Time To Local)*/
case 'Event_Token_Calculator':
{
function SetCNETime( day, hour ) {
let hstr = hour.toString().padStart( 2, '0' ) + ':00:00';
let time = DateTime.fromISO( hstr, cnezone ).set( { weekday: day } );
if ( cnenow > time )
time = time.plus( { weeks: 1 } ).set( { hour: hour } );
return time;
}
const cnezone = { zone: 'America/Whitehorse' };
const cnenow = DateTime.local().setZone( cnezone.zone );
// game times
const newContent = SetCNETime( 3, 12 ); // Wed, 12:00
const weekendStart = SetCNETime( 5, 12 ); // Fri, 12:00
const weekendEnd = SetCNETime( 1, 12 ); // Mon, 12:00
// community times
const redditQnA = SetCNETime( 2, 10 ); // Tue, 10:00
const binwinPlays = SetCNETime( 2, 12 ); // Tue, 12:00
const icStream = SetCNETime( 4, 13 ); // Thu, 13:00
const tablestruct = [
{
header: 'Game events',
events: [
{ desc: 'Usual time for new content release or event start', time: newContent },
{ desc: 'Weekend buff start', time: weekendStart },
{ desc: 'Weekend buff end, event end time', time: weekendEnd }
]
}, {
header: 'Community events',
events: [
{ desc: 'Q&A session on reddit', time: redditQnA },
{ desc: 'Binwin plays Idle Champions Twitch stream', time: binwinPlays },
{ desc: 'Idle Champions Twitch stream', time: icStream }
]
}
];
let table = document.getElementById( 'timezone-monster' );
// header
let header = table.createTHead();
let tr = header.insertRow(-1);
let th = document.createElement('th'); th.innerHTML = 'Event description'; tr.appendChild( th );
th = document.createElement('th'); th.innerHTML = 'CNE time<br>' + cnenow.offsetNameLong; tr.appendChild( th );
th = document.createElement('th'); th.innerHTML = 'Local time<br>' + DateTime.local().offsetNameLong; tr.appendChild( th );
let tbody = document.createElement( 'tbody' );
let td = null;
tablestruct.forEach( x => {
tr = tbody.insertRow(-1);
td = tr.insertCell(-1);
td.innerHTML = x.header;
td.colSpan = 3;
td.classList.add( 'subheader' );
x.events.forEach( y => {
let tl = y.time.toLocal();
tr = tbody.insertRow(-1);
tr.insertCell(-1).innerHTML = y.desc;
tr.insertCell(-1).innerHTML = y.time.weekdayLong + ', ' + y.time.toLocaleString(DateTime.TIME_24_SIMPLE);
tr.insertCell(-1).innerHTML = tl.weekdayLong + ', ' + tl.toLocaleString(DateTime.TIME_24_SIMPLE);
} );
} );
table.appendChild( tbody );
}