<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://accessiblegaming.wiki/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://accessiblegaming.wiki/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3ACommon.js"/>
	<link rel="alternate" type="text/html" href="https://accessiblegaming.wiki/index.php?title=MediaWiki:Common.js&amp;action=history"/>
	<updated>2026-06-21T10:40:32Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://accessiblegaming.wiki/index.php?title=MediaWiki:Common.js&amp;diff=4276&amp;oldid=prev</id>
		<title>Ross: Created page with &quot;/* Any JavaScript here will be loaded for all users on every page load. */  /* Platform filter for the PC and Console Games table.    Adds a combo box in a second header row, under the Platform column.    Selecting a platform hides rows that do not include it, using a    &quot;contains&quot; match so multi-platform games appear under every platform. */ ( function () {     var counter = 0;      mw.hook( &#039;wikipage.content&#039; ).add( function ( $content ) {         $content.find( &#039;table...&quot;</title>
		<link rel="alternate" type="text/html" href="https://accessiblegaming.wiki/index.php?title=MediaWiki:Common.js&amp;diff=4276&amp;oldid=prev"/>
		<updated>2026-06-17T17:56:54Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;&lt;span class=&quot;autocomment&quot;&gt;Any JavaScript here will be loaded for all users on every page load.: &lt;/span&gt;  &lt;span class=&quot;autocomment&quot;&gt;Platform filter for the PC and Console Games table.    Adds a combo box in a second header row, under the Platform column.    Selecting a platform hides rows that do not include it, using a    &amp;quot;contains&amp;quot; match so multi-platform games appear under every platform.: &lt;/span&gt; ( function () {     var counter = 0;      mw.hook( &amp;#039;wikipage.content&amp;#039; ).add( function ( $content ) {         $content.find( &amp;#039;table...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
&lt;br /&gt;
/* Platform filter for the PC and Console Games table.&lt;br /&gt;
   Adds a combo box in a second header row, under the Platform column.&lt;br /&gt;
   Selecting a platform hides rows that do not include it, using a&lt;br /&gt;
   &amp;quot;contains&amp;quot; match so multi-platform games appear under every platform. */&lt;br /&gt;
( function () {&lt;br /&gt;
    var counter = 0;&lt;br /&gt;
&lt;br /&gt;
    mw.hook( &amp;#039;wikipage.content&amp;#039; ).add( function ( $content ) {&lt;br /&gt;
        $content.find( &amp;#039;table.platform-filter&amp;#039; ).each( function () {&lt;br /&gt;
            var table = this;&lt;br /&gt;
            if ( table.dataset.platformFilterReady ) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            table.dataset.platformFilterReady = &amp;#039;1&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
            var thead = table.tHead;&lt;br /&gt;
            var tbody = table.tBodies[ 0 ];&lt;br /&gt;
            if ( !thead || !thead.rows.length || !tbody ) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // Find the Platform column by its header text.&lt;br /&gt;
            var headerCells = thead.rows[ 0 ].cells;&lt;br /&gt;
            var platformCol = -1;&lt;br /&gt;
            for ( var i = 0; i &amp;lt; headerCells.length; i++ ) {&lt;br /&gt;
                if ( /platform/i.test( headerCells[ i ].textContent ) ) {&lt;br /&gt;
                    platformCol = i;&lt;br /&gt;
                    break;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            if ( platformCol === -1 ) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // Platform options. Edit this list to add or rename platforms.&lt;br /&gt;
            // &amp;quot;label&amp;quot; appears in the dropdown; &amp;quot;match&amp;quot; is tested against&lt;br /&gt;
            // the text of the Platform cell (case-insensitive).&lt;br /&gt;
            var platforms = [&lt;br /&gt;
                { label: &amp;#039;Windows&amp;#039;,          match: /windows/i },&lt;br /&gt;
                { label: &amp;#039;PlayStation&amp;#039;,      match: /playstation/i },&lt;br /&gt;
                { label: &amp;#039;Xbox / Game Pass&amp;#039;, match: /xbox|game ?pass/i },&lt;br /&gt;
                { label: &amp;#039;Nintendo Switch&amp;#039;,  match: /switch/i },&lt;br /&gt;
                { label: &amp;#039;iOS&amp;#039;,              match: /\bios\b/i },&lt;br /&gt;
                { label: &amp;#039;Android&amp;#039;,          match: /android/i },&lt;br /&gt;
                { label: &amp;#039;Web&amp;#039;,              match: /\bweb\b/i },&lt;br /&gt;
                { label: &amp;#039;Linux&amp;#039;,            match: /linux/i }&lt;br /&gt;
            ];&lt;br /&gt;
&lt;br /&gt;
            var selectId = &amp;#039;platform-filter-select-&amp;#039; + ( counter++ );&lt;br /&gt;
&lt;br /&gt;
            // Status line, announced to screen readers on change.&lt;br /&gt;
            var status = document.createElement( &amp;#039;div&amp;#039; );&lt;br /&gt;
            status.className = &amp;#039;platform-filter-status&amp;#039;;&lt;br /&gt;
            status.setAttribute( &amp;#039;role&amp;#039;, &amp;#039;status&amp;#039; );&lt;br /&gt;
            status.setAttribute( &amp;#039;aria-live&amp;#039;, &amp;#039;polite&amp;#039; );&lt;br /&gt;
            table.parentNode.insertBefore( status, table );&lt;br /&gt;
&lt;br /&gt;
            // Build the second header row holding the combo box.&lt;br /&gt;
            var filterRow = thead.insertRow( -1 );&lt;br /&gt;
&lt;br /&gt;
            if ( platformCol &amp;gt; 0 ) {&lt;br /&gt;
                var lead = document.createElement( &amp;#039;td&amp;#039; );&lt;br /&gt;
                lead.colSpan = platformCol;&lt;br /&gt;
                filterRow.appendChild( lead );&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            var pcell = document.createElement( &amp;#039;td&amp;#039; );&lt;br /&gt;
&lt;br /&gt;
            var label = document.createElement( &amp;#039;label&amp;#039; );&lt;br /&gt;
            label.setAttribute( &amp;#039;for&amp;#039;, selectId );&lt;br /&gt;
            label.textContent = &amp;#039;Filter by platform: &amp;#039;;&lt;br /&gt;
&lt;br /&gt;
            var select = document.createElement( &amp;#039;select&amp;#039; );&lt;br /&gt;
            select.id = selectId;&lt;br /&gt;
&lt;br /&gt;
            var optAll = document.createElement( &amp;#039;option&amp;#039; );&lt;br /&gt;
            optAll.value = &amp;#039;&amp;#039;;&lt;br /&gt;
            optAll.textContent = &amp;#039;All platforms&amp;#039;;&lt;br /&gt;
            select.appendChild( optAll );&lt;br /&gt;
&lt;br /&gt;
            platforms.forEach( function ( p, idx ) {&lt;br /&gt;
                var opt = document.createElement( &amp;#039;option&amp;#039; );&lt;br /&gt;
                opt.value = String( idx );&lt;br /&gt;
                opt.textContent = p.label;&lt;br /&gt;
                select.appendChild( opt );&lt;br /&gt;
            } );&lt;br /&gt;
&lt;br /&gt;
            // Keep dropdown clicks from reaching the sort handler.&lt;br /&gt;
            select.addEventListener( &amp;#039;click&amp;#039;, function ( e ) {&lt;br /&gt;
                e.stopPropagation();&lt;br /&gt;
            } );&lt;br /&gt;
            select.addEventListener( &amp;#039;change&amp;#039;, function () {&lt;br /&gt;
                applyFilter( this.value );&lt;br /&gt;
            } );&lt;br /&gt;
&lt;br /&gt;
            pcell.appendChild( label );&lt;br /&gt;
            pcell.appendChild( select );&lt;br /&gt;
            filterRow.appendChild( pcell );&lt;br /&gt;
&lt;br /&gt;
            var trailing = headerCells.length - platformCol - 1;&lt;br /&gt;
            if ( trailing &amp;gt; 0 ) {&lt;br /&gt;
                var tail = document.createElement( &amp;#039;td&amp;#039; );&lt;br /&gt;
                tail.colSpan = trailing;&lt;br /&gt;
                filterRow.appendChild( tail );&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            function applyFilter( value ) {&lt;br /&gt;
                var rows = tbody.rows;&lt;br /&gt;
                var total = rows.length;&lt;br /&gt;
                var shown = 0;&lt;br /&gt;
                var test = ( value === &amp;#039;&amp;#039; ) ? null : platforms[ Number( value ) ].match;&lt;br /&gt;
&lt;br /&gt;
                for ( var r = 0; r &amp;lt; total; r++ ) {&lt;br /&gt;
                    var row = rows[ r ];&lt;br /&gt;
                    var pc = row.cells[ platformCol ];&lt;br /&gt;
                    var textVal = pc ? pc.textContent : &amp;#039;&amp;#039;;&lt;br /&gt;
                    if ( !test || test.test( textVal ) ) {&lt;br /&gt;
                        row.style.display = &amp;#039;&amp;#039;;&lt;br /&gt;
                        shown++;&lt;br /&gt;
                    } else {&lt;br /&gt;
                        row.style.display = &amp;#039;none&amp;#039;;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                if ( !test ) {&lt;br /&gt;
                    status.textContent = &amp;#039;Showing all &amp;#039; + total + &amp;#039; games.&amp;#039;;&lt;br /&gt;
                } else {&lt;br /&gt;
                    status.textContent = &amp;#039;Showing &amp;#039; + shown + &amp;#039; of &amp;#039; + total +&lt;br /&gt;
                        &amp;#039; games available on &amp;#039; + platforms[ Number( value ) ].label + &amp;#039;.&amp;#039;;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
    } );&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>Ross</name></author>
	</entry>
</feed>