MediaWiki:Gadget-RecentChangesRefresh.js: Difference between revisions
From Halopedia, the Halo wiki
mNo edit summary |
No edit summary |
||
Line 4: | Line 4: | ||
// Code adds a checkbox at the top of the Special:RecentChanges list, next to the header. | // 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. | // 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 | // This occurs silently every 30 seconds without a full page reload occurring. | ||
var rcRefresh = 30000; | |||
var ajaxRCOverride = false; | |||
var ajaxPages = new Array('Special:RecentChanges'); | |||
function setCookie(c_name, value, expiredays) { | function setCookie(c_name, value, expiredays) { | ||
var exdate = new Date(); | var exdate = new Date(); | ||
exdate.setDate(exdate.getDate() + expiredays); | exdate.setDate(exdate.getDate() + expiredays); | ||
document.cookie = c_name + | document.cookie = c_name + '=' + escape(value) + ((expiredays == null) ? '' : ';expires=' + exdate.toGMTString()); | ||
} | } | ||
function getCookie(c_name) { | function getCookie(c_name) { | ||
if (document.cookie.length > 0) { | if (document.cookie.length > 0) { | ||
c_start = document.cookie.indexOf(c_name + | c_start = document.cookie.indexOf(c_name + '='); | ||
if (c_start != -1) { | if (c_start != -1) { | ||
c_start = c_start + c_name.length + 1; | c_start = c_start + c_name.length + 1; | ||
c_end = document.cookie.indexOf( | c_end = document.cookie.indexOf(';', c_start); | ||
if (c_end == -1) c_end = document.cookie.length; | if (c_end == -1) c_end = document.cookie.length; | ||
return unescape(document.cookie.substring(c_start, c_end)); | return unescape(document.cookie.substring(c_start, c_end)); | ||
} | } | ||
} | } | ||
return | return ''; | ||
} | } | ||
function ajaxRC() { | function ajaxRC() { | ||
if ( mw.config.get('skin') == 'nimbus' ) { | if (mw.config.get('skin') == 'nimbus') { | ||
appTo = $( | appTo = $('.pagetitle'); | ||
} else | } else { | ||
appTo = $( | appTo = $('.firstHeading'); | ||
} | } | ||
appTo.append(' <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>'); | appTo.append(' <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( | setCookie('ajaxRC', $('#autoRefreshToggle').prop('checked') ? 'on' : 'off'); | ||
loadRCData(); | loadRCData(); | ||
}); | }); | ||
$( | $('#autoRefreshProgress').hide(); | ||
if (getCookie( | if (getCookie('ajaxRC') == 'on' || ajaxRCOverride) { | ||
$( | $('#autoRefreshToggle').prop('checked', true); | ||
setTimeout(loadRCData, rcRefresh); | setTimeout(loadRCData, rcRefresh); | ||
} | } | ||
Line 48: | Line 48: | ||
function loadRCData() { | function loadRCData() { | ||
if (!$( | if (!$('#autoRefreshToggle').prop('checked')) return; | ||
$('#autoRefreshProgress').show(); | $('#autoRefreshProgress').show(); | ||
$(article).load(location.href + | $(article).load(location.href + ' ' + article + ' > *', function (data) { | ||
$(article + | $(article + ' .mw-collapsible').makeCollapsible(); | ||
$('#autoRefreshProgress').hide(); | $('#autoRefreshProgress').hide(); | ||
if ($( | if ($('#autoRefreshToggle').prop('checked')) setTimeout(loadRCData, rcRefresh); | ||
}); | }); | ||
} | } | ||
Line 60: | Line 60: | ||
if (!document.getElementsByClassName('mw-rcfilters-enabled')[0]) { | if (!document.getElementsByClassName('mw-rcfilters-enabled')[0]) { | ||
if (mw.config.get('skin') == 'nimbus') { | if (mw.config.get('skin') == 'nimbus') { | ||
article = | article = '#mw-content-text'; | ||
} else { | } else { | ||
article = | article = '#bodyContent'; | ||
} | } | ||
for (x in ajaxPages) { | for (x in ajaxPages) { | ||
if (mw.config.get('wgPageName') == ajaxPages[x] && $( | if (mw.config.get('wgPageName') == ajaxPages[x] && $('#autoRefreshToggle').length == 0) ajaxRC(); | ||
} | } | ||
} | } | ||
}); | }); |
Revision as of 09:05, February 7, 2019
// 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 occurring.
var rcRefresh = 30000;
var ajaxRCOverride = false;
var ajaxPages = new Array('Special:RecentChanges');
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 '';
}
function ajaxRC() {
if (mw.config.get('skin') == 'nimbus') {
appTo = $('.pagetitle');
} else {
appTo = $('.firstHeading');
}
appTo.append(' <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();
}
}
});