Чемпион Южной Америки 1916 Чемпион Южной Америки 1917 Чемпион Южной Америки 1920 Чемпион Южной Америки 1923 Олимпийский чемпион и чемпион мира среди любителей 1924 Чемпион Южной Америки 1924 Чемпион Южной Америки 1926 Олимпийский чемпион и чемпион мира среди любителей 1928 Чемпион мира 1930 Чемпион Южной Америки 1935 Чемпион Южной Америки 1942 Чемпион мира 1950 Чемпион Южной Америки 1956 Чемпион Южной Америки 1959 (Эквадор) Чемпион Южной Америки 1967 Победитель Мундиалито 1980-81 Победитель Кубка Америки 1983 Победитель Кубка Америки 1987 Победитель Кубка Америки 1995 Победитель Кубка Америки 2011

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

Материал из CelestePedia
Перейти к: навигация, поиск
 
(не показано 12 промежуточных версий этого же участника)
Строка 1: Строка 1:
// подключение загрузчика карт "Google maps"
+
/*if ( $.inArray( mw.config.get( 'wgAction' ), ['edit', 'submit'] ) !== -1 ) {
var gm2wiki_language = "RU"; // RU/EN value correct only
+
        mw.loader.load( '/mediawiki/index.php?title=MediaWiki:Gadget-wikificator.js&action=raw&ctype=text/javascript' );
document.write('<script type="text/javascript" src="http://ru.gm2.wikia.com/index.php?title=MediaWiki:GmapsLoader.js&action=raw&ctype=text/javascript&dontcountme=s"></script>');
+
}
  
//See http://ru.wikipedia.org/wiki/project:code
+
var customizeToolbar = function() {
 +
 
 +
$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
 +
        'section': 'advanced',
 +
        'group': 'format',
 +
        'tools': {
 +
                'wikify': {
 +
                        label: 'Викификатор',
 +
                        type: 'button',
 +
                        icon: '//upload.wikimedia.org/wikipedia/commons/0/06/Wikify-toolbutton.png',
 +
                            action: {
 +
                                  type: 'callback',
 +
                                      execute: function(context){
 +
                                              Wikify();
 +
                                      }
 +
                            }
 +
                }
 +
        }
 +
} );
 +
};
 
   
 
   
importScript_ = importScript
+
if ( $.inArray( mw.config.get( 'wgAction' ), ['edit', 'submit'] ) !== -1 ) {
importScript = function (page, proj){
+
        mw.loader.using( 'user.options', function () {
if (!proj) importScript_(page)
+
                if ( mw.user.options.get('usebetatoolbar') ) {
else {
+
                        mw.loader.using( 'ext.wikiEditor.toolbar', function () {
  if (proj.indexOf('.')==-1) proj += '.wikipedia.org'
+
                                $(document).ready( customizeToolbar );
  importScriptURI('http://'+proj+'/w/index.php?action=raw&ctype=text/javascript&title='+encodeURIComponent(page.replace(/ /g,'_')))
+
                        } );
}
+
                }
 +
        } );
 
}
 
}
+
*/
function LinkFA(){
+
/*
var pLang = document.getElementById('p-lang')
+
var importScript_ = importScript;
if (!pLang) return
+
importScript = function ( page, proj ) {
var list = {
+
if ( !proj ) {
'fa':'Эта статья является избранной',
+
importScript_( page );
'fl':'Этот список или портал является избранным',
+
} else {
'ga':'Эта статья является хорошей'}
+
if ( proj.indexOf( '.' ) === -1 ) {
var iw = pLang.getElementsByTagName('li')
+
proj += 'celeste-rus.ru';
for (var i=0; i<iw.length; i++)
+
}
  for (var s in list)
+
mw.loader.using( 'mediawiki.util' ).done( function () {
    if (document.getElementById(iw[i].className+'-'+s)){
+
mw.loader.load( 'https://' + proj + '/mediawiki/index.php?title=' + mw.util.wikiUrlencode( page ) +
      iw[i].className += ' ' + s.toUpperCase()
+
'&action=raw&ctype=text/javascript' );
      iw[i].title = list[s] + ' в другом языковом разделе'
+
} );
    }
+
}
 +
};
 +
*/
 +
importScript = function ( page, proj ) {
 +
mw.loader.using( 'mediawiki.util' ).done( function () {
 +
mw.loader.load( 'https://celeste-rus.ru/index.php?title=' + mw.util.wikiUrlencode( page ) +
 +
'&action=raw&ctype=text/javascript' );
 +
} );
 +
};
 +
 
 +
function runAsEarlyAsPossible( callback, $testElement, func ) {
 +
func = func || $;
 +
$testElement = $testElement || $( '#footer' );
 +
 
 +
if ( $testElement.length ) {
 +
callback();
 +
} else {
 +
func( callback );
 +
}
 
}
 
}
   
+
 
   
+
/**
function icqIcons(){
+
  * Настройка обработки «е» и «ё» при сортировке в таблицах
var a, spans = document.getElementById('content').getElementsByTagName('span')
+
  */
for (var i=0; a=spans[i]; i++)
+
mw.config.set( 'tableSorterCollation', { 'Ё': 'Е', 'ё': 'е' } );
  if (a.className == 'ICQ')
+
 
    a.style.backgroundImage = "url('http://status.icq.com/online.gif?icq="+a.id+"&img=5&randseed="+Math.floor(Math.random()*10000000)+"')"
+
// Messages
 +
var expandCaption, collapseCaption, zeroSectionTip;
 +
if ( mw.config.get( 'wgUserLanguage' ) === 'en' ) {
 +
expandCaption = 'show';
 +
collapseCaption = 'hide';
 +
zeroSectionTip = 'Edit lead section';
 +
} else {
 +
expandCaption = 'показать';
 +
collapseCaption = 'скрыть';
 +
zeroSectionTip = 'Править преамбулу';
 
}
 
}
+
 
+
// Collapsiblе: [[:ru:ВП:СБ]]
function newSectionLink(){
+
 
var plus = document.getElementById('ca-addsection')
+
var NavigationBarShowDefault;
if (!plus) return
+
if ( typeof NavigationBarShowDefault === 'undefined' ) {
var custom = document.getElementById('add-custom-section')
+
NavigationBarShowDefault = 1;
if (!custom) return
 
plus.firstChild.setAttribute('href', custom.getElementsByTagName('a')[0].href)
 
 
}
 
}
+
 
+
// table.collapsible
function editZeroSection(){
+
// collapsibleTablesItrIdx - временное решение, чтобы не дублировались id,
var body = document.getElementById('bodyContent')
+
// если во время срабатывания хука 'wikipage.content' добавляются новые сворачиваемые блоки
if (!body) return
+
var collapsibleTablesItrIdx = 0;
var h2s = body.getElementsByTagName('H2')
+
var h2 = h2s[0]
+
function collapsibleTables( $content ) {
if (!h2) return
+
var $btn,
if (h2.parentNode.id == 'toctitle') h2 = h2s[1]
+
$a,
if (!h2) return
+
tblIdx = collapsibleTablesItrIdx,
var span = h2.firstChild
+
navboxCount = 0,
if (!span || span.className != 'editsection') return
+
notNavboxCount = 0,
var zero = span.cloneNode(true)
+
colTables = [],
body.insertBefore(zero, body.firstChild)
+
$Tables = $content.find( 'table' );
var a = zero.getElementsByTagName('a')[0]
+
 
if (a.href.indexOf('&section=T') == -1 ) a.title = a.title.replace(/:.*$/,': 0')
+
$Tables.each( function ( i, table ) {
else a.title = 'Править секцию: 0'
+
if ( $( table ).hasClass( 'collapsible' ) ) {
a.setAttribute('href', wgScript + '?title='+encodeURIComponent(wgPageName) + '&action=edit&section=0')
+
var $table = $( this ),
 +
$row = $table.find( 'tr' ).first(),
 +
$cell = $row.find( 'th' ).first();
 +
if ( !$cell.length ) {
 +
return;
 +
}
 +
$table.attr( 'id', 'collapsibleTable' + tblIdx );
 +
$btn = $( '<span>' ).addClass( 'collapseButton' );
 +
$a = $( '<a>' )
 +
.attr( 'id', 'collapseButton' + tblIdx )
 +
.attr( 'href', 'javascript:collapseTable(' + tblIdx + ');' )
 +
// Изменяем цвет ссылки, только если цвет текста в навбоксе нестандартный
 +
.css( 'color', $cell.css( 'color' ) === $( '.mw-body' ).css( 'color' ) ? 'auto' :
 +
$cell.css( 'color' ) )
 +
.text( collapseCaption );
 +
$btn
 +
.append( '[' )
 +
.append( $a )
 +
.append( ']' );
 +
if ( $cell.contents().length ) {
 +
$btn.insertBefore( $cell.contents().first() );
 +
} else {
 +
$btn.appendTo( $cell );
 +
}
 +
// hasClass( 'navbox' ) — временное решение для навшаблонов, ещё не переведённых
 +
// на {{Навигационная таблица}} (также ниже)
 +
if ( $table.hasClass( 'navbox-inner' ) || $table.hasClass( 'navbox' ) ) {
 +
navboxCount++;
 +
} else {
 +
notNavboxCount++;
 +
}
 +
colTables[tblIdx++] = $table;
 +
}
 +
} );
 +
for ( var i = collapsibleTablesItrIdx; i < tblIdx; i++ ) {
 +
if ( colTables[i].hasClass( 'collapsed' ) ||
 +
( colTables[i].hasClass( 'autocollapse' ) &&
 +
( ( ( colTables[i].hasClass( 'navbox-inner' ) || colTables[i].hasClass( 'navbox' ) ) &&
 +
navboxCount > NavigationBarShowDefault ) ||
 +
( !( colTables[i].hasClass( 'navbox-inner' ) || colTables[i].hasClass( 'navbox' ) ) &&
 +
notNavboxCount > NavigationBarShowDefault ) ) ) )
 +
{
 +
collapseTable( i );
 +
}
 +
}
 +
collapsibleTablesItrIdx = tblIdx;
 +
// Нужно переписать код на "mw-collapsible", и заменить использование хука на "wikipage.collapsibleContent"
 +
mw.hook( 'common.collapsibleContent' ).fire( colTables );
 
}
 
}
+
 
+
mw.hook( 'wikipage.content' ).add( collapsibleTables );
+
 
+
function collapseTable( idx ) {
//Collapsiblе: [[ВП:СБ]]
+
var $table = $( '#collapsibleTable' + idx ),
+
$rows = $table.children().children( 'tr' ),
var NavigationBarShowDefault = 2
+
$btn = $( '#collapseButton' + idx );
var NavigationBarHide = '[скрыть]'
+
if ( !$table.length || !$rows.length || !$btn.length ) {
var NavigationBarShow = '[показать]'
+
return false;
+
}
var hasClass = (function (){
+
 
var reCache = {}
+
var isExpanded = ( $btn.text() === collapseCaption ),
return function (element, className){
+
cssDisplay = isExpanded ? 'none' : $rows.first().css( 'display' );
  return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className)
+
 
  }
+
$btn.text( isExpanded ? expandCaption : collapseCaption );
})()
+
$rows.slice( 1 ).each( function () {
+
$( this ).css( 'display', cssDisplay );
function collapsibleTables(){
+
} );
var Table, HRow,  HCell, btn, a, tblIdx = 0, colTables = []
 
var allTables = document.getElementsByTagName('table')
 
for (var i=0; Table = allTables[i]; i++){
 
  if (!hasClass(Table, 'collapsible')) continue
 
  if (!(HRow=Table.rows[0])) continue
 
  if (!(HCell=HRow.getElementsByTagName('th')[0])) continue
 
  Table.id = 'collapsibleTable' + tblIdx
 
  btn = document.createElement('span')
 
  btn.style.cssText = 'float:right; font-weight:normal; font-size:smaller'
 
  a = document.createElement('a')
 
  a.id = 'collapseButton' + tblIdx
 
  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){
+
// div.NavFrame
var Table = document.getElementById('collapsibleTable' + idx)
+
var navFrameExpandCaption = '[' + expandCaption + ']',
var btn = document.getElementById('collapseButton' + idx)
+
navFrameCollapseCaption = '[' + collapseCaption + ']';
if (!Table || !btn) return false
+
 
var Rows = Table.rows
+
// Изолируем код из глобальной области видимости
var isShown = (btn.firstChild.data == NavigationBarHide)
+
( function () {
btn.firstChild.data = isShown ?  NavigationBarShow : NavigationBarHide
+
function collapsibleDivs( $content ) {
var disp = isShown ? 'none' : Rows[0].style.display
+
var navFrameIndex = 0,
for (var i=1; i < Rows.length; i++)  
+
navFrames = [],
    Rows[i].style.display = disp
+
i;
 +
 
 +
$content.find( 'div' ).each( function () {
 +
var $div = $( this );
 +
if ( $div.hasClass( 'NavFrame' ) ) {
 +
var $btn = $( '<a>' )
 +
.addClass( 'NavToggle' )
 +
.attr( 'href', 'javascript:' )
 +
.text( navFrameCollapseCaption )
 +
.click( navToggleClickHandler );
 +
$div.children( '.NavHead' ).append( $btn );
 +
navFrames[ navFrameIndex++ ] = $div;
 +
}
 +
} );
 +
for ( i = 0; i < navFrameIndex; i++ ) {
 +
if ( navFrames[ i ].hasClass( 'collapsed' ) ||
 +
( navFrameIndex > NavigationBarShowDefault &&
 +
!navFrames[ i ].hasClass( 'expanded' )
 +
)
 +
) {
 +
toggleDiv( navFrames[ i ] );
 +
}
 +
}
 +
}
 +
 
 +
mw.hook( 'wikipage.content' ).add( collapsibleDivs );
 +
 
 +
function navToggleClickHandler() {
 +
var $btn = $( this );
 +
toggleDiv( $btn.closest( '.NavFrame' ), $btn );
 +
}
 +
 
 +
function toggleDiv( $div, $btn ) {
 +
$btn = $btn || $div.find( '.NavToggle' ).first();
 +
if ( !$div.length || !$btn.length ) return false;
 +
var isExpanded = ( $btn.text() === navFrameCollapseCaption );
 +
$btn.text( isExpanded ? navFrameExpandCaption : navFrameCollapseCaption );
 +
$div.children( '.NavContent, .NavPic' ).each( function () {
 +
$( this ).css( 'display', isExpanded ? 'none' : 'block' );
 +
} );
 +
}
 +
 
 +
/**
 +
* Загрузка скриптов через систему подгаджетов
 +
*/
 +
var namespaceNumber = mw.config.get( 'wgNamespaceNumber' );
 +
 
 +
// Скрипты для служебных страниц
 +
if ( namespaceNumber === -1 ) {
 +
var specialGadgets = [
 +
'Abusefilter',
 +
'Block',
 +
'Log',
 +
'Movepage',
 +
'Newpages',
 +
'Search',
 +
'Upload'
 +
];
 +
var canonicalSpecialPageName = mw.config.get( 'wgCanonicalSpecialPageName' );
 +
if ( specialGadgets.indexOf( canonicalSpecialPageName ) > -1 ) {
 +
mw.loader.load( 'ext.gadget.common-special-' + canonicalSpecialPageName.toLowerCase() );
 +
}
 +
} else {
 +
// Скрипты для действий
 +
var action = mw.config.get( 'wgAction' );
 +
var actionGadgets = {
 +
'edit': [ 'ext.gadget.common-action-edit', 'ext.gadget.wikificator', 'ext.gadget.summaryButtons' ]
 +
};
 +
actionGadgets[ 'submit' ] = actionGadgets[ 'edit' ];
 +
 
 +
if ( actionGadgets[ action ] ) {
 +
mw.loader.load( actionGadgets[ action ] );
 +
}
 +
 
 +
// Скрипты для пространств
 +
var namespaceGadgets = {
 +
6: [ 'ext.gadget.common-namespace-file' ]
 +
};
 +
 
 +
if ( namespaceGadgets[ namespaceNumber ] ) {
 +
mw.loader.load( namespaceGadgets[ namespaceNumber ] );
 +
}
 +
}
 +
}() );
 +
 
 +
/**
 +
* Старые коды
 +
*/
 +
if ( navigator.platform.indexOf( 'Win' ) !== -1 ) {
 +
mw.loader.using( 'mediawiki.util' ).done( function () {
 +
mw.util.addCSS( '.IPA, .Unicode { font-family: "Arial Unicode MS", "Lucida Sans Unicode"; }' );
 +
} );
 
}
 
}
+
 
function collapsibleDivs(){
+
// Закрываем меню при клике за его пределами
var navIdx = 0, colNavs = [], i, NavFrame
+
mw.hook( 'wikipage.content' ).add( function () {
var divs = document.getElementById('content').getElementsByTagName('div')
+
var $items =  $( '.main-footer-menuToggle' ),
for (i=0; NavFrame = divs[i]; i++) {
+
$target;
  if (!hasClass(NavFrame, 'NavFrame')) continue
+
  NavFrame.id = 'NavFrame' + navIdx
+
document.body.addEventListener( 'click', function ( event ) {
  var a = document.createElement('a')
+
    $target = $( event.target ).parents( '.main-footer-menuToggle' )[0];
  a.className = 'NavToggle'
+
    $items.each( function () {
  a.id = 'NavToggle' + navIdx
+
        if( this !== $target && !$( this ).hasClass( 'mw-collapsible-toggle-collapsed' ) ) {
  a.href = 'javascript:collapseDiv(' + navIdx + ');'
+
            $( this ).click();
  a.appendChild(document.createTextNode(NavigationBarHide))
+
        }
  for (var j=0; j < NavFrame.childNodes.length; j++)
+
    } );
    if (hasClass(NavFrame.childNodes[j], 'NavHead'))
+
}, true );
      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)
+
  * Выполнение скриптов из пространства MediaWiki, указанных в URL
  var btn = document.getElementById('NavToggle' + idx)
+
  * См. также https://www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL
  if (!div || !btn) return false
+
  */
var isShown = (btn.firstChild.data == NavigationBarHide)
+
var withJS = location.href.match( /[&?]withjs=((mediawiki:)?([^&#]+))/i );
btn.firstChild.data = isShown ? NavigationBarShow : NavigationBarHide
+
if ( withJS ) {
var disp = isShown ? 'none' : 'block'
+
//importScript_( 'MediaWiki:' + withJS[3] );
for (var child = div.firstChild; child != null;  child = child.nextSibling)
+
importScript( 'MediaWiki:' + withJS[3] );
  if (hasClass(child, 'NavPic') || hasClass(child, 'NavContent'))
 
      child.style.display = disp
 
 
}
 
}
   
+
 
   
+
/**
//Execution
+
  * Код, который нужно выполнить как можно раньше. Он выполняется, если загружен подвал страницы,
if (wgCanonicalNamespace == 'Special'){
+
  * иначе же ждёт наступления события wikipage.content (см. выше определение runAsEarlyAsPossible
  if (/^(Uplo|Sear|Stat|Spec|Abus)/i.test(wgCanonicalSpecialPageName))
+
* и ниже про wikipage.content).
    importScript_('MediaWiki:'+wgCanonicalSpecialPageName+'.js')
+
*/
}else if (wgAction != 'history'){
+
runAsEarlyAsPossible( function () {
  addOnloadHook(editZeroSection)
+
/**
  addOnloadHook(collapsibleDivs)
+
* {{выполнить скрипт}}
  addOnloadHook(collapsibleTables)
+
*/
  importScript('MediaWiki:Wikiminiatlas.js', 'meta.wikimedia.org')
+
$( '.executeJS' ).each( function () {
  if (navigator.appName=='Microsoft Internet Explorer' && document.createStyleSheet)
+
var names = $( this ).data( 'scriptnames' );
    document.createStyleSheet().addRule('.IPA', 'font-family: "Doulos SIL", "Charis SIL", Gentium, "DejaVu Sans", Code2000, "TITUS Cyberbit Basic", "Arial Unicode MS", "Lucida Sans Unicode", "Chrysanthi Unicode";')
+
if (names) {
  if (wgNamespaceNumber==0 || wgNamespaceNumber==100)
+
names.split( ' ' ).forEach( function ( name ) {
    addOnloadHook(LinkFA)
+
name = name.replace( /[^\w_-]/g, '' );
    importScript_('MediaWiki:Collapserefs.js')
+
if ( name ) {
    if (wgArticleId==4401) importScript_('MediaWiki:Mainpage.js')
+
importScript( 'MediaWiki:Script/' + name + '.js' );
  else {
+
}
    if (wgNamespaceNumber==4 && /^(Мастер статей|Инкубатор)/.test(wgTitle))
+
} );
      importScript_('MediaWiki:Incubator.js')
+
}
    addOnloadHook(icqIcons)
+
} );
    addOnloadHook(newSectionLink)
+
 
  }
+
/**
  if (wgAction=='edit' || wgAction=='submit') importScript_('MediaWiki:Editpage.js')
+
* Чтобы ссылки на очистку кэша не требовали подтверждения (они должны быть помещены в тег с классом
+
* purgelink и именем страницы в атрибуте data-pagename, например как в шаблоне {{очистить кэш}})
 +
*/
 +
$( '.purgelink a' ).click( function ( e ) {
 +
mw.loader.using( [ 'mediawiki.api', 'mediawiki.util' ] ).done( function () {
 +
var pageName = $( this ).parent( '.purgelink' ).data( 'pagename' ) || mw.config.get( 'wgPageName' );
 +
new mw.Api().post( {
 +
action: 'purge',
 +
titles: pageName
 +
} ).then( function () {
 +
var url = mw.util.getUrl( pageName );
 +
if ( e.ctrlKey ) {
 +
if ( !window.open( url ) ) {
 +
location.assign( url );
 +
}
 +
} else {
 +
location.assign( url );
 +
}
 +
}, function () {
 +
mw.notify( 'Не удалось очистить кэш.', { type: 'error' } );
 +
} );
 +
e.preventDefault();
 +
} );
 +
} );
 +
}, $( '#footer' ), mw.hook( 'wikipage.content' ).add );
 +
 
 +
// Не включаем сюда проверку на наличие #ca-view.selected, чтобы не вычёркивать случай,
 +
// когда визред открыт без Ajax и по выходу из него нужно заменить URL’ы в ссылках.
 +
if ( $( '#ca-current' ).length && !/[?&](oldid|diff)=\d+/.test( location.search ) ) {
 +
fixEditLinksForStableRevs( true );
 +
 +
mw.hook( 've.deactivationComplete' ).add( function () {
 +
fixEditLinksForStableRevs( false );
 +
} );
 +
}
 +
} );
 +
 +
/**
 +
* Поддержка Викификатора в новом режиме вики-текста aka 2017 wikitext editor
 +
*/
 +
mw.libs.ve.addPlugin( function () {
 +
return mw.loader.using( 'ext.gadget.wikificator' );
 +
} );
 +
} );
 +
 
 +
/**
 +
* {{TOC hidden}}
 +
*/
 +
function TOChidden() {
 +
$( '.tochidden-wrapper > #toc > #toctogglecheckbox' ).prop('checked', true );
 +
$( '.tochidden-wrapper' ).attr( "class", "toc-wrapper" );
 
}
 
}
 
 
if (wgUserGroups){
 
  for (var i=0; i<wgUserGroups.length; i++) switch (wgUserGroups[i]){
 
  case 'autoconfirmed': importStylesheet('MediaWiki:Gadget-FlaggedRevs.css'); break
 
  case 'sysop': importScript_('MediaWiki:Sysop.js'); break
 
}
 
if (wgNamespaceNumber==2 && wgTitle.indexOf(wgUserName)==0 && wgArticleId==0 && /\/skin\.(js|css)$/.test(wgTitle))
 
  window.location.href = window.location.href.replace(/skin\.(css|js)$/, skin+'.$1')
 
}
 
 
 
// ВП:СО, кроме статей  В Контакте, Одноклассники и Facebook
 
if (wgArticleId!=639373 && wgArticleId!=932117 && wgArticleId!=1297302 && wgArticleId!=25133866)
 
importScript_('MediaWiki:Wikibugs.js')
 
 
 
// iwiki sorting
 
if (!wgUserName
 
    || (wgUserName
 
        && (((typeof wgLangPrefs == 'undefined') ? false : true)
 
            || ((typeof wgAddLangHints == 'undefined') ? false : wgAddLangHints)
 
            || ((typeof wgUseUserLanguage == 'undefined') ? false : wgUseUserLanguage))))
 
    importScript_('MediaWiki:Interwiki-links.js');
 
 
var withJS = document.URL.match(/[&?]withjs=((mediawiki:)?([^&#]+))/i)
 
if (withJS) importScript_('MediaWiki:'+withJS[3])
 
  
function addWikifButton() {
+
runAsEarlyAsPossible( function () {
var toolbar = document.getElementById('toolbar')
+
if ( $( '.tochidden-wrapper' ).length ) {
if (!toolbar) return
+
mw.loader.using( [ 'mediawiki.cookie' ] ).done( function () {
var i = document.createElement('img')
+
if ( mw.cookie.get( 'hidetoc' ) === null ) {
i.src = 'http://upload.wikimedia.org/wikisource/ru/d/d1/Button-wikifikator.png'
+
$.when( mw.loader.using( [ 'mediawiki.toc' ] ), $.ready ).then( TOChidden );
i.alt = i.title = 'викификатор'
+
}
i.onclick = Wikify
+
} );
i.style.cursor = 'pointer'
+
}
toolbar.appendChild(i)
+
}, $( '#toc' ), mw.hook( 'wikipage.content' ).add );
}
+
 
if (wgAction == 'edit' || wgAction == 'submit') {
+
/**
importScriptURI('http://ru.wikipedia.org/w/index.php?title=MediaWiki:Wikificator.js&action=raw&ctype=text/javascript')
+
* Код, выполняемый по событию wikipage.content (его обработчики выполняются раньше колбэков для $,
addOnloadHook(addWikifButton)
+
* хотя в глубине это одно и то же событие, просто колбэк, инициирующий wikipage.content, становится
document.write('<script type="text/javascript" src="/w/index.php?title=MediaWiki:Wikificator.js&action=raw&ctype=text/javascript"><\/script>')
+
* в очередь раньше). Так как wikipage.content инициируется после обновления страницы в результате
}
+
* Ajax-запросов (например, гаджетом быстрого предпросмотра), не добавляйте сюда коды, которые
if (document.URL.indexOf('action=edit') > 0 || document.URL.indexOf('action=submit') > 0){
+
* должны гарантированно выполниться не более одного раза на странице.
    document.write('<script type="text/javascript" src="/w/index.php?title=MediaWiki:Wikificator.js&action=raw&ctype=text/javascript"><\/script>')
+
*/
    addOnloadHook(addWikifButton)
+
mw.hook( 'wikipage.content' ).add( function () {
}
+
/**
 +
* Отключение обтекания раздела примечаний, если в нём есть колонки.
 +
* Короткие (до 15 ссылок, если общее число символов не менее 3000) списки примечаний обтекаются
 +
* только справа.
 +
*/
 +
$( '.reflist.columns' ).each( function () {
 +
var clear = 'both',
 +
$refs = $( this ).find( 'ol.references > li' );
 +
if ( $refs.length <= 10 ) return;
 +
if ( $refs.length <= 15 && $refs.text().length < 3000 ) {
 +
clear = 'left';
 +
}
 +
$( this )
 +
.prevUntil( 'h1, h2, h3, h4, h5, h6' )
 +
.addBack()
 +
.first()
 +
.prev()
 +
.css( 'clear', clear );
 +
} );
 +
 
 +
/**
 +
* Imagemap Highlight
 +
*/
 +
// На странице есть как минимум один элемент .imageMapHighlighter, а браузер поддерживает <canvas>
 +
if ( $( '.imageMapHighlighter' ).length && $( '<canvas>' )[ 0 ].getContext ) {
 +
importScript( 'MediaWiki:Imagemap-Highlight.js' );
 +
}
 +
 
 +
/**
 +
* imgToggle
 +
*/
 +
// На странице есть как минимум один элемент div.img_toggle
 +
if ( $( 'div.img_toggle' ).length ) {
 +
mw.loader.load( 'ext.gadget.imgToggle' );
 +
}
 +
 
 +
/**
 +
* Авторазбиение списков на колонки. Будет работать только для однострочных списков. 35em
 +
* (из Mediawiki:Common.css) является предварительным числом, а фактическое будет посчитано исходя
 +
* из ширины элементов. Должно использоваться только для UL внутри DIV. Пример использования —
 +
* шаблон {{Wikidata/SisterCities}}.
 +
*/
 +
$("div.autocolumns").each(function(d, div) {
 +
var parentWidth = $(div).parent()[0].offsetWidth;
 +
if (!parentWidth) return;
 +
 
 +
var maxWidth = 0;
 +
var elements = 0;
 +
$(div).find("ul>li").each(function(l, li) {
 +
elements++;
 +
var jLi = $(li);
 +
if (jLi.children().length != jLi.contents().length)
 +
jLi.wrapInner(document.createElement("span"));
 +
 
 +
var liWidth = 0;
 +
jLi.children().each(function(c, child) {
 +
liWidth += child.offsetWidth;
 +
});
 +
if (liWidth > maxWidth)
 +
maxWidth = liWidth;
 +
});
 +
if ( maxWidth === 0 ) return;
 +
// UL/LI bullet width + padding
 +
maxWidth += 22.5 * 2;
 +
 
 +
var maxColumns = "" + Math.ceil( elements / 5 );
 +
$(div).css({"-moz-columns": maxWidth + "px " + maxColumns, "columns" : maxWidth + "px " + maxColumns});
 +
});
 +
});
 +
 
 +
/**
 +
* Кнопки описания правок для визуального редактора
 +
*/
 +
mw.hook( 've.activationComplete' ).add( function () {
 +
mw.loader.load( 'ext.gadget.summaryButtons' );
 +
} );
 +
 
 +
// A high frequency of errors come from old scripts referencing addPortletLink.
 +
// Can be removed when https://global-search.toolforge.org/?q=%5B%5E%5C.%5DaddPortletLink%5C%28&regex=1&namespaces=&title=.*%5C.js has no nl.wikipedia results.
 +
window.addPortletLink = function () {
 +
// @todo: Please Translate
 +
mw.notify('One of your user scripts is broken. Please inspect your error console and remove.');
 +
mw.log.warn('addPortletLink is deprecated. Please use mw.util.addPortletLink')
 +
};

Текущая версия на 21:18, 2 декабря 2022

/*if ( $.inArray( mw.config.get( 'wgAction' ), ['edit', 'submit'] ) !== -1 ) {
        mw.loader.load( '/mediawiki/index.php?title=MediaWiki:Gadget-wikificator.js&action=raw&ctype=text/javascript' );
}

var customizeToolbar = function() {

$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
        'section': 'advanced',
        'group': 'format',
        'tools': {
                'wikify': {
                        label: 'Викификатор',
                        type: 'button',
                        icon: '//upload.wikimedia.org/wikipedia/commons/0/06/Wikify-toolbutton.png',
                             action: {
                                  type: 'callback',
                                       execute: function(context){
                                              Wikify();
                                       } 
                             }
                }
        }
} );
};
 
if ( $.inArray( mw.config.get( 'wgAction' ), ['edit', 'submit'] ) !== -1 ) {
        mw.loader.using( 'user.options', function () {
                if ( mw.user.options.get('usebetatoolbar') ) {
                        mw.loader.using( 'ext.wikiEditor.toolbar', function () {
                                $(document).ready( customizeToolbar );
                        } );
                }
        } );
}
*/
/*
var importScript_ = importScript;
importScript = function ( page, proj ) {
	if ( !proj ) {
		importScript_( page );
	} else {
		if ( proj.indexOf( '.' ) === -1 ) {
			proj += 'celeste-rus.ru';
		}
		mw.loader.using( 'mediawiki.util' ).done( function () {
			mw.loader.load( 'https://' + proj + '/mediawiki/index.php?title=' + mw.util.wikiUrlencode( page ) +
				'&action=raw&ctype=text/javascript' );
		} );
	}
};
*/
importScript = function ( page, proj ) {
	mw.loader.using( 'mediawiki.util' ).done( function () {
		mw.loader.load( 'https://celeste-rus.ru/index.php?title=' + mw.util.wikiUrlencode( page ) +
			'&action=raw&ctype=text/javascript' );
	} );
};

function runAsEarlyAsPossible( callback, $testElement, func ) {
	func = func || $;
	$testElement = $testElement || $( '#footer' );

	if ( $testElement.length ) {
		callback();
	} else {
		func( callback );
	}
}

/**
 * Настройка обработки «е» и «ё» при сортировке в таблицах
 */
mw.config.set( 'tableSorterCollation', { 'Ё': 'Е', 'ё': 'е' } );

// Messages
var expandCaption, collapseCaption, zeroSectionTip;
if ( mw.config.get( 'wgUserLanguage' ) === 'en' ) {
	expandCaption = 'show';
	collapseCaption = 'hide';
	zeroSectionTip = 'Edit lead section';
} else {
	expandCaption = 'показать';
	collapseCaption = 'скрыть';
	zeroSectionTip = 'Править преамбулу';
}

// Collapsiblе: [[:ru:ВП:СБ]]

var NavigationBarShowDefault;
if ( typeof NavigationBarShowDefault === 'undefined' ) {
	NavigationBarShowDefault = 1;
}

// table.collapsible
// collapsibleTablesItrIdx - временное решение, чтобы не дублировались id,
// если во время срабатывания хука 'wikipage.content' добавляются новые сворачиваемые блоки
var collapsibleTablesItrIdx = 0;
	
function collapsibleTables( $content ) {
	var $btn,
		$a,
		tblIdx = collapsibleTablesItrIdx,
		navboxCount = 0,
		notNavboxCount = 0,
		colTables = [],
		$Tables = $content.find( 'table' );

	$Tables.each( function ( i, table ) {
		if ( $( table ).hasClass( 'collapsible' ) ) {
			var $table = $( this ),
				$row = $table.find( 'tr' ).first(),
				$cell = $row.find( 'th' ).first();
			if ( !$cell.length ) {
				return;
			}
			$table.attr( 'id', 'collapsibleTable' + tblIdx );
			$btn = $( '<span>' ).addClass( 'collapseButton' );
			$a = $( '<a>' )
				.attr( 'id', 'collapseButton' + tblIdx )
				.attr( 'href', 'javascript:collapseTable(' + tblIdx + ');' )
				// Изменяем цвет ссылки, только если цвет текста в навбоксе нестандартный
				.css( 'color', $cell.css( 'color' ) === $( '.mw-body' ).css( 'color' ) ? 'auto' :
					$cell.css( 'color' ) )
				.text( collapseCaption );
			$btn
				.append( '[' )
				.append( $a )
				.append( ']' );
			if ( $cell.contents().length ) {
				$btn.insertBefore( $cell.contents().first() );
			} else {
				$btn.appendTo( $cell );
			}
			// hasClass( 'navbox' ) — временное решение для навшаблонов, ещё не переведённых
			// на {{Навигационная таблица}} (также ниже)
			if ( $table.hasClass( 'navbox-inner' ) || $table.hasClass( 'navbox' ) ) {
				navboxCount++;
			} else {
				notNavboxCount++;
			}
			colTables[tblIdx++] = $table;
		}
	} );
	for ( var i = collapsibleTablesItrIdx; i < tblIdx; i++ ) {
		if ( colTables[i].hasClass( 'collapsed' ) ||
			( colTables[i].hasClass( 'autocollapse' ) &&
				( ( ( colTables[i].hasClass( 'navbox-inner' ) || colTables[i].hasClass( 'navbox' ) ) &&
						navboxCount > NavigationBarShowDefault ) ||
					( !( colTables[i].hasClass( 'navbox-inner' ) || colTables[i].hasClass( 'navbox' ) ) &&
						notNavboxCount > NavigationBarShowDefault ) ) ) )
		{
			collapseTable( i );
		}
	}
	collapsibleTablesItrIdx = tblIdx;
	// Нужно переписать код на "mw-collapsible", и заменить использование хука на "wikipage.collapsibleContent"
	mw.hook( 'common.collapsibleContent' ).fire( colTables );
}

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

function collapseTable( idx ) {
	var $table = $( '#collapsibleTable' + idx ),
		$rows = $table.children().children( 'tr' ),
		$btn = $( '#collapseButton' + idx );
	if ( !$table.length || !$rows.length || !$btn.length ) {
		return false;
	}

	var isExpanded = ( $btn.text() === collapseCaption ),
		cssDisplay = isExpanded ? 'none' : $rows.first().css( 'display' );

	$btn.text( isExpanded ? expandCaption : collapseCaption );
	$rows.slice( 1 ).each( function () {
		$( this ).css( 'display', cssDisplay );
	} );
}

// div.NavFrame
var navFrameExpandCaption = '[' + expandCaption + ']',
	navFrameCollapseCaption = '[' + collapseCaption + ']';

// Изолируем код из глобальной области видимости
( function () {
	function collapsibleDivs( $content ) {
		var navFrameIndex = 0,
			navFrames = [],
			i;

		$content.find( 'div' ).each( function () {
			var $div = $( this );
			if ( $div.hasClass( 'NavFrame' ) ) {
				var $btn = $( '<a>' )
					.addClass( 'NavToggle' )
					.attr( 'href', 'javascript:' )
					.text( navFrameCollapseCaption )
					.click( navToggleClickHandler );
				$div.children( '.NavHead' ).append( $btn );
				navFrames[ navFrameIndex++ ] = $div;
			}
		} );
		for ( i = 0; i < navFrameIndex; i++ ) {
			if ( navFrames[ i ].hasClass( 'collapsed' ) ||
				( navFrameIndex > NavigationBarShowDefault &&
					!navFrames[ i ].hasClass( 'expanded' )
				)
			) {
				toggleDiv( navFrames[ i ] );
			}
		}
	}

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

	function navToggleClickHandler() {
		var $btn = $( this );
		toggleDiv( $btn.closest( '.NavFrame' ), $btn );
	}

	function toggleDiv( $div, $btn ) {
		$btn = $btn || $div.find( '.NavToggle' ).first();
		if ( !$div.length || !$btn.length ) return false;
		var isExpanded = ( $btn.text() === navFrameCollapseCaption );
		$btn.text( isExpanded ? navFrameExpandCaption : navFrameCollapseCaption );
		$div.children( '.NavContent, .NavPic' ).each( function () {
			$( this ).css( 'display', isExpanded ? 'none' : 'block' );
		} );
	}

	/**
	 * Загрузка скриптов через систему подгаджетов
	 */
	var namespaceNumber = mw.config.get( 'wgNamespaceNumber' );

	// Скрипты для служебных страниц
	if ( namespaceNumber === -1 ) {
		var specialGadgets = [
			'Abusefilter',
			'Block',
			'Log',
			'Movepage',
			'Newpages',
			'Search',
			'Upload'
		];
		var canonicalSpecialPageName = mw.config.get( 'wgCanonicalSpecialPageName' );
		if ( specialGadgets.indexOf( canonicalSpecialPageName ) > -1 ) {
			mw.loader.load( 'ext.gadget.common-special-' + canonicalSpecialPageName.toLowerCase() );
		}
	} else {
		// Скрипты для действий
		var action = mw.config.get( 'wgAction' );
		var actionGadgets = {
			'edit': [ 'ext.gadget.common-action-edit', 'ext.gadget.wikificator', 'ext.gadget.summaryButtons' ]
		};
		actionGadgets[ 'submit' ] = actionGadgets[ 'edit' ];

		if ( actionGadgets[ action ] ) {
			mw.loader.load( actionGadgets[ action ] );
		}

		// Скрипты для пространств
		var namespaceGadgets = {
			6: [ 'ext.gadget.common-namespace-file' ]
		};

		if ( namespaceGadgets[ namespaceNumber ] ) {
			mw.loader.load( namespaceGadgets[ namespaceNumber ] );
		}
	}
}() );

/**
 * Старые коды
 */
if ( navigator.platform.indexOf( 'Win' ) !== -1 ) {
	mw.loader.using( 'mediawiki.util' ).done( function () {
		mw.util.addCSS( '.IPA, .Unicode { font-family: "Arial Unicode MS", "Lucida Sans Unicode"; }' );
	} );
}

	// Закрываем меню при клике за его пределами
	mw.hook( 'wikipage.content' ).add( function () {
		var $items =  $( '.main-footer-menuToggle' ),
			$target;
			
		document.body.addEventListener( 'click', function ( event ) {
		    $target = $( event.target ).parents( '.main-footer-menuToggle' )[0];
		    $items.each( function () {
		        if( this !== $target && !$( this ).hasClass( 'mw-collapsible-toggle-collapsed' ) ) {
		            $( this ).click();
		        }
		    } );
		}, true );
	} );
}

/**
 * Выполнение скриптов из пространства MediaWiki, указанных в URL
 * См. также https://www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL
 */
var withJS = location.href.match( /[&?]withjs=((mediawiki:)?([^&#]+))/i );
if ( withJS ) {
	//importScript_( 'MediaWiki:' + withJS[3] );
	importScript( 'MediaWiki:' + withJS[3] );
}

/**
 * Код, который нужно выполнить как можно раньше. Он выполняется, если загружен подвал страницы,
 * иначе же ждёт наступления события wikipage.content (см. выше определение runAsEarlyAsPossible
 * и ниже про wikipage.content).
 */
runAsEarlyAsPossible( function () {
	/**
	 * {{выполнить скрипт}}
	 */
	$( '.executeJS' ).each( function () {
		var names = $( this ).data( 'scriptnames' );
		if (names) {
			names.split( ' ' ).forEach( function ( name ) {
				name = name.replace( /[^\w_-]/g, '' );
				if ( name ) {
					importScript( 'MediaWiki:Script/' + name + '.js' );
				}
			} );
		}
	} );

	/**
	 * Чтобы ссылки на очистку кэша не требовали подтверждения (они должны быть помещены в тег с классом
	 * purgelink и именем страницы в атрибуте data-pagename, например как в шаблоне {{очистить кэш}})
	 */
	$( '.purgelink a' ).click( function ( e ) {
		mw.loader.using( [ 'mediawiki.api', 'mediawiki.util' ] ).done( function () {
			var pageName = $( this ).parent( '.purgelink' ).data( 'pagename' ) || mw.config.get( 'wgPageName' );
			new mw.Api().post( {
				action: 'purge',
				titles: pageName
			} ).then( function () {
				var url = mw.util.getUrl( pageName );
				if ( e.ctrlKey ) {
					if ( !window.open( url ) ) {
						location.assign( url );
					}
				} else {
					location.assign( url );
				}
			}, function () {
				mw.notify( 'Не удалось очистить кэш.', { type: 'error' } );
			} );
			e.preventDefault();
		} );
	} );
}, $( '#footer' ), mw.hook( 'wikipage.content' ).add );

		// Не включаем сюда проверку на наличие #ca-view.selected, чтобы не вычёркивать случай,
		// когда визред открыт без Ajax и по выходу из него нужно заменить URL’ы в ссылках.
		if ( $( '#ca-current' ).length && !/[?&](oldid|diff)=\d+/.test( location.search ) ) {
			fixEditLinksForStableRevs( true );
		
			mw.hook( 've.deactivationComplete' ).add( function () {
				fixEditLinksForStableRevs( false );
			} );
		}
	} );
	
	/**
	 * Поддержка Викификатора в новом режиме вики-текста aka 2017 wikitext editor
	 */
	mw.libs.ve.addPlugin( function () {
		return mw.loader.using( 'ext.gadget.wikificator' );
	} );
} );

/**
 * {{TOC hidden}}
 */
function TOChidden() {
	$( '.tochidden-wrapper > #toc > #toctogglecheckbox' ).prop('checked', true );
	$( '.tochidden-wrapper' ).attr( "class", "toc-wrapper" );
}

runAsEarlyAsPossible( function () {
	if ( $( '.tochidden-wrapper' ).length ) {
		mw.loader.using( [ 'mediawiki.cookie' ] ).done( function () {
			if ( mw.cookie.get( 'hidetoc' ) === null ) {
				$.when( mw.loader.using( [ 'mediawiki.toc' ] ), $.ready ).then( TOChidden );
			}
		} );
	}
}, $( '#toc' ), mw.hook( 'wikipage.content' ).add );

/**
 * Код, выполняемый по событию wikipage.content (его обработчики выполняются раньше колбэков для $,
 * хотя в глубине это одно и то же событие, просто колбэк, инициирующий wikipage.content, становится
 * в очередь раньше). Так как wikipage.content инициируется после обновления страницы в результате
 * Ajax-запросов (например, гаджетом быстрого предпросмотра), не добавляйте сюда коды, которые
 * должны гарантированно выполниться не более одного раза на странице.
 */
mw.hook( 'wikipage.content' ).add( function () {
	/**
	 * Отключение обтекания раздела примечаний, если в нём есть колонки.
	 * Короткие (до 15 ссылок, если общее число символов не менее 3000) списки примечаний обтекаются
	 * только справа.
	 */
	$( '.reflist.columns' ).each( function () {
		var clear = 'both',
			$refs = $( this ).find( 'ol.references > li' );
		if ( $refs.length <= 10 ) return;
		if ( $refs.length <= 15 && $refs.text().length < 3000 ) {
			clear = 'left';
		}
		$( this )
			.prevUntil( 'h1, h2, h3, h4, h5, h6' )
			.addBack()
			.first()
			.prev()
			.css( 'clear', clear );
	} );

	/**
	 * Imagemap Highlight
	 */
	// На странице есть как минимум один элемент .imageMapHighlighter, а браузер поддерживает <canvas>
	if ( $( '.imageMapHighlighter' ).length && $( '<canvas>' )[ 0 ].getContext ) {
		importScript( 'MediaWiki:Imagemap-Highlight.js' );
	}

	/**
	 * imgToggle
	 */
	// На странице есть как минимум один элемент div.img_toggle
	if ( $( 'div.img_toggle' ).length ) {
		mw.loader.load( 'ext.gadget.imgToggle' );
	}

	/**
	 * Авторазбиение списков на колонки. Будет работать только для однострочных списков. 35em
	 * (из Mediawiki:Common.css) является предварительным числом, а фактическое будет посчитано исходя
	 * из ширины элементов. Должно использоваться только для UL внутри DIV. Пример использования —
	 * шаблон {{Wikidata/SisterCities}}.
	 */
	$("div.autocolumns").each(function(d, div) {
		var parentWidth = $(div).parent()[0].offsetWidth;
		if (!parentWidth) return;

		var maxWidth = 0;
		var elements = 0;
		$(div).find("ul>li").each(function(l, li) {
			elements++;
			var jLi = $(li);
			if (jLi.children().length != jLi.contents().length)
				jLi.wrapInner(document.createElement("span"));

			var liWidth = 0;
			jLi.children().each(function(c, child) {
				liWidth += child.offsetWidth;
			});
			if (liWidth > maxWidth)
				maxWidth = liWidth;
		});
		if ( maxWidth === 0 ) return;
		// UL/LI bullet width + padding
		maxWidth += 22.5 * 2;

		var maxColumns = "" + Math.ceil( elements / 5 );
		$(div).css({"-moz-columns": maxWidth + "px " + maxColumns, "columns" : maxWidth + "px " + maxColumns});
	});
});

/**
 * Кнопки описания правок для визуального редактора
 */
mw.hook( 've.activationComplete' ).add( function () {
	mw.loader.load( 'ext.gadget.summaryButtons' );
} );

// A high frequency of errors come from old scripts referencing addPortletLink.
// Can be removed when https://global-search.toolforge.org/?q=%5B%5E%5C.%5DaddPortletLink%5C%28&regex=1&namespaces=&title=.*%5C.js has no nl.wikipedia results.
window.addPortletLink = function () {
	// @todo: Please Translate
	mw.notify('One of your user scripts is broken. Please inspect your error console and remove.');
	mw.log.warn('addPortletLink is deprecated. Please use mw.util.addPortletLink')
};