


MediaWiki:Common.js
Wikisimpsons - The Simpsons Wiki
/* Any JavaScript here will be loaded for all users on every page load. */
//<pre>
/** Test if an element has a certain class **************************************
*
* Description: Uses regular expressions and caching for better performance.
*/
var hasClass = ( function() {
var reCache = {};
return function( element, className ) {
return ( reCache[className] ? reCache[className] : ( reCache[className] = new RegExp( "(?:\\s|^)" + className + "(?:\\s|$)" ) ) ).test( element.className );
};
})();
/*
Source: http://www.dustindiaz.com/getelementsbyclass/
getElementsByClass, which complements getElementById and getElementsByTagName, returns an array of all subelements of ''node'' that are tagged with a specific CSS class (''searchClass'') and are of the tag name ''tag''. If tag is null, it searches for any suitable elements regardless of the tag name.
Example: getElementsByClass('infobox', document.getElementById('content'), 'div') selects the same elements as the CSS declaration #content div.infobox
*/
function getElementsByClass( searchClass, node, tag ) {
var classElements = new Array();
if( node == null ) {
node = document;
}
if( tag == null ) {
tag = '*';
}
var els = node.getElementsByTagName( tag );
var elsLen = els.length;
var tester = new ClassTester( searchClass );
for( i = 0, j = 0; i < elsLen; i++ ) {
if( tester.isMatch( els[i] ) ) {
classElements[j] = els[i];
j++;
}
}
return classElements;
}
function ClassTester( className ) {
this.regex = new RegExp( "(^|\\s)" + className + "(\\s|$)" );
}
ClassTester.prototype.isMatch = function( element ) {
return this.regex.test( element.className );
}
/* end getElementsByClass */
/** Username replace function ([[template:USERNAME]]) *******************************
* Inserts user name into <span class="insertusername"></span>
*/
function UserNameReplace() {
if( typeof( disableUsernameReplace ) != 'undefined' && disableUsernameReplace || wgUserName == null ) {
return;
}
var spans = getElementsByClass( 'insertusername', null, 'span' );
for( var i = 0; i < spans.length; i++ ) {
spans[i].innerHTML = wgUserName;
}
}
jQuery( document ).ready( UserNameReplace );
/* Returns h1.firstHeading (the page title element). */
function getFirstHeading() {
var elements = getElementsByClass( 'firstHeading', document.getElementById( 'content' ), 'h1' );
return ( elements != null && elements.length > 0 ) ? elements[0] : null;
}
// BEGIN JavaScript title rewrite
// requires getFirstHeading() and getElementsByClass() and its dependencies
function rewriteTitle() {
if( typeof( window.SKIP_TITLE_REWRITE ) != 'undefined' && window.SKIP_TITLE_REWRITE ) {
return;
}
var titleDiv = document.getElementById( 'title-meta' );
if( titleDiv == null ) {
return;
}
var cloneNode = titleDiv.cloneNode( true );
var firstHeading = getFirstHeading();
var node = firstHeading.childNodes[0];
// new, then old!
firstHeading.replaceChild( cloneNode, node );
cloneNode.style.display = 'inline';
var titleAlign = document.getElementById( 'title-align' );
firstHeading.style.textAlign = titleAlign.childNodes[0].nodeValue;
}
jQuery( document ).ready( rewriteTitle );
// END JavaScript title rewrite
// --------------------------------------------------------
// addSubpages
// adds a 'subpages' link to the toolbox bar (excludes File, MediaWiki and Category namespaces)
// --------------------------------------------------------
jQuery( document ).ready( function( $ ) {
var NSWithoutSubpages = new Array(-1, 6, 8, 14);
if (document.getElementById('p-tb') && NSWithoutSubpages.indexOf(wgNamespaceNumber) == -1)
{
var linkSubpages = '/wiki/Special:PrefixIndex/' + wgPageName + '/';
mw.util.addPortletLink('p-tb', linkSubpages, 'Subpages', 't-subpages', 'Subpages of this page');
}
} );
//
// --------------------------------------------------------
// addUserActivityLog
// adds a 'user activity log' link to the toolbox bar
// --------------------------------------------------------
jQuery( document ).ready( function( $ ) {
if((wgUserGroups.indexOf("ServerManager") != -1 || wgUserGroups.indexOf("WikiHead") != -1) && (wgNamespaceNumber == 2 || wgNamespaceNumber == 3)){
var linkUserLog = '../network/director.php?form_action=View%20User%20Daily%20Activity&user_activity_log=' + wgTitle;
mw.util.addPortletLink('p-tb', linkUserLog, 'User Activity Log', 't-userlog', 'View user daily activity');
}
} );
//
// *****************************************************************
// &bot=1 on contribs pages (Special:Contributions/Foo).
// *****************************************************************
function hideRollback() {
var botlink = document.location.href;
if( botlink.indexOf( '?' ) == -1 ) {
botlink += '?bot=1';
} else {
botlink += '&bot=1';
}
mw.util.addPortletLink( 'p-cactions', botlink, '&bot=1', 'ca-bot' );
}
if( wgCanonicalSpecialPageName == 'Contributions' ) {
jQuery( document ).ready( hideRollback );
}
/* Auto-refresh button on Special:RecentChanges from mariowiki.com */
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 = 15000;
function ajaxRC() {
appTo = $(".mw-specialpage-summary");
appTo.append(' <span style="position:absolute; right:40px;"><span style="position:relative; top:-45px;"><span style="position:relative; top:-12px; right:-15px;" id="autoRefreshProgress"><img src="/images/loader.gif" border="0" alt=" " /></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></span>');
$("#autoRefreshToggle").click(function () {
setCookie("ajaxRC", $("#autoRefreshToggle").is(":checked") ? "on" : "off")
loadRCData()
});
$("#autoRefreshProgress").hide();
if (getCookie("ajaxRC") == "on" || ajaxRCOverride) {
$("#autoRefreshToggle").attr("checked", "checked");
setTimeout("loadRCData();", rcRefresh);
}
}
function loadRCData() {
if (!$("#autoRefreshToggle").is(":checked")) return;
$('#autoRefreshProgress').show()
$(article).load(location.href + " " + article + " > *", function (data) {
$(article + " .mw-collapsible").makeCollapsible();
$('#autoRefreshProgress').hide()
if ($("#autoRefreshToggle").is(":checked")) setTimeout("loadRCData();", rcRefresh);
});
}
$(function () {
article = "#bodyContent";
for (x in ajaxPages) {
if (wgPageName == ajaxPages[x] && $("#autoRefreshToggle").length == 0) ajaxRC();
}
});