<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="sv">
		<id>https://sv.simpsonswiki.com/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3ACommon.js</id>
		<title>MediaWiki:Common.js - Versionshistorik</title>
		<link rel="self" type="application/atom+xml" href="https://sv.simpsonswiki.com/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3ACommon.js"/>
		<link rel="alternate" type="text/html" href="https://sv.simpsonswiki.com/w/index.php?title=MediaWiki:Common.js&amp;action=history"/>
		<updated>2026-07-14T15:57:13Z</updated>
		<subtitle>Versionshistorik för denna sida på wikin</subtitle>
		<generator>MediaWiki 1.27.3</generator>

	<entry>
		<id>https://sv.simpsonswiki.com/w/index.php?title=MediaWiki:Common.js&amp;diff=240&amp;oldid=prev</id>
		<title>Solar Dragon: Skapade sidan med '/* JavaScript som skrivs här körs varje gång en användare laddar en sida. */ /* Any JavaScript here will be loaded for all users on every page load. */ //&lt;pre&gt; /** Test if an...'</title>
		<link rel="alternate" type="text/html" href="https://sv.simpsonswiki.com/w/index.php?title=MediaWiki:Common.js&amp;diff=240&amp;oldid=prev"/>
				<updated>2011-07-20T11:18:09Z</updated>
		
		<summary type="html">&lt;p&gt;Skapade sidan med &amp;#039;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;JavaScript som skrivs här körs varje gång en användare laddar en sida.: &lt;/span&gt; ‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Any JavaScript here will be loaded for all users on every page load.: &lt;/span&gt; //&amp;lt;pre&amp;gt; /** Test if an...&amp;#039;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Ny sida&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/* JavaScript som skrivs här körs varje gång en användare laddar en sida. */&lt;br /&gt;
/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
//&amp;lt;pre&amp;gt;&lt;br /&gt;
/** Test if an element has a certain class **************************************&lt;br /&gt;
 *&lt;br /&gt;
 * Description: Uses regular expressions and caching for better performance.&lt;br /&gt;
 */&lt;br /&gt;
var hasClass = ( function() {&lt;br /&gt;
	var reCache = {};&lt;br /&gt;
	return function( element, className ) {&lt;br /&gt;
		return ( reCache[className] ? reCache[className] : ( reCache[className] = new RegExp( &amp;quot;(?:\\s|^)&amp;quot; + className + &amp;quot;(?:\\s|$)&amp;quot; ) ) ).test( element.className );&lt;br /&gt;
	};&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/** Collapsible tables *********************************************************&lt;br /&gt;
 *&lt;br /&gt;
 * Description: Allows tables to be collapsed, showing only the header.&lt;br /&gt;
 * See [[wikipedia:Wikipedia:NavFrame]].&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
var autoCollapse = 2;&lt;br /&gt;
var collapseCaption = 'hide';&lt;br /&gt;
var expandCaption = 'show';&lt;br /&gt;
&lt;br /&gt;
function collapseTable( tableIndex ) {&lt;br /&gt;
	var Button = document.getElementById( 'collapseButton' + tableIndex );&lt;br /&gt;
	var Table = document.getElementById( 'collapsibleTable' + tableIndex );&lt;br /&gt;
&lt;br /&gt;
	if ( !Table || !Button ) {&lt;br /&gt;
		return false;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var Rows = Table.rows;&lt;br /&gt;
&lt;br /&gt;
	if ( Button.firstChild.data == collapseCaption ) {&lt;br /&gt;
		for ( var i = 1; i &amp;lt; Rows.length; i++ ) {&lt;br /&gt;
			Rows[i].style.display = 'none';&lt;br /&gt;
		}&lt;br /&gt;
		Button.firstChild.data = expandCaption;&lt;br /&gt;
	} else {&lt;br /&gt;
		for ( var i = 1; i &amp;lt; Rows.length; i++ ) {&lt;br /&gt;
			Rows[i].style.display = Rows[0].style.display;&lt;br /&gt;
		}&lt;br /&gt;
		Button.firstChild.data = collapseCaption;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function createCollapseButtons() {&lt;br /&gt;
	var tableIndex = 0;&lt;br /&gt;
	var NavigationBoxes = new Object();&lt;br /&gt;
	var Tables = document.getElementsByTagName( 'table' );&lt;br /&gt;
&lt;br /&gt;
	for ( var i = 0; i &amp;lt; Tables.length; i++ ) {&lt;br /&gt;
		if ( hasClass( Tables[i], 'collapsible' ) ) {&lt;br /&gt;
			/* only add button and increment count if there is a header row to work with */&lt;br /&gt;
			var HeaderRow = Tables[i].getElementsByTagName( 'tr' )[0];&lt;br /&gt;
			if ( !HeaderRow ) {&lt;br /&gt;
				continue;&lt;br /&gt;
			}&lt;br /&gt;
			var Header = HeaderRow.getElementsByTagName( 'th' )[0];&lt;br /&gt;
			if ( !Header ) {&lt;br /&gt;
				continue;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			NavigationBoxes[tableIndex] = Tables[i];&lt;br /&gt;
			Tables[i].setAttribute( 'id', 'collapsibleTable' + tableIndex );&lt;br /&gt;
&lt;br /&gt;
			var Button = document.createElement( 'span' );&lt;br /&gt;
			var ButtonLink = document.createElement( 'a' );&lt;br /&gt;
			var ButtonText = document.createTextNode( collapseCaption );&lt;br /&gt;
&lt;br /&gt;
			Button.style.styleFloat = 'right';&lt;br /&gt;
			Button.style.cssFloat = 'right';&lt;br /&gt;
			Button.style.fontWeight = 'normal';&lt;br /&gt;
			Button.style.textAlign = 'right';&lt;br /&gt;
			Button.style.width = '6em';&lt;br /&gt;
&lt;br /&gt;
			ButtonLink.style.color = Header.style.color;&lt;br /&gt;
			ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );&lt;br /&gt;
			ButtonLink.setAttribute( 'href', 'javascript:collapseTable(' + tableIndex + ');' );&lt;br /&gt;
			ButtonLink.appendChild( ButtonText );&lt;br /&gt;
&lt;br /&gt;
			Button.appendChild( document.createTextNode( '[' ) );&lt;br /&gt;
			Button.appendChild( ButtonLink );&lt;br /&gt;
			Button.appendChild( document.createTextNode( ']' ) );&lt;br /&gt;
&lt;br /&gt;
			Header.insertBefore( Button, Header.childNodes[0] );&lt;br /&gt;
			tableIndex++;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	for ( var i = 0;  i &amp;lt; tableIndex; i++ ) {&lt;br /&gt;
		if (&lt;br /&gt;
			hasClass( NavigationBoxes[i], 'collapsed' ) ||&lt;br /&gt;
			( tableIndex &amp;gt;= autoCollapse &amp;amp;&amp;amp; hasClass( NavigationBoxes[i], 'autocollapse' ) )&lt;br /&gt;
		)&lt;br /&gt;
		{&lt;br /&gt;
			collapseTable( i );&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addOnloadHook( createCollapseButtons );&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
    Source: http://www.dustindiaz.com/getelementsbyclass/&lt;br /&gt;
    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.&lt;br /&gt;
    Example: getElementsByClass('infobox', document.getElementById('content'), 'div') selects the same elements as the CSS declaration #content div.infobox&lt;br /&gt;
*/&lt;br /&gt;
function getElementsByClass( searchClass, node, tag ) {&lt;br /&gt;
	var classElements = new Array();&lt;br /&gt;
&lt;br /&gt;
	if( node == null ) {&lt;br /&gt;
		node = document;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if( tag == null ) {&lt;br /&gt;
		tag = '*';&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var els = node.getElementsByTagName( tag );&lt;br /&gt;
	var elsLen = els.length;&lt;br /&gt;
	var tester = new ClassTester( searchClass );&lt;br /&gt;
&lt;br /&gt;
	for( i = 0, j = 0; i &amp;lt; elsLen; i++ ) {&lt;br /&gt;
		if( tester.isMatch( els[i] ) ) {&lt;br /&gt;
			classElements[j] = els[i];&lt;br /&gt;
			j++;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return classElements;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function ClassTester( className ) {&lt;br /&gt;
	this.regex = new RegExp( &amp;quot;(^|\\s)&amp;quot; + className + &amp;quot;(\\s|$)&amp;quot; );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ClassTester.prototype.isMatch = function( element ) {&lt;br /&gt;
	return this.regex.test( element.className );&lt;br /&gt;
}&lt;br /&gt;
/* end getElementsByClass */&lt;br /&gt;
&lt;br /&gt;
/** Username replace function ([[template:USERNAME]]) *******************************&lt;br /&gt;
  * Inserts user name into &amp;lt;span class=&amp;quot;insertusername&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
  */&lt;br /&gt;
function UserNameReplace() {&lt;br /&gt;
	if( typeof( disableUsernameReplace ) != 'undefined' &amp;amp;&amp;amp; disableUsernameReplace || wgUserName == null ) {&lt;br /&gt;
		return;&lt;br /&gt;
    }&lt;br /&gt;
	var spans = getElementsByClass( 'insertusername', null, 'span' );&lt;br /&gt;
&lt;br /&gt;
	for( var i = 0; i &amp;lt; spans.length; i++ ) {&lt;br /&gt;
		spans[i].innerHTML = wgUserName;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
addOnloadHook( UserNameReplace );&lt;br /&gt;
&lt;br /&gt;
// **************************************************&lt;br /&gt;
// Experimental JavaScript countdown timer (Splarka)&lt;br /&gt;
// Version 0.0.3&lt;br /&gt;
// **************************************************&lt;br /&gt;
//&lt;br /&gt;
// Usage example:&lt;br /&gt;
//  &amp;lt;span class=&amp;quot;countdown&amp;quot; style=&amp;quot;display:none;&amp;quot;&amp;gt;&lt;br /&gt;
//  Only &amp;lt;span class=&amp;quot;countdowndate&amp;quot;&amp;gt;January 01 2007 00:00:00 PST&amp;lt;/span&amp;gt; until New years.&lt;br /&gt;
//  &amp;lt;/span&amp;gt;&lt;br /&gt;
//  &amp;lt;span class=&amp;quot;nocountdown&amp;quot;&amp;gt;JavaScript disabled.&amp;lt;/span&amp;gt;&lt;br /&gt;
function updatetimer( i ) {&lt;br /&gt;
	var now = new Date();&lt;br /&gt;
	var then = timers[i].eventdate;&lt;br /&gt;
	var diff = count = Math.floor( ( then.getTime() - now.getTime( ) ) / 1000 );&lt;br /&gt;
&lt;br /&gt;
	// catch bad date strings&lt;br /&gt;
	if( isNaN( diff ) ) {&lt;br /&gt;
		timers[i].firstChild.nodeValue = '** ' + timers[i].eventdate + ' **';&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// determine plus/minus&lt;br /&gt;
	if( diff &amp;lt; 0 ) {&lt;br /&gt;
		diff = -diff;&lt;br /&gt;
		var tpm = ' ';&lt;br /&gt;
	} else {&lt;br /&gt;
		var tpm = ' ';&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// calcuate the diff&lt;br /&gt;
	var left = ( diff % 60 ) + ' seconds';&lt;br /&gt;
	diff = Math.floor( diff / 60 );&lt;br /&gt;
	if( diff &amp;gt; 0 ) {&lt;br /&gt;
		left = ( diff % 60 ) + ' minutes ' + left;&lt;br /&gt;
	}&lt;br /&gt;
	diff = Math.floor( diff / 60 );&lt;br /&gt;
	if( diff &amp;gt; 0 ) {&lt;br /&gt;
		left = ( diff % 24 ) + ' hours ' + left;&lt;br /&gt;
	}&lt;br /&gt;
	diff = Math.floor( diff / 24 );&lt;br /&gt;
	if( diff &amp;gt; 0 ) {&lt;br /&gt;
		left = diff + ' days ' + left;&lt;br /&gt;
	}&lt;br /&gt;
	timers[i].firstChild.nodeValue = tpm + left;&lt;br /&gt;
&lt;br /&gt;
	// a setInterval() is more efficient, but calling setTimeout()&lt;br /&gt;
	// makes errors break the script rather than infinitely recurse&lt;br /&gt;
	timeouts[i] = setTimeout( 'updatetimer(' + i + ')', 1000 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function checktimers() {&lt;br /&gt;
	// hide 'nocountdown' and show 'countdown'&lt;br /&gt;
	var nocountdowns = getElementsByClassName( document, 'span', 'nocountdown' );&lt;br /&gt;
	for( var i in nocountdowns ) {&lt;br /&gt;
		nocountdowns[i].style.display = 'none';&lt;br /&gt;
	}&lt;br /&gt;
	var countdowns = getElementsByClassName( document, 'span', 'countdown' );&lt;br /&gt;
	for( var i in countdowns ) {&lt;br /&gt;
		countdowns[i].style.display = 'inline';&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// set up global objects timers and timeouts.&lt;br /&gt;
	timers = getElementsByClassName( document, 'span', 'countdowndate' ); // global&lt;br /&gt;
	timeouts = new Array(); // generic holder for the timeouts, global&lt;br /&gt;
	if( timers.length == 0 ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	for( var i in timers ) {&lt;br /&gt;
		timers[i].eventdate = new Date( timers[i].firstChild.nodeValue );&lt;br /&gt;
		updatetimer( i ); // start it up&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
addOnloadHook( checktimers );&lt;br /&gt;
&lt;br /&gt;
// **************************************************&lt;br /&gt;
//  - end -  Experimental JavaScript countdown timer&lt;br /&gt;
// **************************************************&lt;br /&gt;
&lt;br /&gt;
/* Returns h1.firstHeading (the page title element). */&lt;br /&gt;
function getFirstHeading() {&lt;br /&gt;
	var elements = getElementsByClass( 'firstHeading', document.getElementById( 'content' ), 'h1' );&lt;br /&gt;
	return ( elements != null &amp;amp;&amp;amp; elements.length &amp;gt; 0 ) ? elements[0] : null;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// BEGIN JavaScript title rewrite&lt;br /&gt;
// requires getFirstHeading() and getElementsByClass() and its dependencies&lt;br /&gt;
function rewriteTitle() {&lt;br /&gt;
	if( typeof( window.SKIP_TITLE_REWRITE ) != 'undefined' &amp;amp;&amp;amp; window.SKIP_TITLE_REWRITE ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
 &lt;br /&gt;
	var titleDiv = document.getElementById( 'title-meta' );&lt;br /&gt;
 &lt;br /&gt;
	if( titleDiv == null ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
 &lt;br /&gt;
	var cloneNode = titleDiv.cloneNode( true );&lt;br /&gt;
	var firstHeading = getFirstHeading();&lt;br /&gt;
	var node = firstHeading.childNodes[0];&lt;br /&gt;
 &lt;br /&gt;
	// new, then old!&lt;br /&gt;
	firstHeading.replaceChild( cloneNode, node );&lt;br /&gt;
	cloneNode.style.display = 'inline';&lt;br /&gt;
 &lt;br /&gt;
	var titleAlign = document.getElementById( 'title-align' );&lt;br /&gt;
	firstHeading.style.textAlign = titleAlign.childNodes[0].nodeValue;&lt;br /&gt;
}&lt;br /&gt;
addOnloadHook( rewriteTitle );&lt;br /&gt;
// END JavaScript title rewrite&lt;/div&gt;</summary>
		<author><name>Solar Dragon</name></author>	</entry>

	</feed>