User:ToxiBoi/LiveCountdown.js: Difference between revisions
Content deleted Content added
m [v1.4.3] Wrong param |
m ? |
||
Line 7: | Line 7: | ||
distance = endDate - now; |
distance = endDate - now; |
||
var sanitizedCode = encodeURIComponent(index.getAttribute("data- |
var sanitizedCode = encodeURIComponent(index.getAttribute("data-event")); |
||
$.post( "https:" + mw.config.get( "wgServer" ) + |
$.post( "https:" + mw.config.get( "wgServer" ) + |
||
"/w/api.php?action=parse&format=json&title=" + mw.config.get('wgPageName') + "&text=" + sanitizedCode |
"/w/api.php?action=parse&format=json&title=" + mw.config.get('wgPageName') + "&text=" + sanitizedCode |
Revision as of 05:21, 17 April 2020
var MainLoop = function (index) {
var RefreshingAlready = false;
setInterval(function () {
// Setup again
endDate = new Date(index.getAttribute("data-end")).getTime();
now = new Date().getTime();
distance = endDate - now;
var sanitizedCode = encodeURIComponent(index.getAttribute("data-event"));
$.post( "https:" + mw.config.get( "wgServer" ) +
"/w/api.php?action=parse&format=json&title=" + mw.config.get('wgPageName') + "&text=" + sanitizedCode
+ "&pst=1",
function ( res ) {
if ( !res || !res.parse || !res.parse.text ) return console.log( "Preview failed" );
var StrippedText = res.parse.text['*'];
//Trim off div/p tags
var str = "";
var endTrim = StrippedText.length;
var count = 0;
var scan = false;
for (i=33;i<StrippedText.length;i++) {
if (res[i] == "<") {
scan = true;
}
if (scan) {
count++;
str += res[i];
}
if (str == "</p>") {
endTrim = i-3;
}
if (count == 4) {
count = 0;
str = "";
scan = false;
}
}
StrippedText = StrippedText.substring(33,endTrim);
index.setAttribute("data-event",StrippedText);
}
);
if (isNaN(distance)) {
// Something went terribly wrong with parsing the dates.
// Display error
index.innerHTML = '<strong class="error">[LiveCountdown] Parsing date from "'+ index.getAttribute("data-end") +'" returned NaN, check parameters "month/day/year/customdate"</strong>';
} else {
// Time calculations for days, hours, minutes and seconds (copied from W3Schools)
var days = Math.floor(distance / (1000 * 60 * 60 * 24));
var hours = Math.floor(
(distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)
);
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
var seconds = Math.floor((distance % (1000 * 60)) / 1000);
// Display the result
index.innerHTML =
"There are <b>" +
days +
"</b> days, <b>" +
hours +
"</b> hours, <b>" +
minutes +
"</b> minutes, and <b>" +
seconds +
"</b> seconds until " +
index.getAttribute("data-event") +
".";
}
// If the count down is finished, refresh
if (distance < 0) {
index.innerHTML = "Countdown expired, refreshing...";
if (!RefreshingAlready) {
document.location.reload();
RefreshingAlready = true;
}
}
}, 1000);
};
var counts = document.getElementsByClassName("toxicountdown");
if (counts.length > 0) {
for (var i = 0; i < counts.length; i++) {
counts[i].innerHTML = "Loading countdown...";
var endDate = new Date(counts[i].getAttribute("data-end")).getTime();
var now = new Date().getTime();
var distance = endDate - now;
if (distance < 0) {
counts[i].innerHTML = "The countdown finished.";
} else {
MainLoop(counts[i]);
}
}
} else {
console.log("[LiveCountdown] No countdown widgets detected.");
}