MediaWiki:Common.js

/* --- Any JavaScript here will be loaded for all users on every page load. --- */ /*                                                                                                     */ //**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**// /* IMPORT SECTION *//* // importScript( 'MediaWiki:Gadget-Edittools.js' );// Test

/* Add a very useful table and information on Special:UserRights. */ if ( mw.config.get( 'wgUserName' ) === 'Technical 13' && mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Userrights' ) { var useVersion = confirm( 'Use the \"LIVE\" version.' ); if ( useVersion ){ importScript( 'MediaWiki:Gadget-UserRights.js' ); } else { importScript( 'User:Technical_13/SandBox/Gadget-UserRights.js' ); } } else { importScript( 'MediaWiki:Gadget-UserRights.js' ); }

//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**// /* Home page "What's new" section sizer works with Common.css to achieve desired result *//* if (   mw.config.get( 'wgPageName' ) === 'Home' ||// Home itself    mw.config.get( 'wgPageName' ) === "Home/What's_new" ||// Home/What's_new    mw.config.get( 'wgPageName' ) === 'Talk:Home/ShoeMaker'//TESTCASES PAGE -- Talk:Home/ShoeMaker  ) { $( 'div#whatsNew, div.whatsNew' ).attr(   'style',    'width: ' + ( $( '#mw-content-text' ).width - 14 ) + 'px !important;'  ); $( '.whatsNewSection' ).attr(   'style',    'width: ' + Math.floor( ( $( '#mw-content-text' ).width - 73 ) / 3 ) + 'px !important;'  ); }
 * BY: User:Technical 13
 * 29 July 2015
 * Modified: 30 July 2015

//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**// /* Namespace Stripping *//* $( 'a[href^="/page/Item:"]' ).each( function {   $( this ).addClass( 'item' );    $( this ).html( $( this ).html.replace( 'Item:', '' ) ); } ); $( '#firstHeading' ).each( function {   $( this ).html( $( this ).html.replace( 'Item:', '' ) ); } ); $( 'title' ).each( function {   $( this ).html( $( this ).html.replace( 'Item:', '' ) ); } )
 * BY: User:Ague
 * 20 April 2012
 * Modified 15 August 2016 by User:Technical 13

//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**// /* IRC Login name changer *//* wgUserName if registered or Leroy_Jenky# otherwise. var uName = mw.config.get( 'wgUserName' ); if ( $( 'span#StartChatting a' ).text == 'Start chatting!' && uName !== 'null' ) { var uNamee = uName.replace( ' ', '_' ); var href = $( 'span#StartChatting a' ).attr( 'href' ).replace( 'Leroy_Jenky.', uNamee ); $( 'span#StartChatting a' ).attr( 'href', href ); }
 * BY: User:Technical 13
 * 27 March 2013
 * Modified 15 August 2016 by User:Technical 13

//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**// /* Collapsible tables *//* * Description: Allows tables to be collapsed, showing only the header. See en:Wikipedia:NavFrame * Maintainers: en: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 enWikipedia: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 -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 + the 1/0 link (Must be this complicated because Moz's 1stChild 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 );

//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**// /* DDO Wiki UI Improvement - User Talk Archival Script - FINAL * BY: User:Ague * 31 January 2014 */ $( 'p' ).click( function {   var id = $( this ).attr( 'id' ) + '_div';    if ( $( '#' + id ).hasClass( 'show' ) ) {        $( '#' + id ).slideUp( 1000 ).removeClass( 'show' );               } else {        $( 'div.ArchiveContentBox > div' ).slideUp( 700 );        $( '#' + id ).slideDown( 1000 ).addClass( 'show' );    } } );

//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**// /* Support for Special:MyPage/skin.js / Special:MyPage/skin.css to take you to your selected skin's custom.js / custom.css page *//* * BY: User:Technical 13 * 04 March 2014 */ var currentPage = mw.config.get( 'wgPageName' ); var userPage = 'User:' + mw.config.get( 'wgUserName' ).replace( ' ', '_' ); var specialMyPage = 'Special:MyPage'; var pageSkin = '/skin' + ( mw.config.get( 'wgPageContentModel' ) == 'javascript' ? '.js' : ( mw.config.get( 'wgPageContentModel' ) == 'css' ? '.css' : '' ) ); var skinPage = '/' + mw.user.options.get( 'skin' ) + ( mw.config.get( 'wgPageContentModel' ) == 'javascript' ? '.js' : ( mw.config.get( 'wgPageContentModel' ) == 'css' ? '.css' : '' ) ); if ( currentPage === userPage + pageSkin || currentPage === specialMyPage + pageSkin ) { setTimeout( function{ location = mw.util.getUrl( userPage + skinPage ) },1 ); }

//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//**// /* Support for loading JavaScript and Cascading Style Sheets by URL revision 6 * Imported by: User:Technical 13 * 06 April 2014 */ mw.loader.using( ['mediawiki.util', 'mediawiki.legacy.wikibits' ], function {	var extraCSS = mw.util.getParamValue( 'withCSS' ),		extraJS = mw.util.getParamValue( 'withJS' );	if ( extraCSS ) {		if ( extraCSS.match( /^(MW|MediaWiki):[^&<>=%#]*\.css$/ ) ) {			importStylesheet( extraCSS );		} else {			alert( 'Only stylesheets from the MediaWiki namespace are allowed.' );			console.error( 'Invalid withCSS value' );		}	}	if ( extraJS ) {		if ( extraJS.match( /^(MW|MediaWiki):[^&<>=%#]*\.js$/ ) ) {			importScript( extraJS );		} else {			alert( 'Only JavaScripts from the MediaWiki namespace are allowed.' );			console.error( 'Invalid withJS value' );		}	} } );