The Demopædia Encyclopedia on Population is under heavy modernization and maintenance. Outputs could look bizarre, sorry for the temporary inconvenience

Multilingual Demographic Dictionary, second unified edition, English volume

Difference between revisions of "MediaWiki:Common.js"

Multilingual Demographic Dictionary, second unified edition, English vol.
Jump to: navigation, search
(From French demopaedia)
 
Line 1: Line 1:
/*'''Mediawiki:Common.js'''*/
+
/**
/* Zde uvedený JavaScript bude použit pro všechny uživatele při načtení každé stránky.  */
+
* Keep code in MediaWiki:Common.js to a minimum as it is unconditionally
/* N'importe quel JavaScript ici sera chargé pour n'importe quel utilisateur et pour chaque page accédée.
+
* loaded for all users on every wiki page. If possible create a gadget that is
 +
* enabled by default instead of adding it here (since gadgets are fully
 +
* optimized ResourceLoader modules with possibility to add dependencies etc.)
 +
*
 +
* Since Common.js isn't a gadget, there is no place to declare its
 +
* dependencies, so we have to lazy load them with mw.loader.using on demand and
 +
* then execute the rest in the callback. In most cases these dependencies will
 +
* be loaded (or loading) already and the callback will not be delayed. In case a
 +
* dependency hasn't arrived yet it'll make sure those are loaded before this.
 +
*/
 +
 
 +
/* global mw, $ */
 +
/* jshint strict:false, browser:true */
 +
 
 +
mw.loader.using( ['mediawiki.user', 'mediawiki.util', 'mediawiki.notify', 'jquery.client'] ).done( function () {
 +
/* Begin of mw.loader.using callback */
  
ATTENTION : Avant d modifier cette page, veuillez tester vos changements avec votre propre
+
/**
monobook.js. Une erreur sur cette page peut faire bugger le site entier (et gêner l'ensemble des
+
* Main Page layout fixes
visiteurs), même plusieurs heures après la modification !
+
*
 +
* Description: Adds an additional link to the complete list of languages available.
 +
* Maintainers: [[User:AzaToth]], [[User:R. Koot]], [[User:Alex Smotrov]]
 +
*/
 +
if ( mw.config.get( 'wgPageName' ) === 'Main_Page' || mw.config.get( 'wgPageName' ) === 'Talk:Main_Page' ) {
 +
    $( function () {
 +
        mw.util.addPortletLink( 'p-lang', '//meta.wikimedia.org/wiki/List_of_Wikipedias',
 +
            'Complete list', 'interwiki-completelist', 'Complete list of Wikipedias' );
 +
    } );
 +
}
 +
 
 +
/**
 +
* Redirect User:Name/skin.js and skin.css to the current skin's pages
 +
* (unless the 'skin' page really exists)
 +
* @source: http://www.mediawiki.org/wiki/Snippets/Redirect_skin.js
 +
* @rev: 2
 +
*/
 +
if ( mw.config.get( 'wgArticleId' ) === 0 && mw.config.get( 'wgNamespaceNumber' ) === 2 ) {
 +
    var titleParts = mw.config.get( 'wgPageName' ).split( '/' );
 +
    /* Make sure there was a part before and after the slash
 +
      and that the latter is 'skin.js' or 'skin.css' */
 +
    if ( titleParts.length == 2 ) {
 +
        var userSkinPage = titleParts.shift() + '/' + mw.config.get( 'skin' );
 +
        if ( titleParts.slice( -1 ) == 'skin.js' ) {
 +
            window.location.href = mw.util.getUrl( userSkinPage + '.js' );
 +
        } else if ( titleParts.slice( -1 ) == 'skin.css' ) {
 +
            window.location.href = mw.util.getUrl( userSkinPage + '.css' );
 +
        }
 +
    }
 +
}
  
NE PAS RETIRER CECI SINON : remplacement des signature, substitution des modèles, ... : <nowiki>
+
/**
 +
* Map addPortletLink to mw.util
 +
* @deprecated: Use mw.util.addPortletLink instead.
 +
*/
 +
mw.log.deprecate( window, 'addPortletLink', mw.util.addPortletLink, 'Use mw.util.addPortletLink instead' );
  
/*************************************************************/
+
/**
/* Fonctions javascript : pallient les limites de javascript */
+
* Extract a URL parameter from the current URL
/* Surveiller : http://www.ecmascript.org/                  */
+
* @deprecated: Use mw.util.getParamValue with proper escaping
/*************************************************************/
+
*/
 +
mw.log.deprecate( window, 'getURLParamValue', mw.util.getParamValue, 'Use mw.util.getParamValue instead' );
  
/* Test if an element has a certain class **************************************
+
/**
  *
+
* Test if an element has a certain class
  * Description: Uses regular expressions and caching for better performance.
+
  * @deprecated: Use $(element).hasClass() instead.
* Maintainers: [[User:Mike Dillon]], [[User:R. Koot]], [[User:SG]]
 
 
  */
 
  */
 +
mw.log.deprecate( window, 'hasClass', function ( element, className ) {
 +
    return $( element ).hasClass( className );
 +
}, 'Use jQuery.hasClass() instead' );
  
var hasClass = (function () {
+
/**
    var reCache = {};
+
* @source www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL
     return function (element, className) {
+
* @rev 6
        return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);
+
*/
    };
+
var extraCSS = mw.util.getParamValue( 'withCSS' ),
})();
+
     extraJS = mw.util.getParamValue( 'withJS' );
  
 +
if ( extraCSS ) {
 +
    if ( extraCSS.match( /^MediaWiki:[^&<>=%#]*\.css$/ ) ) {
 +
        mw.loader.load( '/w/index.php?title=' + extraCSS + '&action=raw&ctype=text/css', 'text/css' );
 +
    } else {
 +
        mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withCSS value' } );
 +
    }
 +
}
  
 +
if ( extraJS ) {
 +
    if ( extraJS.match( /^MediaWiki:[^&<>=%#]*\.js$/ ) ) {
 +
        mw.loader.load( '/w/index.php?title=' + extraJS + '&action=raw&ctype=text/javascript' );
 +
    } else {
 +
        mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withJS value' } );
 +
    }
 +
}
  
 +
/**
 +
* WikiMiniAtlas
 +
*
 +
* Description: WikiMiniAtlas is a popup click and drag world map.
 +
*              This script causes all of our coordinate links to display the WikiMiniAtlas popup button.
 +
*              The script itself is located on meta because it is used by many projects.
 +
*              See [[Meta:WikiMiniAtlas]] for more information.
 +
* Maintainers: [[User:Dschwen]]
 +
*/
 +
( function () {
 +
    var require_wikiminiatlas = false;
 +
    var coord_filter = /geohack/;
 +
    $( function () {
 +
        $( 'a.external.text' ).each( function( key, link ) {
 +
            if ( link.href && coord_filter.exec( link.href ) ) {
 +
                require_wikiminiatlas = true;
 +
                // break from loop
 +
                return false;
 +
            }
 +
        } );
 +
        if ( $( 'div.kmldata' ).length ) {
 +
            require_wikiminiatlas = true;
 +
        }
 +
        if ( require_wikiminiatlas ) {
 +
            mw.loader.load( '//meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&action=raw&ctype=text/javascript' );
 +
        }
 +
    } );
 +
} )();
  
/** Collapsible tables *********************************************************
+
/**
  * From http://en.wikipedia.org/w/index.php?title=MediaWiki:Common.js&oldid=219789618
+
* Collapsible tables
  * Description: Allows tables to be collapsed, showing only the header. See
+
  *
*              [[Wikipedia:NavFrame]].
+
  * Allows tables to be collapsed, showing only the header. See [[Help:Collapsing]].
  *  Maintainers: [[User:R. Koot]]
+
  *
 +
  * @version 2.0.3 (2014-03-14)
 +
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-collapsibleTables.js
 +
* @author [[User:R. Koot]]
 +
* @author [[User:Krinkle]]
 +
* @deprecated Since MediaWiki 1.20: Use class="mw-collapsible" instead which
 +
* is supported in MediaWiki core.
 
  */
 
  */
+
 
 
var autoCollapse = 2;
 
var autoCollapse = 2;
// Translations come from rev-delundel of Mediawiki 15
+
var collapseCaption = 'hide';
// ar */  var collapseCaption = "▲ إخفاء"; // ar
+
var expandCaption = 'show';
// ar */  var expandCaption = "▼ عرض"; // ar
+
var tableIndex = 0;
// cs */  var collapseCaption = "▲ Skrýt překlady"; // cs
+
 
// cs */  var expandCaption = "▼ Zobrazit překlady"; // cs
+
function collapseTable( tableIndex ) {
// de */  var collapseCaption = "▲ verstecke"; // de
+
     var Button = document.getElementById( 'collapseButton' + tableIndex );
// de */  var expandCaption = "▼ zeige"; // de
+
     var Table = document.getElementById( 'collapsibleTable' + tableIndex );
en */  var collapseCaption = "▲ hide"; // en
+
 
en */  var expandCaption = "▼ show"; // en
 
// es */  var collapseCaption = "▲ occultar"; // es
 
// es */  var expandCaption = "▼ mostrar"; // es
 
// et */  var collapseCaption = "▲ peida"; // et
 
// et */  var expandCaption = "▼ näita"; // et
 
// fi */  var collapseCaption = "▲ piilota"; // fi
 
// fi */  var expandCaption = "▼ näytä"; // fi
 
// fr */  var collapseCaption = "▲ masquer"; // fr
 
// fr */  var expandCaption = "▼ afficher"; // fr
 
// id */  var collapseCaption = "▲ nascondi"; // it
 
// id */  var expandCaption = "▼ mostra"; // it
 
// it */  var collapseCaption = "▲ nascondi"; // it
 
// it */  var expandCaption = "▼ mostra"; // it
 
// ja */  var collapseCaption = "▲ 秘匿"; // ja
 
// ja */  var expandCaption = "▼ 表示"; // ja
 
// ko */  var collapseCaption = "▲ verbergen"; // nl
 
// ko */  var expandCaption = "▼ weergeven"; // nl
 
// ms */  var collapseCaption = "▲ göm"; // sv
 
// ms */  var expandCaption = "▼ visa"; // sv
 
// ne */  var collapseCaption = "▲ göm"; // sv
 
// ne */  var expandCaption = "▼ visa"; // sv
 
// nl */  var collapseCaption = "▲ verbergen"; // nl
 
// nl */  var expandCaption = "▼ weergeven"; // nl
 
// pl */  var collapseCaption = "▲ ukryj"; // pl
 
// pl */  var expandCaption = "▼ pokaż"; // pl
 
// pt */  var collapseCaption = "▲ esconder"; // pt
 
// pt */  var expandCaption = "▼ mostrar"; // pt
 
// ru */  var collapseCaption = "▲ скрыть"; // ru
 
// ru */  var expandCaption = "▼ показать"; // ru
 
// sh */  var collapseCaption = "▲ skrij"; // sh
 
// sh */  var expandCaption = "▼ pokaži"; // sh
 
// sv */  var collapseCaption = "▲ göm"; // sv
 
// sv */  var expandCaption = "▼ visa"; // sv
 
// th */  var collapseCaption = "▲ göm"; // sv
 
// th */  var expandCaption = "▼ visa"; // sv
 
// vi */  var collapseCaption = "▲ göm"; // sv
 
// vi */  var expandCaption = "▼ visa"; // sv
 
// zh */  var collapseCaption = "▲ 隱藏"; // zh
 
// zh */  var expandCaption = "▼ 顯示"; // zh
 
// end
 
function collapseTable( tableIndex )
 
{
 
     var Button = document.getElementById( "collapseButton" + tableIndex );
 
     var Table = document.getElementById( "collapsibleTable" + tableIndex );
 
 
 
     if ( !Table || !Button ) {
 
     if ( !Table || !Button ) {
 
         return false;
 
         return false;
 
     }
 
     }
+
 
 
     var Rows = Table.rows;
 
     var Rows = Table.rows;
+
    var i;
     if ( Button.firstChild.data == collapseCaption ) {
+
    var $row0 = $(Rows[0]);
         for ( var i = 1; i < Rows.length; i++ ) {
+
 
             Rows[i].style.display = "none";
+
     if ( Button.firstChild.data === collapseCaption ) {
 +
         for ( i = 1; i < Rows.length; i++ ) {
 +
             Rows[i].style.display = 'none';
 
         }
 
         }
 
         Button.firstChild.data = expandCaption;
 
         Button.firstChild.data = expandCaption;
 
     } else {
 
     } else {
         for ( var i = 1; i < Rows.length; i++ ) {
+
         for ( i = 1; i < Rows.length; i++ ) {
             Rows[i].style.display = Rows[0].style.display;
+
             Rows[i].style.display = $row0.css( 'display' );
 
         }
 
         }
 
         Button.firstChild.data = collapseCaption;
 
         Button.firstChild.data = collapseCaption;
 
     }
 
     }
 
}
 
}
+
 
function createCollapseButtons()
+
function createClickHandler( tableIndex ) {
{
+
    return function ( e ) {
    var tableIndex = 0;
+
        e.preventDefault();
     var NavigationBoxes = new Object();
+
        collapseTable( tableIndex );
     var Tables = document.getElementsByTagName( "table" );
+
    };
+
}
     for ( var i = 0; i < Tables.length; i++ ) {
+
 
         if ( hasClass( Tables[i], "collapsible" ) ) {
+
function createCollapseButtons( $content ) {
+
     var NavigationBoxes = {};
 +
     var $Tables = $content.find( 'table' );
 +
     var i;
 +
 
 +
    $Tables.each( function( i, table ) {
 +
         if ( $(table).hasClass( 'collapsible' ) ) {
 +
 
 
             /* only add button and increment count if there is a header row to work with */
 
             /* only add button and increment count if there is a header row to work with */
             var HeaderRow = Tables[i].getElementsByTagName( "tr" )[0];
+
             var HeaderRow = table.getElementsByTagName( 'tr' )[0];
             if (!HeaderRow) continue;
+
             if ( !HeaderRow ) {
             var Header = HeaderRow.getElementsByTagName( "th" )[0];
+
                return;
             if (!Header) continue;
+
            }
+
             var Header = table.getElementsByTagName( 'th' )[0];
             NavigationBoxes[ tableIndex ] = Tables[i];
+
             if ( !Header ) {
             Tables[i].setAttribute( "id", "collapsibleTable" + tableIndex );
+
                return;
+
            }
             var Button    = document.createElement( "span" );
+
 
             var ButtonLink = document.createElement( "a" );
+
             NavigationBoxes[ tableIndex ] = table;
 +
             table.setAttribute( 'id', 'collapsibleTable' + tableIndex );
 +
 
 +
             var Button    = document.createElement( 'span' );
 +
             var ButtonLink = document.createElement( 'a' );
 
             var ButtonText = document.createTextNode( collapseCaption );
 
             var ButtonText = document.createTextNode( collapseCaption );
+
             // Styles are declared in [[MediaWiki:Common.css]]
            Button.style.styleFloat = "right";
+
             Button.className = 'collapseButton';
             Button.style.cssFloat = "right";
+
 
             Button.style.fontWeight = "normal";
 
            Button.style.textAlign = "right";
 
            Button.style.width = "6em";
 
 
 
             ButtonLink.style.color = Header.style.color;
 
             ButtonLink.style.color = Header.style.color;
             ButtonLink.setAttribute( "id", "collapseButton" + tableIndex );
+
             ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );
             ButtonLink.setAttribute( "href", "javascript:collapseTable(" + tableIndex + ");" );
+
             ButtonLink.setAttribute( 'href', '#' );
 +
            $( ButtonLink ).on( 'click', createClickHandler( tableIndex ) );
 
             ButtonLink.appendChild( ButtonText );
 
             ButtonLink.appendChild( ButtonText );
+
 
             Button.appendChild( document.createTextNode( "[" ) );
+
             Button.appendChild( document.createTextNode( '[' ) );
 
             Button.appendChild( ButtonLink );
 
             Button.appendChild( ButtonLink );
             Button.appendChild( document.createTextNode( "]" ) );
+
             Button.appendChild( document.createTextNode( ']' ) );
+
 
             Header.insertBefore( Button, Header.childNodes[0] );
+
             Header.insertBefore( Button, Header.firstChild );
 
             tableIndex++;
 
             tableIndex++;
 
         }
 
         }
     }
+
     } );
+
 
     for ( var i = 0;  i < tableIndex; i++ ) {
+
     for ( i = 0;  i < tableIndex; i++ ) {
         if ( hasClass( NavigationBoxes[i], "collapsed" ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], "autocollapse" ) ) ) {
+
         if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) ||
 +
            ( tableIndex >= autoCollapse && $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) )
 +
        ) {
 
             collapseTable( i );
 
             collapseTable( i );
 +
        }
 +
        else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) {
 +
            var element = NavigationBoxes[i];
 +
            while ((element = element.parentNode)) {
 +
                if ( $( element ).hasClass( 'outercollapse' ) ) {
 +
                    collapseTable ( i );
 +
                    break;
 +
                }
 +
            }
 
         }
 
         }
 
     }
 
     }
 
}
 
}
 
addOnloadHook( createCollapseButtons );
 
  
 +
mw.hook( 'wikipage.content' ).add( createCollapseButtons );
 +
 +
/**
 +
* Add support to mw-collapsible for autocollapse, innercollapse and outercollapse
 +
*
 +
* Maintainers: TheDJ
 +
*/
 +
function mwCollapsibleSetup( $collapsibleContent ) {
 +
var $element,
 +
    $toggle,
 +
autoCollapseThreshold = 2;
 +
$.each( $collapsibleContent, function (index, element) {
 +
$element = $( element );
 +
if ( $collapsibleContent.length > autoCollapseThreshold && $element.hasClass( 'autocollapse' ) ) {
 +
$element.data( 'mw-collapsible' ).collapse();
 +
} else if ( $element.hasClass( 'innercollapse' ) ) {
 +
if ( $element.parents( '.outercollapse' ).length > 0 ) {
 +
$element.data( 'mw-collapsible' ).collapse();
 +
}
 +
}
 +
$toggle = $element.find( '.mw-collapsible-toggle' );
 +
if ( $toggle.length ) {
 +
// Make the toggle inherit text color
 +
if( $toggle.parent()[0].style.color ) {
 +
$toggle.find( 'a' ).css( 'color', 'inherit' );
 +
}
 +
}
 +
} );
 +
}
 +
 +
mw.hook( 'wikipage.collapsibleContent' ).add( mwCollapsibleSetup );
  
/** Dynamic Navigation Bars (experimental) *************************************
+
/**
 +
* Dynamic Navigation Bars (experimental)
 
  *
 
  *
  * Description: See [[Wikipedia:NavFrame]].
+
  * Description: See [[Wikipedia:NavFrame]].
  * Maintainers: UNMAINTAINED
+
  * Maintainers: UNMAINTAINED
 
  */
 
  */
  
// set up the words in your language
+
/* set up the words in your language */
 
var NavigationBarHide = '[' + collapseCaption + ']';
 
var NavigationBarHide = '[' + collapseCaption + ']';
 
var NavigationBarShow = '[' + expandCaption + ']';
 
var NavigationBarShow = '[' + expandCaption + ']';
 +
var indexNavigationBar = 0;
  
// shows and hides content and picture (if available) of navigation bars
+
/**
// Parameters:
+
* Shows and hides content and picture (if available) of navigation bars
//     indexNavigationBar: the index of navigation bar to be toggled
+
* Parameters:
function toggleNavigationBar(indexNavigationBar)
+
*     indexNavigationBar: the index of navigation bar to be toggled
{
+
**/
     var NavToggle = document.getElementById("NavToggle" + indexNavigationBar);
+
window.toggleNavigationBar = function ( indexNavigationBar, event ) {
     var NavFrame = document.getElementById("NavFrame" + indexNavigationBar);
+
     var NavToggle = document.getElementById( 'NavToggle' + indexNavigationBar );
 +
     var NavFrame = document.getElementById( 'NavFrame' + indexNavigationBar );
 +
    var NavChild;
  
     if (!NavFrame || !NavToggle) {
+
     if ( !NavFrame || !NavToggle ) {
 
         return false;
 
         return false;
 
     }
 
     }
  
     // if shown now
+
     /* if shown now */
     if (NavToggle.firstChild.data == NavigationBarHide) {
+
     if ( NavToggle.firstChild.data === NavigationBarHide ) {
         for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
+
         for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
             if ( hasClass( NavChild, 'NavPic' ) ) {
+
             if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {
                NavChild.style.display = 'none';
 
            }
 
            if ( hasClass( NavChild, 'NavContent') ) {
 
 
                 NavChild.style.display = 'none';
 
                 NavChild.style.display = 'none';
 
             }
 
             }
Line 196: Line 300:
 
     NavToggle.firstChild.data = NavigationBarShow;
 
     NavToggle.firstChild.data = NavigationBarShow;
  
     // if hidden now
+
     /* if hidden now */
     } else if (NavToggle.firstChild.data == NavigationBarShow) {
+
     } else if ( NavToggle.firstChild.data === NavigationBarShow ) {
         for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
+
         for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
             if (hasClass(NavChild, 'NavPic')) {
+
             if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {
                NavChild.style.display = 'block';
 
            }
 
            if (hasClass(NavChild, 'NavContent')) {
 
 
                 NavChild.style.display = 'block';
 
                 NavChild.style.display = 'block';
 
             }
 
             }
Line 208: Line 309:
 
         NavToggle.firstChild.data = NavigationBarHide;
 
         NavToggle.firstChild.data = NavigationBarHide;
 
     }
 
     }
}
 
  
// adds show/hide-button to navigation bars
+
    event.preventDefault();
function createNavigationBarToggleButton()
+
};
{
+
 
     var indexNavigationBar = 0;
+
/* adds show/hide-button to navigation bars */
     // iterate over all < div >-elements  
+
function createNavigationBarToggleButton( $content ) {
     var divs = document.getElementsByTagName("div");
+
     var NavChild;
     for (var i = 0; NavFrame = divs[i]; i++) {
+
     /* iterate over all < div >-elements */
         // if found a navigation bar
+
     var $divs = $content.find( 'div' );
         if (hasClass(NavFrame, "NavFrame")) {
+
     $divs.each( function ( i, NavFrame ) {
 +
         /* if found a navigation bar */
 +
         if ( $( NavFrame ).hasClass( 'NavFrame' ) ) {
  
 
             indexNavigationBar++;
 
             indexNavigationBar++;
             var NavToggle = document.createElement("a");
+
             var NavToggle = document.createElement( 'a' );
 
             NavToggle.className = 'NavToggle';
 
             NavToggle.className = 'NavToggle';
             NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
+
             NavToggle.setAttribute( 'id', 'NavToggle' + indexNavigationBar );
             NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');
+
             NavToggle.setAttribute( 'href', '#' );
 +
            $( NavToggle ).on( 'click', $.proxy( window.toggleNavigationBar, window, indexNavigationBar ) );
  
             var NavToggleText = document.createTextNode(NavigationBarHide);
+
             var isCollapsed = $( NavFrame ).hasClass( 'collapsed' );
             for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
+
            /**
                 if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) {
+
            * Check if any children are already hidden.  This loop is here for backwards compatibility:
                     if (NavChild.style.display == 'none') {
+
            * the old way of making NavFrames start out collapsed was to manually add style="display:none"
                         NavToggleText = document.createTextNode(NavigationBarShow);
+
            * to all the NavPic/NavContent elements.  Since this was bad for accessibility (no way to make
                        break;
+
            * 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 );
  
            NavToggle.appendChild(NavToggleText);
+
             /* Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) */
             // 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++ ) {
             for(var j=0; j < NavFrame.childNodes.length; j++) {
+
                 if ( $( NavFrame.childNodes[j] ).hasClass( 'NavHead' ) ) {
                 if (hasClass(NavFrame.childNodes[j], "NavHead")) {
+
                    NavToggle.style.color = NavFrame.childNodes[j].style.color;
                     NavFrame.childNodes[j].appendChild(NavToggle);
+
                     NavFrame.childNodes[j].appendChild( NavToggle );
 
                 }
 
                 }
 
             }
 
             }
             NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
+
             NavFrame.setAttribute( 'id', 'NavFrame' + indexNavigationBar );
 +
        }
 +
    } );
 +
}
 +
 
 +
mw.hook( 'wikipage.content' ).add( 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;
 
         }
 
         }
 
     }
 
     }
 
}
 
}
  
addOnloadHook( createNavigationBarToggleButton );
+
$(uploadwizard_newusers);
 +
 
 +
/**
 +
* Magic editintros ****************************************************
 +
*
 +
* Description: Adds editintros on disambiguation pages and BLP pages.
 +
* Maintainers: [[User:RockMFR]]
 +
*/
 +
function addEditIntro( name ) {
 +
    $( '.mw-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 = mw.config.get('wgCategories');
 +
        if ( !cats ) {
 +
            return;
 +
        }
 +
        if ( $.inArray( 'Living people', cats ) !== -1 || $.inArray( 'Possibly living people', cats ) !== -1 ) {
 +
            addEditIntro( 'Template:BLP_editintro' );
 +
        }
 +
    } );
 +
}
 +
 
 +
/* End of mw.loader.using callback */
 +
} );
 +
/* DO NOT ADD CODE BELOW THIS LINE */

Latest revision as of 13:45, 15 June 2017

/**
 * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally
 * loaded for all users on every wiki page. If possible create a gadget that is
 * enabled by default instead of adding it here (since gadgets are fully
 * optimized ResourceLoader modules with possibility to add dependencies etc.)
 *
 * Since Common.js isn't a gadget, there is no place to declare its
 * dependencies, so we have to lazy load them with mw.loader.using on demand and
 * then execute the rest in the callback. In most cases these dependencies will
 * be loaded (or loading) already and the callback will not be delayed. In case a
 * dependency hasn't arrived yet it'll make sure those are loaded before this.
 */

/* global mw, $ */
/* jshint strict:false, browser:true */

mw.loader.using( ['mediawiki.user', 'mediawiki.util', 'mediawiki.notify', 'jquery.client'] ).done( function () {
/* Begin of mw.loader.using callback */

/**
 * Main Page layout fixes
 *
 * Description: Adds an additional link to the complete list of languages available.
 * Maintainers: [[User:AzaToth]], [[User:R. Koot]], [[User:Alex Smotrov]]
 */
if ( mw.config.get( 'wgPageName' ) === 'Main_Page' || mw.config.get( 'wgPageName' ) === 'Talk:Main_Page' ) {
    $( function () {
        mw.util.addPortletLink( 'p-lang', '//meta.wikimedia.org/wiki/List_of_Wikipedias',
            'Complete list', 'interwiki-completelist', 'Complete list of Wikipedias' );
    } );
}

/**
 * Redirect User:Name/skin.js and skin.css to the current skin's pages
 * (unless the 'skin' page really exists)
 * @source: http://www.mediawiki.org/wiki/Snippets/Redirect_skin.js
 * @rev: 2
 */
if ( mw.config.get( 'wgArticleId' ) === 0 && mw.config.get( 'wgNamespaceNumber' ) === 2 ) {
    var titleParts = mw.config.get( 'wgPageName' ).split( '/' );
    /* Make sure there was a part before and after the slash
       and that the latter is 'skin.js' or 'skin.css' */
    if ( titleParts.length == 2 ) {
        var userSkinPage = titleParts.shift() + '/' + mw.config.get( 'skin' );
        if ( titleParts.slice( -1 ) == 'skin.js' ) {
            window.location.href = mw.util.getUrl( userSkinPage + '.js' );
        } else if ( titleParts.slice( -1 ) == 'skin.css' ) {
            window.location.href = mw.util.getUrl( userSkinPage + '.css' );
        }
    }
}

/**
 * Map addPortletLink to mw.util
 * @deprecated: Use mw.util.addPortletLink instead.
 */
mw.log.deprecate( window, 'addPortletLink', mw.util.addPortletLink, 'Use mw.util.addPortletLink instead' );

/**
 * Extract a URL parameter from the current URL
 * @deprecated: Use mw.util.getParamValue with proper escaping
 */
mw.log.deprecate( window, 'getURLParamValue', mw.util.getParamValue, 'Use mw.util.getParamValue instead' );

/**
 * Test if an element has a certain class
 * @deprecated:  Use $(element).hasClass() instead.
 */
mw.log.deprecate( window, 'hasClass', function ( element, className ) {
    return $( element ).hasClass( className );
}, 'Use jQuery.hasClass() instead' );

/**
 * @source www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL
 * @rev 6
 */
var extraCSS = mw.util.getParamValue( 'withCSS' ),
    extraJS = mw.util.getParamValue( 'withJS' );

if ( extraCSS ) {
    if ( extraCSS.match( /^MediaWiki:[^&<>=%#]*\.css$/ ) ) {
        mw.loader.load( '/w/index.php?title=' + extraCSS + '&action=raw&ctype=text/css', 'text/css' );
    } else {
        mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withCSS value' } );
    }
}

if ( extraJS ) {
    if ( extraJS.match( /^MediaWiki:[^&<>=%#]*\.js$/ ) ) {
        mw.loader.load( '/w/index.php?title=' + extraJS + '&action=raw&ctype=text/javascript' );
    } else {
        mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withJS value' } );
    }
}

/**
 * WikiMiniAtlas
 *
 * Description: WikiMiniAtlas is a popup click and drag world map.
 *              This script causes all of our coordinate links to display the WikiMiniAtlas popup button.
 *              The script itself is located on meta because it is used by many projects.
 *              See [[Meta:WikiMiniAtlas]] for more information.
 * Maintainers: [[User:Dschwen]]
 */
( function () {
    var require_wikiminiatlas = false;
    var coord_filter = /geohack/;
    $( function () {
        $( 'a.external.text' ).each( function( key, link ) {
            if ( link.href && coord_filter.exec( link.href ) ) {
                require_wikiminiatlas = true;
                // break from loop
                return false;
            }
        } );
        if ( $( 'div.kmldata' ).length ) {
            require_wikiminiatlas = true;
        }
        if ( require_wikiminiatlas ) {
            mw.loader.load( '//meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&action=raw&ctype=text/javascript' );
        }
    } );
} )();

/**
 * Collapsible tables
 *
 * Allows tables to be collapsed, showing only the header. See [[Help:Collapsing]].
 *
 * @version 2.0.3 (2014-03-14)
 * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-collapsibleTables.js
 * @author [[User:R. Koot]]
 * @author [[User:Krinkle]]
 * @deprecated Since MediaWiki 1.20: Use class="mw-collapsible" instead which
 * is supported in MediaWiki core.
 */

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

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

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

    var Rows = Table.rows;
    var i;
    var $row0 = $(Rows[0]);

    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 = $row0.css( 'display' );
        }
        Button.firstChild.data = collapseCaption;
    }
}

function createClickHandler( tableIndex ) {
    return function ( e ) {
        e.preventDefault();
        collapseTable( tableIndex );
    };
}

function createCollapseButtons( $content ) {
    var NavigationBoxes = {};
    var $Tables = $content.find( 'table' );
    var i;

    $Tables.each( function( i, table ) {
        if ( $(table).hasClass( 'collapsible' ) ) {

            /* only add button and increment count if there is a header row to work with */
            var HeaderRow = table.getElementsByTagName( 'tr' )[0];
            if ( !HeaderRow ) {
                return;
            }
            var Header = table.getElementsByTagName( 'th' )[0];
            if ( !Header ) {
                return;
            }

            NavigationBoxes[ tableIndex ] = table;
            table.setAttribute( 'id', 'collapsibleTable' + tableIndex );

            var Button     = document.createElement( 'span' );
            var ButtonLink = document.createElement( 'a' );
            var ButtonText = document.createTextNode( collapseCaption );
            // Styles are declared in [[MediaWiki:Common.css]]
            Button.className = 'collapseButton';

            ButtonLink.style.color = Header.style.color;
            ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );
            ButtonLink.setAttribute( 'href', '#' );
            $( ButtonLink ).on( 'click', createClickHandler( 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' ) )
        ) {
            collapseTable( i );
        }
        else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) {
            var element = NavigationBoxes[i];
            while ((element = element.parentNode)) {
                if ( $( element ).hasClass( 'outercollapse' ) ) {
                    collapseTable ( i );
                    break;
                }
            }
        }
    }
}

mw.hook( 'wikipage.content' ).add( createCollapseButtons );

/**
 * Add support to mw-collapsible for autocollapse, innercollapse and outercollapse
 *
 * Maintainers: TheDJ
 */
function mwCollapsibleSetup( $collapsibleContent ) {
	var $element,
	    $toggle,
		autoCollapseThreshold = 2;
	$.each( $collapsibleContent, function (index, element) {
		$element = $( element );
		if ( $collapsibleContent.length > autoCollapseThreshold && $element.hasClass( 'autocollapse' ) ) {
			$element.data( 'mw-collapsible' ).collapse();
		} else if ( $element.hasClass( 'innercollapse' ) ) {
			if ( $element.parents( '.outercollapse' ).length > 0 ) {
				$element.data( 'mw-collapsible' ).collapse();
			}
		}
		$toggle = $element.find( '.mw-collapsible-toggle' );
		if ( $toggle.length ) {
			// Make the toggle inherit text color
			if( $toggle.parent()[0].style.color ) {
				$toggle.find( 'a' ).css( 'color', 'inherit' );
			}
		}
	} );
}

mw.hook( 'wikipage.collapsibleContent' ).add( mwCollapsibleSetup );

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

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

/**
 * 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( $content ) {
    var NavChild;
    /* iterate over all < div >-elements */
    var $divs = $content.find( 'div' );
    $divs.each( function ( i, NavFrame ) {
        /* 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 );
        }
    } );
}

mw.hook( 'wikipage.content' ).add( 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 ) {
    $( '.mw-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 = mw.config.get('wgCategories');
        if ( !cats ) {
            return;
        }
        if ( $.inArray( 'Living people', cats ) !== -1 || $.inArray( 'Possibly living people', cats ) !== -1 ) {
            addEditIntro( 'Template:BLP_editintro' );
        }
    } );
}

/* End of mw.loader.using callback */
} );
/* DO NOT ADD CODE BELOW THIS LINE */