User:ToxiBoi/LiveCountdown.js: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
break
just do regex instead
Line 20: Line 20:
//Trim off div/p tags
//Trim off div/p tags
var str = "";
var endTrim = StrippedText.search(/<\/p>/g);
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-4;
break;
}
if (count == 4) {
count = 0;
str = "";
scan = false;
}
}
StrippedText = StrippedText.substring(33,endTrim);
StrippedText = StrippedText.substring(33,endTrim);
index.setAttribute("data-event",StrippedText);
index.setAttribute("data-event",StrippedText);

Revision as of 05:35, 17 April 2020

var RefreshingAlready = false;
var alreadyScanned = false;
var MainLoop = function (index) {
  setInterval(function () {
    // Setup again
    endDate = new Date(index.getAttribute("data-end")).getTime();
    now = new Date().getTime();
    distance = endDate - now;
    
    if (!alreadyScanned) {
    	alreadyScanned = true;
	    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 endTrim = StrippedText.search(/<\/p>/g);
				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.");
}