«Коллективный разум сообщества гоблинов гораздо больше суммы потенциала разрозненных гоблиновSmile.gif»

MediaWiki:Common.js — различия между версиями

Зеленопедия
Перейти к: навигация, поиск
Строка 1: Строка 1:
/* Размещённый здесь JavaScript код будет загружаться всем пользователям при обращении к каждой странице */
+
/**
 +
* 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.
 +
*/
  
function importStylesheet( page ) {
+
/* global mw, $ */
  if ( (page.charAt(0) === '/') || (page.indexOf('http:') === 0) ){
+
/* jshint strict:false, browser:true */
      // стиль от корня движка MediaWiki или внешний
+
 
      var sheetPath = page;
+
mw.loader.using( ['mediawiki.user', 'mediawiki.util', 'mediawiki.notify'] ).done( function () {
  } else {
+
/* Begin of mw.loader.using callback */
      // стиль со страницы MediaWiki
+
 
      var sheetPath = wgScriptPath + '/index.php?title=' +
+
/**
                      escape( page.replace( ' ', '_' ) ) +
+
* Main Page layout fixes
                      '&action=raw&ctype=text/css&dontcountme=s';
+
*
  }
+
* Description: Adds an additional link to the complete list of languages available.
  if (document.createStyleSheet) {
+
* Maintainers: [[User:AzaToth]], [[User:R. Koot]], [[User:Alex Smotrov]]
      document.createStyleSheet(sheetPath); // Internet Explorer
+
*/
  } else {
+
if ( mw.config.get( 'wgPageName' ) === 'Main_Page' || mw.config.get( 'wgPageName' ) === 'Talk:Main_Page' ) {
      $('head').append('<link rel="stylesheet" type="text/css" href="' + sheetPath + '" />');
+
$( function () {
  }
+
mw.util.addPortletLink( 'p-lang', '//meta.wikimedia.org/wiki/List_of_Wikipedias',
 +
'Complete list', 'interwiki-completelist', 'Complete list of Wikipedias' );
 +
} );
 
}
 
}
//From Wiki ALL!!! 
+
 
importMW = function (name) { importScript('MediaWiki:'+name+'.js') }
+
/**
   
+
* Redirect User:Name/skin.js and skin.css to the current skin's pages
importScript_ = importScript
+
  * (unless the 'skin' page really exists)
importScript = function (page, proj){
+
  * @source: http://www.mediawiki.org/wiki/Snippets/Redirect_skin.js
  if (!proj) importScript_(page)
+
  * @rev: 2
  else {
+
*/
  if (proj.indexOf('.')==-1) proj += '.wikipedia.org'
+
if ( mw.config.get( 'wgArticleId' ) === 0 && mw.config.get( 'wgNamespaceNumber' ) === 2 ) {
  importScriptURI('//'+proj+'/w/index.php?action=raw&ctype=text/javascript&title='+encodeURIComponent(page.replace(/ /g,'_')))
+
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' );
//Messages
+
if ( titleParts.slice( -1 ) == 'skin.js' ) {
var listFA = {
+
window.location.href = mw.util.getUrl( userSkinPage + '.js' );
fa:'Эта статья является избранной',
+
} else if ( titleParts.slice( -1 ) == 'skin.css' ) {
fl:'Этот список или портал является избранным',
+
window.location.href = mw.util.getUrl( userSkinPage + '.css' );
ga:'Эта статья является хорошей'}
+
}
var textFA = ' в другом языковом разделе'
+
}
+
var zeroSectionTip = 'Править введение'
+
+
var NavigationBarHide = '[скрыть]'
+
var NavigationBarShow = '[показать]'
+
var NavigationBarShowDefault = 2
+
+
if( /^en$/.test(wgUserLanguage) ) importMW('Common-' + wgUserLanguage)
+
+
+
+
function LinkFA(){
+
var ll, s
+
$('#p-lang li').each( function(i, iw){
+
  ll = iw.className.split(' ')[0] + '-'
+
  for( var s in listFA )
+
    if( document.getElementById(ll + s) )
+
      $( iw )
+
        .addClass( s.toUpperCase() )
+
        .attr( 'title',  listFA[s] + textFA )
+
})
+
 
}
 
}
  
 +
/**
 +
* 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' );
  
function editZeroSection(){
+
/**
  if( !wgArticleId ) return
+
  * Test if an element has a certain class
  mw.util.$content.find('h2')
+
  * @deprecated:  Use $(element).hasClass() instead.
.children('span.editsection').first()
+
  */
  .clone().prependTo(mw.util.$content)
+
mw.log.deprecate( window, 'hasClass', function ( element, className ) {
.find('a')
+
return $( element ).hasClass( className );
.attr('title', zeroSectionTip)
+
}, 'Use jQuery.hasClass() instead' );
.attr('href', wgScript + '?title='+encodeURIComponent(wgPageName) + '&action=edit&section=0' )
+
}
+
var NavigationBarHide = '[скрыть]'
+
var NavigationBarShow = '[показать]'
+
var NavigationBarShowDefault = 2
+
/* *** Collapsing *** */
+
var hasClass = (function (){
+
var reCache = {}
+
return function (element, className){
+
  return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className)
+
  }
+
})()
+
  
function collapsibleTables(){
+
/**
  var Table, HRow,  HCell, btn, a, tblIdx = 0, colTables = []
+
  * @source www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL
var allTables = document.getElementsByTagName('table')
+
  * @rev 6
for (var i=0; Table = allTables[i]; i++){
+
  */
  if (!hasClass(Table, 'collapsible')) continue
+
var extraCSS = mw.util.getParamValue( 'withCSS' ),
  if (!(HRow=Table.rows[0])) continue
+
extraJS = mw.util.getParamValue( 'withJS' );
  if (!(HCell=HRow.getElementsByTagName('th')[0])) continue
+
 
  Table.id = 'collapsibleTable' + tblIdx
+
if ( extraCSS ) {
  btn = document.createElement('span')
+
if ( extraCSS.match( /^MediaWiki:[^&<>=%#]*\.css$/ ) ) {
  btn.style.cssText = 'float:right; font-weight:normal; font-size:smaller'
+
mw.loader.load( '/w/index.php?title=' + extraCSS + '&action=raw&ctype=text/css', 'text/css' );
  a = document.createElement('a')
+
} else {
  a.id = 'collapseButton' + tblIdx
+
mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withCSS value' } );
  a.href = 'javascript:collapseTable(' + tblIdx + ');'
+
}
  a.style.color = HCell.style.color
+
  a.appendChild(document.createTextNode(NavigationBarHide))
+
  btn.appendChild(a)
+
  HCell.insertBefore(btn, HCell.childNodes[0])
+
  colTables[tblIdx++] = Table
+
  }
+
  for (var i=0; i < tblIdx; i++)
+
  if ((tblIdx > NavigationBarShowDefault && hasClass(colTables[i], 'autocollapse')) || hasClass(colTables[i], 'collapsed'))
+
    collapseTable(i)
+
}
+
+
function collapseTable (idx){
+
var Table = document.getElementById('collapsibleTable' + idx)
+
var btn = document.getElementById('collapseButton' + idx)
+
if (!Table || !btn) return false
+
var Rows = Table.rows
+
var isShown = (btn.firstChild.data == NavigationBarHide)
+
btn.firstChild.data = isShown ?  NavigationBarShow : NavigationBarHide
+
var disp = isShown ? 'none' : Rows[0].style.display
+
for (var i=1; i < Rows.length; i++)
+
    Rows[i].style.display = disp
+
}
+
function collapsibleDivs(){
+
var navIdx = 0, colNavs = [], i, NavFrame
+
var divs = document.getElementById('content').getElementsByTagName('div')
+
for (i=0; NavFrame = divs[i]; i++) {
+
  if (!hasClass(NavFrame, 'NavFrame')) continue
+
  NavFrame.id = 'NavFrame' + navIdx
+
  var a = document.createElement('a')
+
  a.className = 'NavToggle'
+
  a.id = 'NavToggle' + navIdx
+
  a.href = 'javascript:collapseDiv(' + navIdx + ');'
+
  a.appendChild(document.createTextNode(NavigationBarHide))
+
  for (var j=0; j < NavFrame.childNodes.length; j++)
+
    if (hasClass(NavFrame.childNodes[j], 'NavHead'))
+
      NavFrame.childNodes[j].appendChild(a)
+
  colNavs[navIdx++] = NavFrame
+
}
+
for (i=0; i < navIdx; i++)
+
  if ((navIdx > NavigationBarShowDefault && !hasClass(colNavs[i], 'expanded')) || hasClass(colNavs[i], 'collapsed'))
+
    collapseDiv(i)
+
}
+
+
function collapseDiv(idx) {
+
var div = document.getElementById('NavFrame' + idx)
+
var btn = document.getElementById('NavToggle' + idx)
+
if (!div || !btn) return false
+
var isShown = (btn.firstChild.data == NavigationBarHide)
+
btn.firstChild.data = isShown ? NavigationBarShow : NavigationBarHide
+
var disp = isShown ? 'none' : 'block'
+
for (var child = div.firstChild;  child != null;  child = child.nextSibling)
+
  if (hasClass(child, 'NavPic') || hasClass(child, 'NavContent'))
+
      child.style.display = disp
+
}
+
+
+
+
//Execution
+
+
if (wgCanonicalNamespace == 'Special'){
+
+
if (/^(Uplo|Sear|Stat|Spec|Abus|Prefe|Move|Watch|Newp)/i.test(wgCanonicalSpecialPageName))
+
  importMW(wgCanonicalSpecialPageName)
+
+
}else switch (wgAction){
+
+
case 'history': importMW('History'); break
+
+
case 'delete': importMW('Deletepage'); break
+
+
case 'edit': case 'submit': importMW('Editpage') //and continue with the default: view, purge
+
+
default:
+
+
  $(editZeroSection)
+
  addOnloadHook(collapsibleDivs)
+
  addOnloadHook(collapsibleTables)
+
  mw.loader.load('//meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&action=raw&ctype=text/javascript&smaxage=21600&maxage=86400')
+
  if( wgServer == 'https://secure.wikimedia.org' )  
+
    importScript('MediaWiki:Common.js/secure.js','en')
+
  else if( document.location && document.location.protocol == 'https:' )
+
    importScript('MediaWiki:Common.js/secure new.js', 'en')
+
  if (navigator.platform.indexOf('Win') != -1)
+
    importStylesheetURI('//en.wikipedia.org/w/index.php?title=MediaWiki:Common.css/WinFixes.css&action=raw&ctype=text/css')
+
+
  switch( wgNamespaceNumber ){
+
    case 0: case 100:
+
      $(LinkFA)
+
      importMW('Osm')
+
      importMW('Collapserefs')
+
      if( wgArticleId==4401 ) importMW('Mainpage')
+
      break
+
    case 6:
+
      importMW('Filepage')
+
      break
+
  }  
+
+
 
}
 
}
  
+
if ( extraJS ) {
if( wgUserName ){
+
if ( extraJS.match( /^MediaWiki:[^&<>=%#]*\.js$/ ) ) {
  if( wgNamespaceNumber==2 && wgTitle.indexOf(wgUserName)==0 && wgArticleId==0 && /\/skin\.(js|css)$/.test(wgTitle) )
+
mw.loader.load( '/w/index.php?title=' + extraJS + '&action=raw&ctype=text/javascript' );
    window.location.href = window.location.href.replace(/skin\.(css|js)$/, skin+'.$1')
+
} else {
}else{ //hide FlaggedRevs
+
mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withJS value' } );
  mw.util.addCSS('#mw-fr-revisiontag {display:none}')
+
}
 
}
 
}
 
 
// ВП:СО, кроме статей  В Контакте, Одноклассники и Facebook
 
if (wgArticleId!=639373 && wgArticleId!=932117 && wgArticleId!=1297302 && wgArticleId!=25133866)
 
importMW('Wikibugs')
 
 
 
// iwiki sorting
 
if (!wgUserName
 
    || (wgUserName
 
        && (((typeof wgLangPrefs == 'undefined') ? false : true)
 
            || ((typeof wgAddLangHints == 'undefined') ? false : wgAddLangHints)
 
            || ((typeof wgUseUserLanguage == 'undefined') ? false : wgUseUserLanguage))))
 
    importMW('Interwiki-links');
 
 
 
//extra scripts
 
 
var withJS = document.URL.match(/[&?]withjs=((mediawiki:)?([^&#]+))/i)
 
if( withJS ) importScript_('MediaWiki:'+withJS[3])
 
 
var execJS = document.getElementById('executeJS')
 
if( execJS )
 
$.each( execJS.className.split(' '), function(i, sc){
 
    sc = $.trim( sc.replace(/[^\w ]/g,'') )
 
    if( sc ) importMW('Script/' + sc)
 
  })
 
  
/* ***  Отрисовка геокарт [[WikiLeaflet]]  спиз**но! *** */
+
/**
+
* WikiMiniAtlas
LeafletRoot = '/sinpedia/leaflet/';
+
*
$(function(){
+
  * Description: WikiMiniAtlas is a popup click and drag world map.
  if ($('.wikileaf').length !== 0){
+
*              This script causes all of our coordinate links to display the WikiMiniAtlas popup button.
      var WikiLeafletURL = wgScriptPath + '/index.php?title=' +
+
*              The script itself is located on meta because it is used by many projects.
            escape( 'MediaWiki:WikiLeaflet.js' ) +
+
*              See [[Meta:WikiMiniAtlas]] for more information.
            '&action=raw&ctype=text/javascript&dontcountme=s';
+
  * Note - use of this service is recommended to be repalced with mw:Help:Extension:Kartographer
+
*/
      importStylesheet(LeafletRoot + 'leaflet.css');
+
( function () {
      if ($.browser.msie && ($.browser.version < 9)){
+
var require_wikiminiatlas = false;
        importStylesheet(LeafletRoot + 'leaflet.ie.css');
+
var coord_filter = /geohack/;
      }
+
$( function () {
      $.ajax({
+
$( 'a.external.text' ).each( function( key, link ) {
        url: LeafletRoot + 'leaflet.js',
+
if ( link.href && coord_filter.exec( link.href ) ) {
        dataType: 'script',
+
require_wikiminiatlas = true;
        cache: true,
+
// break from loop
        success: function(){
+
return false;
            $.ajax({
+
}
              url: WikiLeafletURL,
+
} );
              dataType: 'script',
+
if ( $( 'div.kmldata' ).length ) {
              cache: true,
+
require_wikiminiatlas = true;
              success: function(){
+
}
                  wlRender();
+
if ( require_wikiminiatlas ) {
              }
+
mw.loader.load( '//meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&action=raw&ctype=text/javascript' );
            });
+
}
        }
+
} );
      });
+
} )();
  }
+
});
+
  
function ModifySidebar(action, section, name, link) {
+
/**
    try {
+
* Collapsible tables
        switch (section) {
+
*
          case "languages":
+
* Allows tables to be collapsed, showing only the header. See [[Help:Collapsing]].
            var target = "p-lang";
+
*
            break;
+
* @version 2.0.3 (2014-03-14)
          case "toolbox":
+
* @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-collapsibleTables.js
            var target = "p-tb";
+
* @author [[User:R. Koot]]
            break;
+
* @author [[User:Krinkle]]
          case "navigation":
+
* @deprecated Since MediaWiki 1.20: Use class="mw-collapsible" instead which
            var target = "p-navigation";
+
* is supported in MediaWiki core.
            break;
+
*/
          default:
+
 
            var target = "p-" + section;
+
var autoCollapse = 2;
            break;
+
var collapseCaption = 'hide';
        }
+
var expandCaption = 'show';
+
var tableIndex = 0;
        if (action == "add") {
+
 
            var node = document.getElementById(target)
+
function collapseTable( tableIndex ) {
                              .getElementsByTagName('div')[0]
+
var Button = document.getElementById( 'collapseButton' + tableIndex );
                              .getElementsByTagName('ul')[0];
+
var Table = document.getElementById( 'collapsibleTable' + tableIndex );
+
 
            var aNode = document.createElement('a');
+
if ( !Table || !Button ) {
            var liNode = document.createElement('li');
+
return false;
+
}
            aNode.appendChild(document.createTextNode(name));
+
 
            aNode.setAttribute('href', link);
+
var Rows = Table.rows;
            if(link == "http://синклитъ.рф/Гоблины")
+
var i;
            {
+
var $row0 = $(Rows[0]);
                aNode.setAttribute('style', 'color: #006400;');
+
 
            }
+
if ( Button.firstChild.data === collapseCaption ) {
            liNode.appendChild(aNode);
+
for ( i = 1; i < Rows.length; i++ ) {
            liNode.className='plainlinks';
+
Rows[i].style.display = 'none';
            node.appendChild(liNode);
+
}
        }
+
Button.firstChild.data = expandCaption;
+
} else {
        if (action == "remove") {
+
for ( i = 1; i < Rows.length; i++ ) {
            var list = document.getElementById(target)
+
Rows[i].style.display = $row0.css( 'display' );
                              .getElementsByTagName('div')[0]
+
}
                              .getElementsByTagName('ul')[0];
+
Button.firstChild.data = collapseCaption;
+
}
            var listelements = list.getElementsByTagName('li');
+
+
            for (var i = 0; i < listelements.length; i++) {
+
                if (listelements[i].getElementsByTagName('a')[0].innerHTML == name ||
+
                    listelements[i].getElementsByTagName('a')[0].href == link) {
+
+
                    list.removeChild(listelements[i]);
+
                }
+
            }
+
        }
+
+
    } catch(e) {
+
      // lets just ignore what's happened
+
      return;
+
    }
+
 
}
 
}
+
 
function CustomizeModificationsOfSidebar() {
+
function createClickHandler( tableIndex ) {
    //adds [[Special:CategoryTree]] to toolbox
+
return function ( e ) {
    //ModifySidebar("add", "", "CategoryTree", "http://en.wikipedia.org/wiki/Special:CategoryTree");
+
e.preventDefault();
    ModifySidebar("add", ".D0.A1.D0.B8.D0.BD.D0.BA.D0.BB.D0.B8.D1.82.D0.AA", "Гоблины", "http://синклитъ.рф/Гоблины");
+
collapseTable( tableIndex );
    //removes [[Special:Upload]] from toolbox
+
};
    //ModifySidebar("remove", "toolbox", "Upload file", "http://en.wikipedia.org/wiki/Special:Upload");
+
 
}
 
}
 
addOnloadHook(CustomizeModificationsOfSidebar);
 
       
 
insertVkontaktePlugins()
 
  
 +
function createCollapseButtons( $content ) {
 +
var NavigationBoxes = {};
 +
var $Tables = $content.find( 'table' );
 +
var i;
  
function insertVkontaktePlugins()
+
$Tables.each( function( i, table ) {
{
+
if ( $(table).hasClass( 'collapsible' ) ) {
    if($('#vk_groups').length > 0)
+
    {
+
        addOnloadHook(insertVkontaktePluginGroup);   
+
    }
+
    if($('#vk_groups_transport').length > 0)
+
    {
+
        addOnloadHook(insertVkontaktePluginTransportGroup);   
+
    }
+
  
    if($('.vk_user').length > 0)
+
/* only add button and increment count if there is a header row to work with */
    {
+
var HeaderRow = table.getElementsByTagName( 'tr' )[0];
        addOnloadHook(insertVkontakteBadges);  
+
if ( !HeaderRow ) {
    }
+
return;
 +
}
 +
var Header = table.getElementsByTagName( 'th' )[0];
 +
if ( !Header ) {
 +
return;
 +
}
  
   
+
NavigationBoxes[ tableIndex ] = table;
    if($('#vk_subscribe').length > 0)
+
table.setAttribute( 'id', 'collapsibleTable' + tableIndex );
    {
+
        addOnloadHook(insertVkontaktePluginSubscribe);   
+
    }
+
    if($('#vk_like').length > 0)
+
    {
+
        addOnloadHook(insertVkontaktePluginLikeIt);   
+
    } 
+
    if($('#vk_recommended').length > 0)
+
    {
+
        addOnloadHook(insertVkontaktePluginRecommended);  
+
    }   
+
}
+
  
function insertVkontaktePluginGroup()
+
var Button    = document.createElement( 'span' );
{
+
var ButtonLink = document.createElement( 'a' );
    VK.Widgets.Group("vk_groups", {mode: 2, width: "450", height: "450"}, 1979288);
+
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 );
  
function insertVkontaktePluginTransportGroup()
+
Button.appendChild( document.createTextNode( '[' ) );
{
+
Button.appendChild( ButtonLink );
    VK.Widgets.Group("vk_groups_transport", {mode: 2, width: "350", height: "450"}, 56893253);
+
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;
 +
}
 +
}
 +
}
 +
}
 
}
 
}
  
function insertVkontaktePluginSubscribe()
+
mw.hook( 'wikipage.content' ).add( createCollapseButtons );
{
+
 
    var id = parseInt($('#vk_subscribe').text()); // All ok, no injection here
+
/**
    $('#vk_subscribe').text('');
+
* Add support to mw-collapsible for autocollapse, innercollapse and outercollapse
    VK.Widgets.Subscribe("vk_subscribe", {}, id);  
+
*
 +
* 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' );
 +
}
 +
}
 +
} );
 
}
 
}
  
function insertVkontakteBadges()
+
mw.hook( 'wikipage.collapsibleContent' ).add( mwCollapsibleSetup );
{
+
 
    $('.vk_user').each(function(index)
+
/**
    {
+
* Dynamic Navigation Bars (experimental)
        var id = parseInt($(this).text());  
+
*
        $(this).text('');
+
* Description: See [[Wikipedia:NavFrame]].
        $(this).attr("id", $(this).attr("id") + index);
+
* Maintainers: UNMAINTAINED
        insertVkontakteUserBadge(index, id);
+
*/
    } );
+
 
 +
/* 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 );
 +
}
 +
} );
 
}
 
}
  
function insertVkontakteUserBadge(uid, id)
+
mw.hook( 'wikipage.content' ).add( createNavigationBarToggleButton );
{
+
 
    var target = "vk_user_" + id + uid;
+
/**
    VK.Widgets.Subscribe(target, {}, id);  
+
* 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;
 +
}
 +
}
 
}
 
}
  
function insertVkontaktePluginLikeIt()
+
$(uploadwizard_newusers);
{
+
 
    VK.init({apiId: 3317111, onlyWidgets: true});
+
/**
    VK.Widgets.Like("vk_like", {type: "full", height: 24}, wgArticleId);
+
* Magic editintros ****************************************************
}
+
*
function insertVkontaktePluginRecommended()
+
* Description: Adds editintros on disambiguation pages and BLP pages.
{
+
* Maintainers: [[User:RockMFR]]
    VK.init({apiId: 3317111, onlyWidgets: true});
+
*/
    VK.Widgets.Recommended("vk_recommended", {limit: 10, period: 'month'});
+
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 ) {
$(document).ready(function ()  
+
$( function () {
{
+
if ( document.getElementById( 'disambigbox' ) ) {
  var page = window.location.protocol + '//' + window.location.host;
+
addEditIntro( 'Template:Disambig_editintro' );
  var generator = $('#ar-link_generator');
+
}
  if(generator.length > 0) {
+
} );
    generator.append("<tr> \
+
        <td class='ar-type'><select class='ar-type'><option>Статья</option><option>Игра</option>\
+
          <option>Турнир</option><option>Фестиваль</option><option>Сбор</option></select></td>\
+
        <td class='ar-name'><input type='text' class='ar-name'></td>\
+
        <td class='ar-year'><input type='text' class='ar-year'></td>\
+
        <td class='ar-region'><input type='text' class='ar-region'></td>\
+
        <td> \
+
          <div id='ar-resulted_link' style='height:1.4em; padding: 1px 6px 1px 4px; border: 1px solid green'>&nbsp;</div>\
+
        </td>\
+
        </tr>");
+
    var hidable = generator.find('td.ar-year, td.ar-region');
+
    hidable.toggle(false);
+
  
    var name_input = generator.find('input.ar-name');
+
$( function () {
    var year_input = generator.find('input.ar-year');
+
var cats = mw.config.get('wgCategories');
    var region_input = generator.find('input.ar-region');
+
if ( !cats ) {
    var type = generator.find('select.ar-type');
+
return;
 +
}
 +
if ( $.inArray( 'Living people', cats ) !== -1 || $.inArray( 'Possibly living people', cats ) !== -1 ) {
 +
addEditIntro( 'Template:BLP_editintro' );
 +
}
 +
} );
 +
}
  
    function generatePageLink() {
+
/* Actions specific to the edit page */
        var name = name_input.val();
+
if ( mw.config.get( 'wgAction' ) === 'edit' || mw.config.get( 'wgAction' ) === 'submit' ) {
        var href = page + '/';
+
/**
        if(name == 'undefined' || name.length == 0) {
+
* Fix edit summary prompt for undo
          $('#ar-resulted_link').html('&nbsp;');
+
*
          return true;
+
*  Fixes the fact that the undo function combined with the "no edit summary prompter"
        }
+
*  complains about missing editsummary, if leaving the edit summary unchanged.
        if(type.prop('selectedIndex') > 0) {
+
*  Added by [[User:Deskana]], code by [[User:Tra]].
          var year = year_input.val();
+
*  See also [[phab:T10912]].
          var region = region_input.val();
+
*/
          href += type.val() + ' ' + name + ( year.length > 0 ? ', ' + year : '') + (region.length > 0 ? ' (' + region + ')' : '');
+
$(function () {
        }
+
if (document.location.search.indexOf('undo=') !== -1 && document.getElementsByName('wpAutoSummary')[0]) {
        else {
+
document.getElementsByName('wpAutoSummary')[0].value = '1';
          href += name;
+
}
        }
+
});
        $('#ar-resulted_link').html('<a href="' + href  + '">' + name + '</a>');
+
}
    }
+
    type.change(function() {
+
        hidable.toggle(this.selectedIndex > 0);
+
        generatePageLink();
+
    });
+
    generator.keyup(generatePageLink);
+
  }
+
  
  //Achievements
+
/* End of mw.loader.using callback */
  function getIcon(link) {
+
} );
        if(link !== null && link !== '')
+
/* DO NOT ADD CODE BELOW THIS LINE */
            return "<img src='" + link + "'/>";
+
        return '';
+
  }
+
  $('.ar-achieve').each(function() {
+
    var $this = $(this);
+
    var link = page + '/ach/getAchievement.php?name=' + $this.find('.ar-title').html();
+
    console.log($this);
+
    $.getJSON(link, function(responce, status, xmlhr) {
+
        $this.addClass('ar-achieve-' + responce['style']);
+
        $this.children('.ar-image').html(getIcon(responce['icon']));
+
        $this.children('.ar-level').html(Math.abs(responce['level']));
+
        $this.find('.ar-description').html(responce['description']);
+
        $this.find('.ar-title').html(responce['name']);
+
        $this.show(true);
+
    });
+
  });
+
});
+

Версия 02:28, 29 января 2018

/**
 * 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'] ).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.
 * Note - use of this service is recommended to be repalced with mw:Help:Extension:Kartographer
 */
( 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' );
		}
	} );
}
 
/* Actions specific to the edit page */
if ( mw.config.get( 'wgAction' ) === 'edit' || mw.config.get( 'wgAction' ) === 'submit' ) {
	/**
	 * Fix edit summary prompt for undo
	 *
	 *  Fixes the fact that the undo function combined with the "no edit summary prompter"
	 *  complains about missing editsummary, if leaving the edit summary unchanged.
	 *  Added by [[User:Deskana]], code by [[User:Tra]].
	 *  See also [[phab:T10912]].
	 */
	$(function () {
		if (document.location.search.indexOf('undo=') !== -1 && document.getElementsByName('wpAutoSummary')[0]) {
			document.getElementsByName('wpAutoSummary')[0].value = '1';
		}
	});
}
 
/* End of mw.loader.using callback */
} );
/* DO NOT ADD CODE BELOW THIS LINE */