<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.gearknob.org/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3ACommon.js</id>
	<title>MediaWiki:Common.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.gearknob.org/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3ACommon.js"/>
	<link rel="alternate" type="text/html" href="https://wiki.gearknob.org/index.php?title=MediaWiki:Common.js&amp;action=history"/>
	<updated>2026-04-29T21:05:28Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.38.2</generator>
	<entry>
		<id>https://wiki.gearknob.org/index.php?title=MediaWiki:Common.js&amp;diff=105&amp;oldid=prev</id>
		<title>AlexGRFan97: Trying an import of Halopedia's TabSystem.js to try and get the system working.</title>
		<link rel="alternate" type="text/html" href="https://wiki.gearknob.org/index.php?title=MediaWiki:Common.js&amp;diff=105&amp;oldid=prev"/>
		<updated>2021-11-10T15:00:16Z</updated>

		<summary type="html">&lt;p&gt;Trying an import of Halopedia&amp;#039;s TabSystem.js to try and get the system working.&lt;/p&gt;
&lt;a href=&quot;https://wiki.gearknob.org/index.php?title=MediaWiki:Common.js&amp;amp;diff=105&amp;amp;oldid=102&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>AlexGRFan97</name></author>
	</entry>
	<entry>
		<id>https://wiki.gearknob.org/index.php?title=MediaWiki:Common.js&amp;diff=102&amp;oldid=prev</id>
		<title>AlexGRFan97: Added tab support.</title>
		<link rel="alternate" type="text/html" href="https://wiki.gearknob.org/index.php?title=MediaWiki:Common.js&amp;diff=102&amp;oldid=prev"/>
		<updated>2021-11-10T14:12:32Z</updated>

		<summary type="html">&lt;p&gt;Added tab support.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/**&lt;br /&gt;
 * JS Tab System, jacked and hacked from the jsprefs in wikibits.js&lt;br /&gt;
 *&lt;br /&gt;
 * Original code by Dantman&lt;br /&gt;
 * Refactored a bit by Jack Phoenix on 11 April 2014&lt;br /&gt;
 * Support for linking to a particular tab by MatmaRex on 30 December 2016.&lt;br /&gt;
 * @note Should be rewritten to properly use jQuery like how mediawiki.special.preferences.js does.&lt;br /&gt;
 */&lt;br /&gt;
var TabSystem = {&lt;br /&gt;
	/**&lt;br /&gt;
	 * @property {boolean}&lt;br /&gt;
	 * Is the user's browser a KHTML-based one (usually, but not always, Konqueror)?&lt;br /&gt;
	 */&lt;br /&gt;
	isKHTML: ( navigator.vendor == 'KDE' || ( document.childNodes &amp;amp;&amp;amp; !document.all &amp;amp;&amp;amp; !navigator.taintEnabled ) ),&lt;br /&gt;
 &lt;br /&gt;
	/**&lt;br /&gt;
	 * @property {boolean}&lt;br /&gt;
	 * Is the user's browser Opera?&lt;br /&gt;
	 */&lt;br /&gt;
	isOpera: navigator.userAgent.toLowerCase().indexOf( 'opera' ) != -1,&lt;br /&gt;
 &lt;br /&gt;
	/*&lt;br /&gt;
		Written by Jonathan Snook, http://www.snook.ca/jonathan&lt;br /&gt;
		Add-ons by Robert Nyman, http://www.robertnyman.com&lt;br /&gt;
		Author says &amp;quot;The credit comment is all it takes, no license. Go crazy with it!:-)&amp;quot;&lt;br /&gt;
		From http://www.robertnyman.com/2005/11/07/the-ultimate-getelementsbyclassname/&lt;br /&gt;
	*/&lt;br /&gt;
	getElementsByClassName: function( oElm, strTagName, oClassNames ) {&lt;br /&gt;
		var arrReturnElements = [];&lt;br /&gt;
		if ( typeof oElm.getElementsByClassName == 'function' ) {&lt;br /&gt;
			/* Use a native implementation where possible FF3, Saf3.2, Opera 9.5 */&lt;br /&gt;
			var arrNativeReturn = oElm.getElementsByClassName( oClassNames );&lt;br /&gt;
			if ( strTagName == '*' ) {&lt;br /&gt;
				return arrNativeReturn;&lt;br /&gt;
			}&lt;br /&gt;
			for ( var h = 0; h &amp;lt; arrNativeReturn.length; h++ ) {&lt;br /&gt;
				if ( arrNativeReturn[h].tagName.toLowerCase() == strTagName.toLowerCase() ) {&lt;br /&gt;
					arrReturnElements[arrReturnElements.length] = arrNativeReturn[h];&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			return arrReturnElements;&lt;br /&gt;
		}&lt;br /&gt;
 &lt;br /&gt;
		var arrElements = ( strTagName == '*' &amp;amp;&amp;amp; oElm.all ) ? oElm.all : oElm.getElementsByTagName( strTagName );&lt;br /&gt;
		var arrRegExpClassNames = [];&lt;br /&gt;
		if ( typeof oClassNames == 'object' ) {&lt;br /&gt;
			for ( var i = 0; i &amp;lt; oClassNames.length; i++ ) {&lt;br /&gt;
				arrRegExpClassNames[arrRegExpClassNames.length] =&lt;br /&gt;
					new RegExp( &amp;quot;(^|\\s)&amp;quot; + oClassNames[i].replace( /\-/g, &amp;quot;\\-&amp;quot; ) + &amp;quot;(\\s|$)&amp;quot; );&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			arrRegExpClassNames[arrRegExpClassNames.length] =&lt;br /&gt;
				new RegExp( &amp;quot;(^|\\s)&amp;quot; + oClassNames.replace( /\-/g, &amp;quot;\\-&amp;quot; ) + &amp;quot;(\\s|$)&amp;quot; );&lt;br /&gt;
		}&lt;br /&gt;
 &lt;br /&gt;
		var oElement;&lt;br /&gt;
		var bMatchesAll;&lt;br /&gt;
		for ( var j = 0; j &amp;lt; arrElements.length; j++ ) {&lt;br /&gt;
			oElement = arrElements[j];&lt;br /&gt;
			bMatchesAll = true;&lt;br /&gt;
			for ( var k = 0; k &amp;lt; arrRegExpClassNames.length; k++ ) {&lt;br /&gt;
				if ( !arrRegExpClassNames[k].test( oElement.className ) ) {&lt;br /&gt;
					bMatchesAll = false;&lt;br /&gt;
					break;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			if ( bMatchesAll ) {&lt;br /&gt;
				arrReturnElements[arrReturnElements.length] = oElement;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
 &lt;br /&gt;
		return arrReturnElements;&lt;br /&gt;
	},&lt;br /&gt;
 &lt;br /&gt;
	/**&lt;br /&gt;
	 * Main function that performs all the magic on all div elements that have&lt;br /&gt;
	 * class=&amp;quot;tab&amp;quot; and are inside a div that has class=&amp;quot;tabcontainer&amp;quot;.&lt;br /&gt;
	 */&lt;br /&gt;
	main: function() {&lt;br /&gt;
		var tabcontainers = TabSystem.getElementsByClassName( document, 'div', 'tabcontainer' );&lt;br /&gt;
		for ( var tc = 0; tc &amp;lt; tabcontainers.length; tc++ ) {&lt;br /&gt;
			if ( !tabcontainers[tc] || !document.createElement ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			if ( tabcontainers[tc].nodeName.toLowerCase() == 'a' ) {&lt;br /&gt;
				return; // Occasional IE problem&lt;br /&gt;
			}&lt;br /&gt;
 &lt;br /&gt;
			tabcontainers[tc].className += ' jstabs';&lt;br /&gt;
 &lt;br /&gt;
			var sections = [];&lt;br /&gt;
			var children = tabcontainers[tc].childNodes;&lt;br /&gt;
			var seci = 0;&lt;br /&gt;
 &lt;br /&gt;
			for ( var i = 0; i &amp;lt; children.length; i++ ) {&lt;br /&gt;
				if ( children[i].className &amp;amp;&amp;amp; children[i].className.match( /tab/i ) ) {&lt;br /&gt;
					children[i].id = 'tabsection-' + seci + '-' + tc;&lt;br /&gt;
					children[i].className += ' tabsection';&lt;br /&gt;
					// Opera and KHTML-based browsers get a special class&lt;br /&gt;
					if ( TabSystem.isOpera || TabSystem.isKHTML ) {&lt;br /&gt;
						children[i].className += ' tabsection operatabsection';&lt;br /&gt;
					}&lt;br /&gt;
					var legends = TabSystem.getElementsByClassName( children[i], 'div', 'tab' );&lt;br /&gt;
					sections[seci] = {};&lt;br /&gt;
					legends[0].className = 'mainTab';&lt;br /&gt;
					if ( legends[0] &amp;amp;&amp;amp; legends[0].firstChild.nodeValue ) {&lt;br /&gt;
						sections[seci].text = legends[0].firstChild.nodeValue;&lt;br /&gt;
					} else {&lt;br /&gt;
						sections[seci].text = '# ' + seci;&lt;br /&gt;
					}&lt;br /&gt;
					sections[seci].secid = children[i].id;&lt;br /&gt;
					seci++;&lt;br /&gt;
					if ( sections.length != 1 ) {&lt;br /&gt;
						children[i].style.display = 'none';&lt;br /&gt;
					} else {&lt;br /&gt;
						var selectedid = children[i].id;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
 &lt;br /&gt;
			var toc = document.createElement( 'ul' );&lt;br /&gt;
			toc.className = 'tabtoc';&lt;br /&gt;
			toc.id = 'tabtoc-' + tc;&lt;br /&gt;
			toc.selectedid = selectedid;&lt;br /&gt;
 &lt;br /&gt;
			for ( i = 0; i &amp;lt; sections.length; i++ ) {&lt;br /&gt;
				var li = document.createElement( 'li' );&lt;br /&gt;
				if ( i === 0 ) {&lt;br /&gt;
					li.className = 'selected';&lt;br /&gt;
				}&lt;br /&gt;
				var a = document.createElement( 'a' );&lt;br /&gt;
				a.href = '#' + sections[i].secid;&lt;br /&gt;
				a.appendChild( document.createTextNode( sections[i].text ) );&lt;br /&gt;
				a.secid = sections[i].secid;&lt;br /&gt;
				li.appendChild( a );&lt;br /&gt;
				toc.appendChild( li );&lt;br /&gt;
				// Capture current value of variables in the closure&lt;br /&gt;
				( function ( i, a ) {&lt;br /&gt;
					$( window ).on( 'hashchange', function () {&lt;br /&gt;
						if ( location.hash === '#' + sections[i].secid ) {&lt;br /&gt;
							TabSystem.uncoverTabSection( toc, a );&lt;br /&gt;
						}&lt;br /&gt;
					} )&lt;br /&gt;
					if ( location.hash === '#' + sections[i].secid ) {&lt;br /&gt;
						TabSystem.uncoverTabSection( toc, a );&lt;br /&gt;
					}&lt;br /&gt;
				} )( i, a );&lt;br /&gt;
			}&lt;br /&gt;
 &lt;br /&gt;
			tabcontainers[tc].parentNode.insertBefore( toc, tabcontainers[tc] );&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
 &lt;br /&gt;
	/**&lt;br /&gt;
	 * Show the contents of a tab section when the user clicks on the tab.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return {boolean} Always false&lt;br /&gt;
	 */&lt;br /&gt;
	uncoverTabSection: function( ul, a ) {&lt;br /&gt;
		var oldsecid = ul.selectedid;&lt;br /&gt;
		var newsec = document.getElementById( a.secid );&lt;br /&gt;
		if ( oldsecid != a.secid ) {&lt;br /&gt;
			document.getElementById( oldsecid ).style.display = 'none';&lt;br /&gt;
			newsec.style.display = 'block';&lt;br /&gt;
			ul.selectedid = a.secid;&lt;br /&gt;
			var lis = ul.getElementsByTagName( 'li' );&lt;br /&gt;
			for ( var i = 0; i &amp;lt; lis.length; i++ ) {&lt;br /&gt;
				lis[i].className = '';&lt;br /&gt;
			}&lt;br /&gt;
			a.parentNode.className = 'selected';&lt;br /&gt;
		}&lt;br /&gt;
		return false;&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
 &lt;br /&gt;
// Attach the onload handler using jQuery.&lt;br /&gt;
$( function() {&lt;br /&gt;
	TabSystem.main();&lt;br /&gt;
} );&lt;/div&gt;</summary>
		<author><name>AlexGRFan97</name></author>
	</entry>
</feed>