MediaWiki:Common.js

/* Any JavaScript here will be loaded for all users on every page load. */

/* Event attach functions. */ function DW_eventAttach (obj, event, handler) { if (obj.addEventListener) { obj.addEventListener(event, handler, false); } else if (obj.attachEvent) { var r = obj.attachEvent('on' + event, handler); } else { obj['on' + event] = handler; } }

/* Functions for Template:SpoilerWindow */ function DW_createSpoilerLink { var el_list = document.getElementsByTagName('div'); var el_cur; for (var i = 0, l = el_list.length; i < l; i++){ el_cur = el_list[i]; if ((el_cur.className && el_cur.className == 'dwspoiler')) { var container = el_cur.getElementsByTagName('div'); if (!container.item(1).style.display || container.item(1).style.display == 'block') { var text = document.createTextNode('Hide'); } else { var text = document.createTextNode('Show'); }			var link = document.createElement('a'); link.appendChild(text); link.setAttribute('href', 'javascript:void(0);'); DW_eventAttach(link, 'click', function { DW_toggleVisibility(this); }); var toggle_element = el_cur.getElementsByTagName('span'); toggle_element.item(0).appendChild(document.createTextNode('[')); toggle_element.item(0).appendChild(link); toggle_element.item(0).appendChild(document.createTextNode(']')); }	} } addOnloadHook(DW_createSpoilerLink);

function DW_toggleVisibility (obj) { var container = obj.parentNode.parentNode.parentNode.getElementsByTagName('div').item(1); if (!container.style.display || container.style.display == 'block') { container.style.display = 'none'; obj.innerHTML = 'Show'; } else { container.style.display = 'block'; obj.innerHTML = 'Hide'; } }

/** Collapsible tables ********************************************************* * * Description: Allows tables to be collapsed, showing only the header. See *              **DOCUMENTATION LINK**. * Maintainers: **MAINTAINERS** */ var autoCollapse = 2; var collapseCaption = "hide"; var expandCaption = "show"; function collapseTable( tableIndex ) {   var Button = document.getElementById( "collapseButton" + tableIndex ); var Table = document.getElementById( "collapsibleTable" + tableIndex ); if ( !Table || !Button ) { return false; }   var Rows = Table.rows; if ( Button.firstChild.data == collapseCaption ) { for ( var i = 1; i < Rows.length; i++ ) { Rows[i].style.display = "none"; }       Button.firstChild.data = expandCaption; } else { for ( var i = 1; i < Rows.length; i++ ) { Rows[i].style.display = Rows[0].style.display; }       Button.firstChild.data = collapseCaption; } } function createCollapseButtons {   var tableIndex = 0; var NavigationBoxes = new Object; var Tables = document.getElementsByTagName( "table" ); for ( var i = 0; i < Tables.length; i++ ) { if ( hasClass( Tables[i], "collapsible" ) ) { /* only add button and increment count if there is a header row to work with */ var HeaderRow = Tables[i].getElementsByTagName( "tr" )[0]; if (!HeaderRow) continue; var Header = HeaderRow.getElementsByTagName( "th" )[0]; if (!Header) continue; NavigationBoxes[ tableIndex ] = Tables[i]; Tables[i].setAttribute( "id", "collapsibleTable" + tableIndex ); var Button    = document.createElement( "span" ); var ButtonLink = document.createElement( "a" ); var ButtonText = document.createTextNode( collapseCaption ); Button.className = "collapseButton"; //Styles are declared in Common.css ButtonLink.style.color = Header.style.color; ButtonLink.setAttribute( "id", "collapseButton" + tableIndex ); ButtonLink.setAttribute( "href", "javascript:collapseTable(" + tableIndex + ");" ); ButtonLink.appendChild( ButtonText ); Button.appendChild( document.createTextNode( "[" ) ); Button.appendChild( ButtonLink ); Button.appendChild( document.createTextNode( "]" ) ); Header.insertBefore( Button, Header.childNodes[0] ); tableIndex++; }   }    for ( var i = 0;  i < tableIndex; i++ ) { if ( hasClass( NavigationBoxes[i], "collapsed" ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], "autocollapse" ) ) ) { collapseTable( i ); }    } } addOnloadHook( createCollapseButtons ); /** Test if an element has a certain class ************************************** * * Description: Uses regular expressions and caching for better performance. * Maintainers: User:Mike Dillon, User:R. Koot, User:SG */ var hasClass = (function {	var reCache = {};	return function (element, className) {		return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);	}; });

/* Overwrite mediawiki's default sort function for tables, fixing how numbers are sorted in table cells if they have a unit attached at the end */ function padnum(str, len) { if (len + 1 >= str.length && str.match(/^\d/)) { str = Array(len + 1 - str.length).join('0') + str; }	return str; }

function ts_sort_numeric(a,b) { var aa = padnum(ts_parseFloat(a[1]),50); var bb = padnum(ts_parseFloat(b[1]),50); return (aa != bb ? aa - bb : a[2] - b[2]); }

// --- // Force Preview  JavaScript code - Start // // To allow any group to bypass being forced to preview, // enter the group name in the permittedGroups array. // E.g. //    var permittedGroups = [];                       // force everyone //   var permittedGroups = [ "user"];                // permit logged-in users //   var permittedGroups = [ "sysop", "bureaucrat"]; // permit sysop, bureaucrat // --- var permittedGroups = [ "sysop" ]; Array.prototype.intersects = function { // 	// Returns true if any element in the argument array // is the same as an element in this array // 	if ( !arguments.length ) return false;

var array2 = arguments[0];

var len1 = this.length; var len2 = array2.length; if ( len2 == 0 ) return false;

for ( var i = 0; i < len1; i++ ) { for ( var j = 0; j < len2; j++ ) { if ( this[i] === array2[j] ) return true; }	}	return false; }; function forcePreview { if ( mw.config.get( 'wgNamespaceNumber' ) == 10 || mw.config.get( 'wgNamespaceNumber' ) == 8 ) return; // No point forcing preview in the Template or MediaWiki namespaces if ( mw.config.get( "wgAction" ) != "edit" ) return; if ( mw.config.get( "wgUserGroups" ).intersects( permittedGroups ) ) return;

var saveButton = document.getElementById( "wpSave" ); if ( !saveButton ) return;

saveButton.disabled = true; saveButton.value = "Save page (use preview first)"; saveButton.style.fontWeight = "normal"; document.getElementById("wpPreview").style.fontWeight = "bold"; }

jQuery(document).ready( forcePreview );

// - // Force Preview  JavaScript code - End // -

// DIV Spoiler JS jQuery(document).ready(function {  $('.div-spoiler-border .div-spoiler-head').show;  $('.div-spoiler-border .div-spoiler-content').hide;  $('.div-spoiler-head').click(function  { $(this).slideUp(100); $(this).parent.find('.div-spoiler-content').slideDown(200); }); });