MediaWiki:Common.js

Материал из Игра-Говно точка com

(Различия между версиями)
Перейти к: навигация, поиск
м
м
Строка 1: Строка 1:
-
// Documentation/Examples: [[RL/DM#jQuery.makeCollapsible]]
+
window.addPortletLink = mw.util.addPortletLink;
-
// See also [[MediaWiki:JQuery-makeCollapsible.css]]
+
-
/* http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/resources/jquery/jquery.makeCollapsible.js?revision=83309&view=markup */
+
/**
/**
-
  * jQuery makeCollapsible
+
  * 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.wikiGetlink( userSkinPage + '.js' );
 +
} else if ( titleParts.slice(-1) == 'skin.css' ) {
 +
window.location.href = mw.util.wikiGetlink( userSkinPage + '.css' );
 +
}
 +
}
 +
}
 +
 
 +
/** extract a URL parameter from the current URL **********
  *
  *
-
  * This will enable collapsible-functionality on all passed elements.
+
  * @deprecated: Use mw.util.getParamValue with proper escaping
-
  * Will prevent binding twice to the same element.
+
  */
-
  * Initial state is expanded by default, this can be overriden by adding class
+
function getURLParamValue(paramName, url){
-
  * "mw-collapsed" to the "mw-collapsible" element.
+
return mw.util.getParamValue(paramName, url);
-
* Elements made collapsible have class "mw-made-collapsible".
+
}
-
* Except for tables and lists, the inner content is wrapped in "mw-collapsible-content".
+
 
 +
/** &withCSS= and &withJS= URL parameters *******
 +
  * Allow to try custom scripts from MediaWiki space
 +
  * without editing personal .css or .js files
 +
*/
 +
var extraCSS = mw.util.getParamValue("withCSS");
 +
if ( extraCSS && extraCSS.match("^MediaWiki:[^&<>=%]*\.css$") ) {
 +
    importStylesheet(extraCSS);
 +
}
 +
var extraJS = mw.util.getParamValue("withJS");
 +
if ( extraJS && extraJS.match("^MediaWiki:[^&<>=%]*\.js$") ) {
 +
    importScript(extraJS);
 +
}
 +
 
 +
// makeCollapsible (remove when deployed)
 +
importStylesheet('MediaWiki:JQuery-makeCollapsible.css');
 +
importScript('MediaWiki:JQuery-makeCollapsible.js');
 +
 
 +
 
 +
/* Import more specific scripts if necessary */
 +
if (wgAction == 'edit' || wgAction == 'submit' || wgPageName == 'Special:Upload') { //scripts specific to editing pages
 +
    importScript('MediaWiki:Common.js/edit.js');
 +
}
 +
else if (mw.config.get('wgPageName') == 'Special:Watchlist') { //watchlist scripts
 +
    mw.loader.load(mw.config.get('wgServer') + mw.config.get('wgScript') + '?title=MediaWiki:Common.js/watchlist.js&action=raw&ctype=text/javascript&smaxage=21600&maxage=86400');
 +
}
 +
 
 +
if ( wgNamespaceNumber == 6 ) {
 +
    importScript('MediaWiki:Common.js/file.js');
 +
}
 +
 
 +
/** For sysops and accountcreators *****************************************
  *
  *
-
  * @author Krinkle <krinklemail@gmail.com>
+
  * Description: Allows for sysop-specific Javascript at [[MediaWiki:Sysop.js]],
 +
*              and accountcreator-specific CSS at [[MediaWiki:Accountcreator.css]].
 +
*/
 +
if ( $.inArray( 'sysop', wgUserGroups) > -1 ) {
 +
importStylesheet('MediaWiki:Sysop.css');
 +
if ( !window.disableSysopJS ) {
 +
  $(function(){
 +
  importScript('MediaWiki:Sysop.js');
 +
  });
 +
}
 +
} else if ( $.inArray( 'accountcreator', wgUserGroups ) > -1 ) {
 +
importStylesheet('MediaWiki:Accountcreator.css');
 +
}
 +
 
 +
 
 +
/** 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]]
 +
  */
 +
 
 +
var metaBase = 'http://meta.wikimedia.org';
 +
if ( mw.config.get( 'wgServer' ) == 'https://secure.wikimedia.org' ) {
 +
var metaBase = 'https://secure.wikimedia.org/wikipedia/meta';
 +
}
 +
mw.loader.load(metaBase + '/w/index.php?title=MediaWiki:Wikiminiatlas.js&action=raw&ctype=text/javascript&smaxage=21600&maxage=86400');
 +
 
 +
/* Scripts specific to Internet Explorer */
 +
if (navigator.appName == 'Microsoft Internet Explorer'){
 +
    /** Internet Explorer bug fix **************************************************
 +
    *
 +
    *  Description: Fixes IE horizontal scrollbar bug
 +
    *  Maintainers: [[User:Tom-]]?
 +
    */
 +
   
 +
    var oldWidth;
 +
    var docEl = document.documentElement;
 +
   
 +
    var fixIEScroll = function() {
 +
        if (!oldWidth || docEl.clientWidth > oldWidth) {
 +
            doFixIEScroll();
 +
        } else {
 +
            setTimeout(doFixIEScroll, 1);
 +
        }
 +
       
 +
        oldWidth = docEl.clientWidth;
 +
    };
 +
   
 +
    var doFixIEScroll = function () {
 +
        docEl.style.overflowX = (docEl.scrollWidth - docEl.clientWidth < 4) ? "hidden" : "";
 +
    };
 +
   
 +
    document.attachEvent("onreadystatechange", fixIEScroll);
 +
    document.attachEvent("onresize", fixIEScroll);
 +
   
 +
    // In print IE (7?) does not like line-height
 +
    mw.util.addCSS( '@media print { sup, sub, p, .documentDescription { line-height: normal; }}');
 +
 
 +
    // IE overflow bug
 +
    mw.util.addCSS('div.overflowbugx { overflow-x: scroll !important; overflow-y: hidden !important; } div.overflowbugy { overflow-y: scroll !important; overflow-x: hidden !important; }');
 +
 
 +
    // IE zoomfix
 +
    // Use to fix right floating div/table inside tables
 +
    mw.util.addCSS('.iezoomfix div, .iezoomfix table { zoom: 1;}');
 +
   
 +
    // Import scripts specific to Internet Explorer 6
 +
    if (navigator.appVersion.substr(22, 1) == '6') {
 +
        importScript('MediaWiki:Common.js/IE60Fixes.js');
 +
    }
 +
}
 +
 
 +
/* Load fixes for Windows font rendering */
 +
if( navigator.platform.indexOf( "Win" ) != -1 ) {
 +
    importStylesheet( 'MediaWiki:Common.css/WinFixes.css' );
 +
}
 +
 
 +
/* Test if an element has a certain class
 +
* Maintainers: [[User:Mike Dillon]], [[User:R. Koot]], [[User:SG]]
  *
  *
-
* Dual license:
+
  * @deprecatedUse $(element).hasClass() instead.
-
  * @license CC-BY 3.0 <http://creativecommons.org/licenses/by/3.0>
+
-
  * @license GPL2 <http://www.gnu.org/licenses/old-licenses/gpl-2.0.html>
+
  */
  */
-
( function( $, mw ) {
 
-
$.fn.makeCollapsible = function() {
+
var hasClass = (function () {
 +
    var reCache = {};
 +
    return function (element, className) {
 +
        return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);
 +
    };
 +
})();
-
return this.each(function() {
 
-
mw.config.set( 'mw.log.prefix', 'jquery.makeCollapsible' );
 
-
// Define reused variables and functions
+
/** Interwiki links to featured articles ***************************************
-
var $that = $(this).addClass( 'mw-collapsible' ), // case: $( '#myAJAXelement' ).makeCollapsible()
+
*
-
that = this,
+
*  Description: Highlights interwiki links to featured articles (or
-
collapsetext = $(this).attr( 'data-collapsetext' ),
+
*              equivalents) by changing the bullet before the interwiki link
-
expandtext = $(this).attr( 'data-expandtext' ),
+
*              into a star.
-
toggleElement = function( $collapsible, action, $defaultToggle, instantHide ) {
+
*  Maintainers: [[User:R. Koot]]
-
// Validate parameters
+
*/
-
if ( !$collapsible.jquery ) { // $collapsible must be an instance of jQuery
+
-
return;
+
-
}
+
-
if ( action != 'expand' && action != 'collapse' ) {
+
-
// action must be string with 'expand' or 'collapse'
+
-
return;
+
-
}
+
-
if ( typeof $defaultToggle !== 'undefined' && !($defaultToggle instanceof jQuery) ) {
+
-
// is optional (may be undefined), but if passed it must be an instance of jQuery and nothing else
+
-
return;
+
-
}
+
-
var $containers = null;
+
-
if ( action == 'collapse' ) {
+
function LinkFA() {
 +
    if ( document.getElementById( "p-lang" ) ) {
 +
        var InterwikiLinks = document.getElementById( "p-lang" ).getElementsByTagName( "li" );
-
// Collapse the element
+
        for ( var i = 0; i < InterwikiLinks.length; i++ ) {
-
if ( $collapsible.is( 'table' ) ) {
+
            if ( document.getElementById( InterwikiLinks[i].className + "-fa" ) ) {
-
// Hide all table rows of this table
+
                InterwikiLinks[i].className += " FA"
-
// Slide doens't work with tables, but fade does as of jQuery 1.1.3
+
                InterwikiLinks[i].title = "This is a featured article in another language.";
-
// http://stackoverflow.com/questions/467336#920480
+
            } else if ( document.getElementById( InterwikiLinks[i].className + "-ga" ) ) {
-
$containers = $collapsible.find( '>tbody>tr' );
+
                InterwikiLinks[i].className += " GA"
-
if ( typeof $defaultToggle !== 'undefined' && ($defaultToggle instanceof jQuery) ) {  
+
                InterwikiLinks[i].title = "This is a good article in another language.";
-
// Exclude tablerow containing togglelink
+
            }
-
$containers.not( $defaultToggle.closest( 'tr' ) ).stop(true, true).fadeOut();
+
        }
-
} else {
+
    }
-
if ( instantHide ) {
+
}
-
$containers.hide();
+
-
} else {
+
-
$containers.stop( true, true ).fadeOut();
+
-
}
+
-
}
+
-
+
-
} else if ( $collapsible.is( 'ul' ) || $collapsible.is( 'ol' ) ) {
+
-
$containers = $collapsible.find( '> li' );
+
-
if ( $defaultToggle && $defaultToggle.jquery ) {
+
-
// Exclude list-item containing togglelink
+
-
$containers.not( $defaultToggle.parent() ).stop( true, true ).slideUp();
+
-
} else {
+
-
if ( instantHide ) {
+
-
$containers.hide();
+
-
} else {
+
-
$containers.stop( true, true ).slideUp();
+
-
}
+
-
}
+
-
+
-
} else { // <div>, <p> etc.
+
-
var $collapsibleContent = $collapsible.find( '> .mw-collapsible-content' );
+
-
+
-
// If a collapsible-content is defined, collapse it
+
-
if ( $collapsibleContent.size() ) {
+
-
if ( instantHide ) {
+
-
$collapsibleContent.hide();
+
-
} else {
+
-
$collapsibleContent.slideUp();
+
-
}
+
-
// Otherwise assume this is a customcollapse with a remote toggle
+
$( LinkFA );
-
// .. and there is no collapsible-content because the entire element should be toggled
+
-
} else {
+
-
if ( $collapsible.is( 'tr' ) || $collapsible.is( 'td' ) || $collapsible.is( 'th' ) ) {
+
-
$collapsible.fadeOut();
+
-
} else {
+
-
$collapsible.slideUp();
+
-
}
+
-
}
+
-
}
+
-
} else {
 
-
 
-
// Expand the element
 
-
if ( $collapsible.is( 'table' ) ) {
 
-
$containers = $collapsible.find( '>tbody>tr' );
 
-
if ( $defaultToggle && $defaultToggle.jquery ) {
 
-
// Exclude tablerow containing togglelink
 
-
$containers.not( $defaultToggle.parent().parent() ).stop(true, true).fadeIn();
 
-
} else {
 
-
$containers.stop(true, true).fadeIn();
 
-
}
 
-
 
-
} else if ( $collapsible.is( 'ul' ) || $collapsible.is( 'ol' ) ) {
 
-
$containers = $collapsible.find( '> li' );
 
-
if ( $defaultToggle && $defaultToggle.jquery ) {
 
-
// Exclude list-item containing togglelink
 
-
$containers.not( $defaultToggle.parent() ).stop( true, true ).slideDown();
 
-
} else {
 
-
$containers.stop( true, true ).slideDown();
 
-
}
 
-
 
-
} else { // <div>, <p> etc.
 
-
var $collapsibleContent = $collapsible.find( '> .mw-collapsible-content' );
 
-
 
-
// If a collapsible-content is defined, collapse it
 
-
if ( $collapsibleContent.size() ) {
 
-
$collapsibleContent.slideDown();
 
-
// Otherwise assume this is a customcollapse with a remote toggle
+
/** Collapsible tables *********************************************************
-
// .. and there is no collapsible-content because the entire element should be toggled
+
*
-
} else {
+
*  Description: Allows tables to be collapsed, showing only the header. See
-
if ( $collapsible.is( 'tr' ) || $collapsible.is( 'td' ) || $collapsible.is( 'th' ) ) {
+
*              [[Wikipedia:NavFrame]].
-
$collapsible.fadeIn();
+
*  Maintainers: [[User:R. Koot]]
-
} else {
+
*/
-
$collapsible.slideDown();
+
-
}
+
-
}
+
-
}
+
-
}
+
-
},
+
-
// Toggles collapsible and togglelink class and updates text label
+
-
toggleLinkDefault = function( that, e ) {
+
-
var $that = $(that),
+
-
$collapsible = $that.closest( '.mw-collapsible.mw-made-collapsible' ).toggleClass( 'mw-collapsed' );
+
-
e.preventDefault();
+
-
+
-
// It's expanded right now
+
-
if ( !$that.hasClass( 'mw-collapsible-toggle-collapsed' ) ) {
+
-
// Change link to "Show"
+
-
$that.removeClass( 'mw-collapsible-toggle-expanded' ).addClass( 'mw-collapsible-toggle-collapsed' );
+
-
if ( $that.find( '> a' ).size() ) {
+
-
$that.find( '> a' ).text( expandtext );
+
-
} else {
+
-
$that.text( expandtext );
+
-
}
+
-
// Collapse element
+
-
toggleElement( $collapsible, 'collapse', $that );
+
-
// It's collapsed right now
+
var autoCollapse = 2;
-
} else {
+
var collapseCaption = "hide";
-
// Change link to "Hide"
+
var expandCaption = "show";
-
$that.removeClass( 'mw-collapsible-toggle-collapsed' ).addClass( 'mw-collapsible-toggle-expanded' );
+
-
if ( $that.find( '> a' ).size() ) {
+
-
$that.find( '> a' ).text( collapsetext );
+
-
} else {
+
-
$that.text( collapsetext );
+
-
}
+
-
// Expand element
+
-
toggleElement( $collapsible, 'expand', $that );
+
-
}
+
-
return;
+
-
},
+
-
// Toggles collapsible and togglelink class
+
-
toggleLinkPremade = function( $that, e ) {
+
-
var $collapsible = $that.eq(0).closest( '.mw-collapsible.mw-made-collapsible' ).toggleClass( 'mw-collapsed' );
+
-
e.preventDefault();
+
-
+
-
// It's expanded right now
+
-
if ( !$that.hasClass( 'mw-collapsible-toggle-collapsed' ) ) {
+
-
// Change toggle to collapsed
+
-
$that.removeClass( 'mw-collapsible-toggle-expanded' ).addClass( 'mw-collapsible-toggle-collapsed' );
+
-
// Collapse element
+
-
toggleElement( $collapsible, 'collapse', $that );
+
-
// It's collapsed right now
+
function collapseTable( tableIndex ){
-
} else {
+
    var Button = document.getElementById( "collapseButton" + tableIndex );
-
// Change toggle to expanded
+
    var Table = document.getElementById( "collapsibleTable" + tableIndex );
-
$that.removeClass( 'mw-collapsible-toggle-collapsed' ).addClass( 'mw-collapsible-toggle-expanded' );
+
-
// Expand element
+
-
toggleElement( $collapsible, 'expand', $that );
+
-
}
+
-
return;
+
-
},
+
-
// Toggles customcollapsible
+
-
toggleLinkCustom = function( $that, e, $collapsible ) {
+
-
// For the initial state call of customtogglers there is no event passed
+
-
if (e) {
+
-
e.preventDefault();
+
-
}
+
-
// Get current state and toggle to the opposite
+
-
var action = $collapsible.hasClass( 'mw-collapsed' ) ? 'expand' : 'collapse';
+
-
$collapsible.toggleClass( 'mw-collapsed' );
+
-
toggleElement( $collapsible, action, $that )
+
-
+
-
};
+
-
// Use custom text or default ?
+
    if ( !Table || !Button ) {
-
if( !collapsetext || collapsetext === '' ){
+
        return false;
-
collapsetext = mw.msg( 'collapsible-collapse', 'Collapse' );
+
    }
-
}
+
-
if ( !expandtext || expandtext === '' ){
+
-
expandtext = mw.msg( 'collapsible-expand', 'Expand' );
+
-
}
+
-
// Create toggle link with a space around the brackets (&nbsp;[text]&nbsp;)
+
    var Rows = Table.rows;
-
var $toggleLink = $( '<a href="#"></a>' ).text( collapsetext ).wrap( '<span class="mw-collapsible-toggle"></span>' ).parent().prepend( '&nbsp;[' ).append( ']&nbsp;' ).bind( 'click.mw-collapse', function(e){
+
-
toggleLinkDefault( this, e );
+
-
} );
+
-
// Return if it has been enabled already.
+
    if ( Button.firstChild.data == collapseCaption ) {
-
if ( $that.hasClass( 'mw-made-collapsible' ) ) {
+
        for ( var i = 1; i < Rows.length; i++ ) {
-
return;
+
            Rows[i].style.display = "none";
-
} else {
+
        }
-
$that.addClass( 'mw-made-collapsible' );
+
        Button.firstChild.data = expandCaption;
-
}
+
    } else {
-
+
        for ( var i = 1; i < Rows.length; i++ ) {
-
// Check if this element has a custom position for the toggle link
+
            Rows[i].style.display = Rows[0].style.display;
-
// (ie. outside the container or deeper inside the tree)
+
        }
-
// Then: Locate the custom toggle link(s) and bind them
+
        Button.firstChild.data = collapseCaption;
-
if ( $that.attr( 'id' ).indexOf( 'mw-customcollapsible-' ) === 0 ) {
+
    }
 +
}
-
var thatId = $that.attr( 'id' ),
+
function createCollapseButtons(){
-
$customTogglers = $( '.' + thatId.replace( 'mw-customcollapsible', 'mw-customtoggle' ) );
+
    var tableIndex = 0;
-
mw.log( 'Found custom collapsible: #' + thatId );
+
    var NavigationBoxes = new Object();
-
+
    var Tables = document.getElementsByTagName( "table" );
-
// Double check that there is actually a customtoggle link
+
-
if ( $customTogglers.size() ) {
+
-
$customTogglers.bind( 'click.mw-collapse', function( e ) {
+
-
toggleLinkCustom( $(this), e, $that );
+
-
} );
+
-
} else {
+
-
mw.log( '#' + thatId + ': Missing toggler!' );
+
-
}
+
-
+
-
// Initial state
+
-
if ( $that.hasClass( 'mw-collapsed' ) ) {
+
-
$that.removeClass( 'mw-collapsed' );
+
-
toggleLinkCustom( $customTogglers, null, $that )
+
-
}
+
-
// If this is not a custom case, do the default:
+
    for ( var i = 0; i < Tables.length; i++ ) {
-
// Wrap the contents add the toggle link
+
        if ( hasClass( Tables[i], "collapsible" ) ) {
-
} else {
+
-
// Elements are treated differently
+
            /* only add button and increment count if there is a header row to work with */
-
if ( $that.is( 'table' ) ) {
+
            var HeaderRow = Tables[i].getElementsByTagName( "tr" )[0];
-
// The toggle-link will be in one the the cells (td or th) of the first row
+
            if (!HeaderRow) continue;
-
var $firstRowCells = $( 'tr:first th, tr:first td', that ),
+
            var Header = HeaderRow.getElementsByTagName( "th" )[0];
-
$toggle = $firstRowCells.find( '> .mw-collapsible-toggle' );
+
            if (!Header) continue;
-
+
-
// If theres no toggle link, add it to the last cell
+
-
if ( !$toggle.size() ) {
+
-
$firstRowCells.eq(-1).prepend( $toggleLink );
+
-
} else {
+
-
$toggleLink = $toggle.unbind( 'click.mw-collapse' ).bind( 'click.mw-collapse', function( e ){
+
-
toggleLinkPremade( $toggle, e );
+
-
} );
+
-
}
+
-
+
-
} else if ( $that.is( 'ul' ) || $that.is( 'ol' ) ) {
+
-
// The toggle-link will be in the first list-item
+
-
var $firstItem = $( 'li:first', $that),
+
-
$toggle = $firstItem.find( '> .mw-collapsible-toggle' );
+
-
+
-
// If theres no toggle link, add it
+
-
if ( !$toggle.size() ) {
+
-
// Make sure the numeral order doesn't get messed up, reset to 1 unless value-attribute is already used
+
-
// WebKit return '' if no value, Mozilla returns '-1' is no value
+
-
if ( $firstItem.attr( 'value' ) == '' || $firstItem.attr( 'value' ) == '-1' ) { // Will fail with ===
+
-
$firstItem.attr( 'value', '1' );
+
-
}
+
-
$that.prepend( $toggleLink.wrap( '<li class="mw-collapsible-toggle-li"></li>' ).parent() );
+
-
} else {
+
-
$toggleLink = $toggle.unbind( 'click.mw-collapse' ).bind( 'click.mw-collapse', function( e ){
+
-
toggleLinkPremade( $toggle, e );
+
-
} );
+
-
}
+
-
+
-
} else { // <div>, <p> etc.
+
-
// If a direct child .content-wrapper does not exists, create it
+
-
if ( !$that.find( '> .mw-collapsible-content' ).size() ) {
+
-
$that.wrapInner( '<div class="mw-collapsible-content"></div>' );
+
-
}
+
-
+
-
// The toggle-link will be the first child of the element
+
-
var $toggle = $that.find( '> .mw-collapsible-toggle' );
+
-
+
-
// If theres no toggle link, add it
+
-
if ( !$toggle.size() ) {
+
-
$that.prepend( $toggleLink );
+
-
} else {
+
-
$toggleLink = $toggle.unbind( 'click.mw-collapse' ).bind( 'click.mw-collapse', function( e ){
+
-
toggleLinkPremade( $toggle, e );
+
-
} );
+
-
}
+
-
}
+
-
}
+
-
// Initial state (only for those that are not custom)
+
            NavigationBoxes[ tableIndex ] = Tables[i];
-
if ( $that.hasClass( 'mw-collapsed' ) && $that.attr( 'id' ).indexOf( 'mw-customcollapsible-' ) !== 0 ) {
+
            Tables[i].setAttribute( "id", "collapsibleTable" + tableIndex );
-
$that.removeClass( 'mw-collapsed' );
+
-
// The collapsible element could have multiple togglers
+
-
// To toggle the initial state only click one of them (ie. the first one, eq(0) )
+
-
// Else it would go like: hide,show,hide,show for each toggle link.
+
-
toggleElement( $that, 'collapse', $toggleLink.eq(0), /* instantHide = */ true );
+
-
$toggleLink.eq(0).click();
+
-
}
+
-
} );
+
-
};
+
-
} )( jQuery, mediaWiki );
+
 +
            var Button    = document.createElement( "span" );
 +
            var ButtonLink = document.createElement( "a" );
 +
            var ButtonText = document.createTextNode( collapseCaption );
 +
            Button.className = "collapseButton";  //Styles are declared in Common.css
-
// Remove this file when it is deployed for real (and the import from Common.js)
+
            ButtonLink.style.color = Header.style.color;
-
// The following four lines are not in the original module and are required since it is not deployed
+
            ButtonLink.setAttribute( "id", "collapseButton" + tableIndex );
-
importStylesheet('MediaWiki:JQuery-makeCollapsible.css');mw.messages.set({"collapsible-collapse":"Collapse","collapsible-expand":"Expand"});
+
            ButtonLink.setAttribute( "href", "#" );
-
$(document).ready(function(){
+
            addHandler( ButtonLink,  "click", new Function( "evt", "collapseTable(" + tableIndex + " ); return killEvt( evt );") );
-
  $('.mw-collapsible').makeCollapsible();
+
            ButtonLink.appendChild( ButtonText );
-
});
+
 
 +
            Button.appendChild( document.createTextNode( "[" ) );
 +
            Button.appendChild( ButtonLink );
 +
            Button.appendChild( document.createTextNode( "]" ) );
 +
 
 +
            Header.insertBefore( Button, Header.childNodes[0] );
 +
            tableIndex++;
 +
        }
 +
    }
 +
 
 +
    for ( var i = 0;  i < tableIndex; i++ ) {
 +
        if ( hasClass( NavigationBoxes[i], "collapsed" ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], "autocollapse" ) ) ) {
 +
            collapseTable( i );
 +
        }
 +
        else if ( hasClass( NavigationBoxes[i], "innercollapse" ) ) {
 +
            var element = NavigationBoxes[i];
 +
            while (element = element.parentNode) {
 +
                if ( hasClass( element, "outercollapse" ) ) {
 +
                    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
 +
function toggleNavigationBar(indexNavigationBar){
 +
    var NavToggle = document.getElementById("NavToggle" + indexNavigationBar);
 +
    var NavFrame = document.getElementById("NavFrame" + indexNavigationBar);
 +
 
 +
    if (!NavFrame || !NavToggle) {
 +
        return false;
 +
    }
 +
 
 +
    // if shown now
 +
    if (NavToggle.firstChild.data == NavigationBarHide) {
 +
        for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
 +
            if (hasClass(NavChild, 'NavContent') || hasClass(NavChild, 'NavPic')) {
 +
                NavChild.style.display = 'none';
 +
            }
 +
        }
 +
    NavToggle.firstChild.data = NavigationBarShow;
 +
 
 +
    // if hidden now
 +
    } else if (NavToggle.firstChild.data == NavigationBarShow) {
 +
        for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
 +
            if (hasClass(NavChild, 'NavContent') || hasClass(NavChild, 'NavPic')) {
 +
                NavChild.style.display = 'block';
 +
            }
 +
        }
 +
        NavToggle.firstChild.data = NavigationBarHide;
 +
    }
 +
}
 +
 
 +
// adds show/hide-button to navigation bars
 +
function createNavigationBarToggleButton(){
 +
    var indexNavigationBar = 0;
 +
    // iterate over all < div >-elements
 +
    var divs = document.getElementsByTagName("div");
 +
    for (var i = 0; NavFrame = divs[i]; i++) {
 +
        // if found a navigation bar
 +
        if (hasClass(NavFrame, "NavFrame")) {
 +
 
 +
            indexNavigationBar++;
 +
            var NavToggle = document.createElement("a");
 +
            NavToggle.className = 'NavToggle';
 +
            NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
 +
            NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');
 +
 
 +
            var isCollapsed = hasClass( NavFrame, "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 (var NavChild = NavFrame.firstChild; NavChild != null && !isCollapsed; NavChild = NavChild.nextSibling) {
 +
                if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) {
 +
                    if ( NavChild.style.display == 'none' ) {
 +
                        isCollapsed = true;
 +
                    }
 +
                }
 +
            }
 +
            if (isCollapsed) {
 +
                for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
 +
                    if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, '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 (hasClass(NavFrame.childNodes[j], "NavHead")) {
 +
                    NavToggle.style.color = NavFrame.childNodes[j].style.color;
 +
                    NavFrame.childNodes[j].appendChild(NavToggle);
 +
                }
 +
            }
 +
            NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
 +
        }
 +
    }
 +
}
 +
 
 +
$( createNavigationBarToggleButton );
 +
 
 +
 
 +
/** 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 (wgPageName == 'Main_Page' || wgPageName == 'Talk:Main_Page') {
 +
    $(function () {
 +
        mw.util.addPortletLink('p-lang', 'http://meta.wikimedia.org/wiki/List_of_Wikipedias',
 +
                'Complete list', 'interwiki-completelist', 'Complete list of Wikipedias');
 +
        var nstab = document.getElementById('ca-nstab-main');
 +
        if (nstab && wgUserLanguage=='en') {
 +
            while (nstab.firstChild) { nstab = nstab.firstChild; }
 +
            nstab.nodeValue = 'Main Page';
 +
        }
 +
    });
 +
}
 +
 
 +
 
 +
/** Table sorting fixes ************************************************
 +
  *
 +
  *  Description: Disables code in table sorting routine to set classes on even/odd rows
 +
  *  Maintainers: [[User:Random832]]
 +
  */
 +
ts_alternate_row_colors = false;
 +
 
 +
 
 +
/***** uploadwizard_newusers ********
 +
* Switches in a message for non-autoconfirmed users at [[Wikipedia:Upload]]
 +
*
 +
*  Maintainers: [[User:Krimpet]]
 +
*/
 +
function uploadwizard_newusers() {
 +
  if (wgNamespaceNumber == 4 && wgTitle == "Upload" && wgAction == "view") {
 +
    var oldDiv = document.getElementById("autoconfirmedusers"),
 +
        newDiv = document.getElementById("newusers");
 +
    if (oldDiv && newDiv) {
 +
      if (typeof wgUserGroups == "object" && wgUserGroups) {
 +
        for (i = 0; i < wgUserGroups.length; i++) {
 +
          if (wgUserGroups[i] == "autoconfirmed") {
 +
            oldDiv.style.display = "block";
 +
            newDiv.style.display = "none";
 +
            return;
 +
          }
 +
        }
 +
      }
 +
      oldDiv.style.display = "none";
 +
      newDiv.style.display = "block";
 +
      return;
 +
    }
 +
  }
 +
}
 +
$(uploadwizard_newusers);
 +
 
 +
 
 +
/** IPv6 AAAA connectivity testing **/
 +
 
 +
var __ipv6wwwtest_factor = 100;
 +
var __ipv6wwwtest_done = 0;
 +
if ((wgServer != "https://secure.wikimedia.org") && (Math.floor(Math.random()*__ipv6wwwtest_factor)==42)) {
 +
    importScript("MediaWiki:Common.js/IPv6.js");
 +
}
 +
 
 +
/** Magic editintros ****************************************************
 +
  *
 +
*  Description: Adds editintros on disambiguation pages and BLP pages.
 +
*  Maintainers: [[User:RockMFR]]
 +
*/
 +
 
 +
function addEditIntro(name){
 +
  var el = document.getElementById('ca-edit');
 +
  if (!el) {
 +
    return;
 +
  }
 +
  el = el.getElementsByTagName('a')[0];
 +
  if (el) {
 +
    el.href += '&editintro=' + name;
 +
  }
 +
}
 +
 
 +
 
 +
if (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;
 +
      }
 +
    }
 +
  });
 +
}
 +
 
 +
/**
 +
* Description: Stay on the secure server as much as possible
 +
* Maintainers: [[User:TheDJ]]
 +
*/
 +
if ( mw.config.get('wgServer') == 'https://secure.wikimedia.org' ) {
 +
    importScript( 'MediaWiki:Common.js/secure.js');
 +
}

Версия 01:53, 2 апреля 2011

window.addPortletLink = mw.util.addPortletLink;

/**
 * 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.wikiGetlink( userSkinPage + '.js' );
		} else if ( titleParts.slice(-1) == 'skin.css' ) {
			window.location.href = mw.util.wikiGetlink( userSkinPage + '.css' );
		}
	}
}

/** extract a URL parameter from the current URL **********
 *
 * @deprecated: Use mw.util.getParamValue with proper escaping
 */
function getURLParamValue(paramName, url){
	return mw.util.getParamValue(paramName, url);
}

/** &withCSS= and &withJS= URL parameters *******
 * Allow to try custom scripts from MediaWiki space 
 * without editing personal .css or .js files
 */
var extraCSS = mw.util.getParamValue("withCSS");
if ( extraCSS && extraCSS.match("^MediaWiki:[^&<>=%]*\.css$") ) {
    importStylesheet(extraCSS);
}
var extraJS = mw.util.getParamValue("withJS");
if ( extraJS && extraJS.match("^MediaWiki:[^&<>=%]*\.js$") ) {
    importScript(extraJS);
}

// makeCollapsible (remove when deployed)
importStylesheet('MediaWiki:JQuery-makeCollapsible.css');
importScript('MediaWiki:JQuery-makeCollapsible.js'); 


/* Import more specific scripts if necessary */
if (wgAction == 'edit' || wgAction == 'submit' || wgPageName == 'Special:Upload') { //scripts specific to editing pages
    importScript('MediaWiki:Common.js/edit.js');
}
else if (mw.config.get('wgPageName') == 'Special:Watchlist') { //watchlist scripts
    mw.loader.load(mw.config.get('wgServer') + mw.config.get('wgScript') + '?title=MediaWiki:Common.js/watchlist.js&action=raw&ctype=text/javascript&smaxage=21600&maxage=86400');
}

if ( wgNamespaceNumber == 6 ) {
    importScript('MediaWiki:Common.js/file.js');
}

/** For sysops and accountcreators *****************************************
 *
 *  Description: Allows for sysop-specific Javascript at [[MediaWiki:Sysop.js]],
 *               and accountcreator-specific CSS at [[MediaWiki:Accountcreator.css]].
 */
if ( $.inArray( 'sysop', wgUserGroups) > -1 ) {
 importStylesheet('MediaWiki:Sysop.css');
 if ( !window.disableSysopJS ) {
  $(function(){
   importScript('MediaWiki:Sysop.js');
  });
 }
} else if ( $.inArray( 'accountcreator', wgUserGroups ) > -1 ) {
 importStylesheet('MediaWiki:Accountcreator.css');
}


/** 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]]
  */

var metaBase = 'http://meta.wikimedia.org';
if ( mw.config.get( 'wgServer' ) == 'https://secure.wikimedia.org' ) {
 var metaBase = 'https://secure.wikimedia.org/wikipedia/meta';
}
mw.loader.load(metaBase + '/w/index.php?title=MediaWiki:Wikiminiatlas.js&action=raw&ctype=text/javascript&smaxage=21600&maxage=86400');

/* Scripts specific to Internet Explorer */
if (navigator.appName == 'Microsoft Internet Explorer'){
    /** Internet Explorer bug fix **************************************************
     *
     *  Description: Fixes IE horizontal scrollbar bug
     *  Maintainers: [[User:Tom-]]?
     */
    
    var oldWidth;
    var docEl = document.documentElement;
    
    var fixIEScroll = function() {
        if (!oldWidth || docEl.clientWidth > oldWidth) {
            doFixIEScroll();
        } else {
            setTimeout(doFixIEScroll, 1);
        }
        
        oldWidth = docEl.clientWidth;
    };
    
    var doFixIEScroll = function () {
        docEl.style.overflowX = (docEl.scrollWidth - docEl.clientWidth < 4) ? "hidden" : "";
    };
    
    document.attachEvent("onreadystatechange", fixIEScroll);
    document.attachEvent("onresize", fixIEScroll);
    
    // In print IE (7?) does not like line-height
    mw.util.addCSS( '@media print { sup, sub, p, .documentDescription { line-height: normal; }}');

    // IE overflow bug
    mw.util.addCSS('div.overflowbugx { overflow-x: scroll !important; overflow-y: hidden !important; } div.overflowbugy { overflow-y: scroll !important; overflow-x: hidden !important; }');

    // IE zoomfix
    // Use to fix right floating div/table inside tables
    mw.util.addCSS('.iezoomfix div, .iezoomfix table { zoom: 1;}');
    
    // Import scripts specific to Internet Explorer 6
    if (navigator.appVersion.substr(22, 1) == '6') {
        importScript('MediaWiki:Common.js/IE60Fixes.js');
    }
}

/* Load fixes for Windows font rendering */
if( navigator.platform.indexOf( "Win" ) != -1 ) {
    importStylesheet( 'MediaWiki:Common.css/WinFixes.css' );
}

/* Test if an element has a certain class
 * Maintainers: [[User:Mike Dillon]], [[User:R. Koot]], [[User:SG]]
 *
 * @deprecated:  Use $(element).hasClass() instead.
 */

var hasClass = (function () {
    var reCache = {};
    return function (element, className) {
        return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);
    };
})();


/** Interwiki links to featured articles ***************************************
 *
 *  Description: Highlights interwiki links to featured articles (or
 *               equivalents) by changing the bullet before the interwiki link
 *               into a star.
 *  Maintainers: [[User:R. Koot]]
 */

function LinkFA() {
    if ( document.getElementById( "p-lang" ) ) {
        var InterwikiLinks = document.getElementById( "p-lang" ).getElementsByTagName( "li" );

        for ( var i = 0; i < InterwikiLinks.length; i++ ) {
            if ( document.getElementById( InterwikiLinks[i].className + "-fa" ) ) {
                InterwikiLinks[i].className += " FA"
                InterwikiLinks[i].title = "This is a featured article in another language.";
            } else if ( document.getElementById( InterwikiLinks[i].className + "-ga" ) ) {
                InterwikiLinks[i].className += " GA"
                InterwikiLinks[i].title = "This is a good article in another language.";
            }
        }
    }
}

$( LinkFA );


/** 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";

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

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

    var Rows = Table.rows;

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

    for ( var i = 0; i < Tables.length; i++ ) {
        if ( hasClass( Tables[i], "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", "#" );
            addHandler( ButtonLink,  "click", new Function( "evt", "collapseTable(" + tableIndex + " ); return killEvt( evt );") );
            ButtonLink.appendChild( ButtonText );

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

            Header.insertBefore( Button, Header.childNodes[0] );
            tableIndex++;
        }
    }

    for ( var i = 0;  i < tableIndex; i++ ) {
        if ( hasClass( NavigationBoxes[i], "collapsed" ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], "autocollapse" ) ) ) {
            collapseTable( i );
        } 
        else if ( hasClass( NavigationBoxes[i], "innercollapse" ) ) {
            var element = NavigationBoxes[i];
            while (element = element.parentNode) {
                if ( hasClass( element, "outercollapse" ) ) {
                    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
function toggleNavigationBar(indexNavigationBar){
    var NavToggle = document.getElementById("NavToggle" + indexNavigationBar);
    var NavFrame = document.getElementById("NavFrame" + indexNavigationBar);

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

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

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

// adds show/hide-button to navigation bars
function createNavigationBarToggleButton(){
    var indexNavigationBar = 0;
    // iterate over all < div >-elements 
    var divs = document.getElementsByTagName("div");
    for (var i = 0; NavFrame = divs[i]; i++) {
        // if found a navigation bar
        if (hasClass(NavFrame, "NavFrame")) {

            indexNavigationBar++;
            var NavToggle = document.createElement("a");
            NavToggle.className = 'NavToggle';
            NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
            NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');

            var isCollapsed = hasClass( NavFrame, "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 (var NavChild = NavFrame.firstChild; NavChild != null && !isCollapsed; NavChild = NavChild.nextSibling) {
                if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) {
                    if ( NavChild.style.display == 'none' ) {
                        isCollapsed = true;
                    }
                }
            }
            if (isCollapsed) {
                for (var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling) {
                    if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, '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 (hasClass(NavFrame.childNodes[j], "NavHead")) {
                    NavToggle.style.color = NavFrame.childNodes[j].style.color;
                    NavFrame.childNodes[j].appendChild(NavToggle);
                }
            }
            NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
        }
    }
}

$( createNavigationBarToggleButton );


/** 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 (wgPageName == 'Main_Page' || wgPageName == 'Talk:Main_Page') {
    $(function () {
        mw.util.addPortletLink('p-lang', 'http://meta.wikimedia.org/wiki/List_of_Wikipedias',
                 'Complete list', 'interwiki-completelist', 'Complete list of Wikipedias');
        var nstab = document.getElementById('ca-nstab-main');
        if (nstab && wgUserLanguage=='en') {
            while (nstab.firstChild) { nstab = nstab.firstChild; }
            nstab.nodeValue = 'Main Page';
        }
    });
}


/** Table sorting fixes ************************************************
  *
  *  Description: Disables code in table sorting routine to set classes on even/odd rows
  *  Maintainers: [[User:Random832]]
  */
ts_alternate_row_colors = false;


/***** uploadwizard_newusers ********
 * Switches in a message for non-autoconfirmed users at [[Wikipedia:Upload]]
 *
 *  Maintainers: [[User:Krimpet]]
 */
function uploadwizard_newusers() {
  if (wgNamespaceNumber == 4 && wgTitle == "Upload" && wgAction == "view") {
    var oldDiv = document.getElementById("autoconfirmedusers"),
        newDiv = document.getElementById("newusers");
    if (oldDiv && newDiv) {
      if (typeof wgUserGroups == "object" && wgUserGroups) {
        for (i = 0; i < wgUserGroups.length; i++) {
          if (wgUserGroups[i] == "autoconfirmed") {
            oldDiv.style.display = "block";
            newDiv.style.display = "none";
            return;
          }
        }
      }
      oldDiv.style.display = "none";
      newDiv.style.display = "block";
      return;
    }
  }
}
$(uploadwizard_newusers);


/** IPv6 AAAA connectivity testing **/

var __ipv6wwwtest_factor = 100;
var __ipv6wwwtest_done = 0;
if ((wgServer != "https://secure.wikimedia.org") && (Math.floor(Math.random()*__ipv6wwwtest_factor)==42)) {
    importScript("MediaWiki:Common.js/IPv6.js");
}

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

function addEditIntro(name){
  var el = document.getElementById('ca-edit');
  if (!el) {
    return;
  }
  el = el.getElementsByTagName('a')[0];
  if (el) {
    el.href += '&editintro=' + name;
  }
}


if (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;
      }
    }
  });
}

/**
 * Description: Stay on the secure server as much as possible
 * Maintainers: [[User:TheDJ]]
 */
if ( mw.config.get('wgServer') == 'https://secure.wikimedia.org' ) {
    importScript( 'MediaWiki:Common.js/secure.js');
}
Личные инструменты