MediaWiki:Gadget-RecentChangesRefresh.js

Revision as of 07:52, February 7, 2019 by Porplemontage (talk | contribs)

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.
// Code courtesy of pcj of WoWWiki.
// This is a modified version of the WoWWiki site version.

// Code adds a checkbox at the top of the Special:RecentChanges list, next to the header.
// Ticking it sets a cookie (should be individual to wikis) and starts updating the RC list.
// This occurs silently every 30 seconds without a full page reload occuring.

function setCookie(c_name, value, expiredays) {
	var exdate = new Date();
	exdate.setDate(exdate.getDate() + expiredays);
	document.cookie = c_name + "=" + escape(value) + ((expiredays == null) ? "" : ";expires=" + exdate.toGMTString());
}

function getCookie(c_name) {
	if (document.cookie.length > 0) {
		c_start = document.cookie.indexOf(c_name + "=");
		if (c_start != -1) {
			c_start = c_start + c_name.length + 1;
			c_end = document.cookie.indexOf(";", c_start);
			if (c_end == -1) c_end = document.cookie.length;
			return unescape(document.cookie.substring(c_start, c_end));
		}
	}
	return "";
}

var ajaxPages = new Array("Special:RecentChanges");
var ajaxRCOverride = false;
var rcRefresh = 30000;

function ajaxRC() {
	if ( mw.config.get('skin') == 'nimbus' ) {
		appTo = $(".pagetitle");
	} else if ( mw.config.get('skin') != 'nimbus' ) {
		appTo = $(".firstHeading");
	}
	appTo.append('&nbsp;<span style="position:absolute; right:10px; z-index:15;"><span style="position:relative; top:-12px; right:-15px;" id="autoRefreshProgress"><img src="/images/loader.gif" border="0" alt="AJAX operation in progress" /></span><span style="font-size: xx-small; cursor:help;" title="Automatically refresh the current page every ' + Math.floor(rcRefresh / 1000) + ' seconds">AUTO-REFRESH:</span><input type="checkbox" id="autoRefreshToggle"></span>');
	$("#autoRefreshToggle").click(function () {
		setCookie("ajaxRC", $("#autoRefreshToggle").prop("checked") ? "on" : "off");
		loadRCData();
	});
	$("#autoRefreshProgress").hide();
	if (getCookie("ajaxRC") == "on" || ajaxRCOverride) {
		$("#autoRefreshToggle").prop("checked", true);
		setTimeout(loadRCData, rcRefresh);
	}
}

function loadRCData() {
	if (!$("#autoRefreshToggle").prop("checked")) return;
	$('#autoRefreshProgress').show();
	$(article).load(location.href + " " + article + " > *", function (data) {
		$(article + " .mw-collapsible").makeCollapsible();
		$('#autoRefreshProgress').hide();
		if ($("#autoRefreshToggle").prop("checked")) setTimeout(loadRCData, rcRefresh);
	});
}

$(function () {
	if (!document.getElementsByClassName('mw-rcfilters-enabled')[0]) {
		if (mw.config.get('skin') == 'nimbus') {
			article = "#mw-content-text";
		} else {
			article = "#bodyContent";
		}
		for (x in ajaxPages) {
			if (mw.config.get('wgPageName') == ajaxPages[x] && $("#autoRefreshToggle").length == 0) ajaxRC();
		}
	}
});