Page Actions

MediaWiki talk

Common.js

From ISOGG Wiki

/* Original Javascript, uncompressed */

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

// Add "mainpage" class to the body element if ( wgMainPageTitle === wgPageName && wgAction === 'view' ) { $( document ).ready( function() { document.body.className += ' mainpage'; }); }

// Editpage scripts if( wgAction == 'edit' || wgAction == 'submit' ) { importScript( 'MediaWiki:Common.js/edit.js' ); }

/* End of extra pages */

/* Test if an element has a certain class **************************************

*
* From English Wikipedia, 2008-09-15
*
* 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 ); }; })();

/**

* Collapsible tables *********************************************************
*
* Description: Allows tables to be collapsed, showing only the header. See
*              Wikipedia:NavFrame.
* Maintainers: User:R. Koot
*/

var autoCollapse = 2; var collapseCaption = 'hide'; var expandCaption = 'show';

window.collapseTable = function ( tableIndex ) {

   var Button = document.getElementById( 'collapseButton' + tableIndex );
   var Table = document.getElementById( 'collapsibleTable' + tableIndex );

   if ( !Table || !Button ) {
       return false;
   }

   var Rows = Table.rows;
   var i;

   if ( Button.firstChild.data === collapseCaption ) {
       for ( i = 1; i < Rows.length; i++ ) {
           Rows[i].style.display = 'none';
       }
       Button.firstChild.data = expandCaption;
   } else {
       for ( 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 = {};
   var Tables = document.getElementsByTagName( 'table' );
   var i;

   function handleButtonLink( index, e ) {
       window.collapseTable( index );
       e.preventDefault();
   }

   for ( i = 0; i < Tables.length; i++ ) {
       if ( $( Tables[i] ).hasClass( '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', '#' );
           $( ButtonLink ).on( 'click', $.proxy( handleButtonLink, ButtonLink, tableIndex ) );
           ButtonLink.appendChild( ButtonText );

           Button.appendChild( document.createTextNode( '[' ) );
           Button.appendChild( ButtonLink );
           Button.appendChild( document.createTextNode( ']' ) );

           Header.insertBefore( Button, Header.firstChild );
           tableIndex++;
       }
   }

   for ( i = 0;  i < tableIndex; i++ ) {
       if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) || ( tableIndex >= autoCollapse && $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) ) ) {
           window.collapseTable( i );
       } 
       else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) {
           var element = NavigationBoxes[i];
           while ((element = element.parentNode)) {
               if ( $( element ).hasClass( 'outercollapse' ) ) {
                   window.collapseTable ( i );
                   break;
               }
           }
       }
   }

}

$( createCollapseButtons );

/**

* Dynamic Navigation Bars (experimental)
*
* Description: See Wikipedia:NavFrame.
* Maintainers: UNMAINTAINED
*/

/* set up the words in your language */ var NavigationBarHide = '[' + collapseCaption + ']'; var NavigationBarShow = '[' + expandCaption + ']';

/**

* Shows and hides content and picture (if available) of navigation bars
* Parameters:
*     indexNavigationBar: the index of navigation bar to be toggled
**/

window.toggleNavigationBar = function ( indexNavigationBar, event ) {

   var NavToggle = document.getElementById( 'NavToggle' + indexNavigationBar );
   var NavFrame = document.getElementById( 'NavFrame' + indexNavigationBar );
   var NavChild;

   if ( !NavFrame || !NavToggle ) {
       return false;
   }

   /* if shown now */
   if ( NavToggle.firstChild.data === NavigationBarHide ) {
       for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
           if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {
               NavChild.style.display = 'none';
           }
       }
   NavToggle.firstChild.data = NavigationBarShow;

   /* if hidden now */
   } else if ( NavToggle.firstChild.data === NavigationBarShow ) {
       for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
           if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {
               NavChild.style.display = 'block';
           }
       }
       NavToggle.firstChild.data = NavigationBarHide;
   }

   event.preventDefault();

};

/* adds show/hide-button to navigation bars */ function createNavigationBarToggleButton() {

   var indexNavigationBar = 0;
   var NavFrame;
   var NavChild;
   /* iterate over all < div >-elements */
   var divs = document.getElementsByTagName( 'div' );
   for ( var i = 0; (NavFrame = divs[i]); i++ ) {
       /* if found a navigation bar */
       if ( $( NavFrame ).hasClass( 'NavFrame' ) ) {

           indexNavigationBar++;
           var NavToggle = document.createElement( 'a' );
           NavToggle.className = 'NavToggle';
           NavToggle.setAttribute( 'id', 'NavToggle' + indexNavigationBar );
           NavToggle.setAttribute( 'href', '#' );
           $( NavToggle ).on( 'click', $.proxy( window.toggleNavigationBar, window, indexNavigationBar ) );

           var isCollapsed = $( NavFrame ).hasClass( 'collapsed' );
           /**
            * Check if any children are already hidden.  This loop is here for backwards compatibility:
            * the old way of making NavFrames start out collapsed was to manually add style="display:none"
            * to all the NavPic/NavContent elements.  Since this was bad for accessibility (no way to make
            * the content visible without JavaScript support), the new recommended way is to add the class
            * "collapsed" to the NavFrame itself, just like with collapsible tables.
            */
           for ( NavChild = NavFrame.firstChild; NavChild != null && !isCollapsed; NavChild = NavChild.nextSibling ) {
               if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {
                   if ( NavChild.style.display === 'none' ) {
                       isCollapsed = true;
                   }
               }
           }
           if ( isCollapsed ) {
               for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
                   if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {
                       NavChild.style.display = 'none';
                   }
               }
           }
           var NavToggleText = document.createTextNode( isCollapsed ? NavigationBarShow : NavigationBarHide );
           NavToggle.appendChild( NavToggleText );

           /* Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) */
           for( var j = 0; j < NavFrame.childNodes.length; j++ ) {
               if ( $( NavFrame.childNodes[j] ).hasClass( 'NavHead' ) ) {
                   NavToggle.style.color = NavFrame.childNodes[j].style.color;
                   NavFrame.childNodes[j].appendChild( NavToggle );
               }
           }
           NavFrame.setAttribute( 'id', 'NavFrame' + indexNavigationBar );
       }
   }

}

$( createNavigationBarToggleButton );

/**

* Uploadwizard_newusers
* Switches in a message for non-autoconfirmed users at Wikipedia:Upload
*
* Maintainers: User:Krimpet
*/

function uploadwizard_newusers() {

   if ( mw.config.get( 'wgNamespaceNumber' ) === 4 && mw.config.get( 'wgTitle' ) === 'Upload' && mw.config.get( 'wgAction' ) === 'view' ) {
       var oldDiv = document.getElementById( 'autoconfirmedusers' ),
           newDiv = document.getElementById( 'newusers' );
       if ( oldDiv && newDiv ) {
           var userGroups = mw.config.get( 'wgUserGroups' );
           if ( userGroups ) {
               for ( var i = 0; i < userGroups.length; i++ ) {
                   if ( userGroups[i] === 'autoconfirmed' ) {
                       oldDiv.style.display = 'block';
                       newDiv.style.display = 'none';
                       return;
                   }
               }
           }
           oldDiv.style.display = 'none';
           newDiv.style.display = 'block';
           return;
       }
   }

}

$(uploadwizard_newusers);

/**

* Magic editintros ****************************************************
*
* Description: Adds editintros on disambiguation pages and BLP pages.
* Maintainers: User:RockMFR
*/

function addEditIntro( name ) {

   $( '.editsection, #ca-edit' ).find( 'a' ).each( function ( i, el ) {
       el.href = $( this ).attr( 'href' ) + '&editintro=' + name;
   } );

}

if ( mw.config.get( 'wgNamespaceNumber' ) === 0 ) {

   $( function () {
       if ( document.getElementById( 'disambigbox' ) ) {
           addEditIntro( 'Template:Disambig_editintro' );
       }
   } );

   $( function () {
       var cats = document.getElementById( 'mw-normal-catlinks' );
       if ( !cats ) {
           return;
       }
       cats = cats.getElementsByTagName( 'a' );
       for ( var i = 0; i < cats.length; i++ ) {
           if ( cats[i].title === 'Category:Living people' || cats[i].title === 'Category:Possibly living people' ) {
               addEditIntro( 'Template:BLP_editintro' );
               break;
           }
       }
   } );

}