<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>http://ru.ru-skazki.ru/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3ACommon.js</id>
	<title>MediaWiki:Common.js - История изменений</title>
	<link rel="self" type="application/atom+xml" href="http://ru.ru-skazki.ru/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3ACommon.js"/>
	<link rel="alternate" type="text/html" href="http://ru.ru-skazki.ru/index.php?title=MediaWiki:Common.js&amp;action=history"/>
	<updated>2026-04-08T02:04:05Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>http://ru.ru-skazki.ru/index.php?title=MediaWiki:Common.js&amp;diff=20508&amp;oldid=prev</id>
		<title>Andras: Новая страница: «/**  * Код MediaWiki:Common.js безусловно загружается всем пользователям на всех страницах. Во избежание  * отправки лишних запросов по возможности не используйте здесь mw.loader.using с модулями, которые  * не загружаются по умолчанию (см.  * [[Обсуждение MediaWiki:Common.js#Список...»</title>
		<link rel="alternate" type="text/html" href="http://ru.ru-skazki.ru/index.php?title=MediaWiki:Common.js&amp;diff=20508&amp;oldid=prev"/>
		<updated>2024-05-02T15:59:39Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «/**  * Код MediaWiki:Common.js безусловно загружается всем пользователям на всех страницах. Во избежание  * отправки лишних запросов по возможности не используйте здесь mw.loader.using с модулями, которые  * не загружаются по умолчанию (см.  * [[Обсуждение MediaWiki:Common.js#Список...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/**&lt;br /&gt;
 * Код MediaWiki:Common.js безусловно загружается всем пользователям на всех страницах. Во избежание&lt;br /&gt;
 * отправки лишних запросов по возможности не используйте здесь mw.loader.using с модулями, которые&lt;br /&gt;
 * не загружаются по умолчанию (см.&lt;br /&gt;
 * [[Обсуждение MediaWiki:Common.js#Список модулей, загружаемых по умолчанию]]). В таком случае&lt;br /&gt;
 * лучше создать скрытый гаджет, загружаемый по умолчанию, и добавить ему нужные модули в качестве&lt;br /&gt;
 * зависимостей.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Локальная функция загрузки скриптов с поддержкой указания проекта&lt;br /&gt;
 */&lt;br /&gt;
var importScript_ = importScript;&lt;br /&gt;
importScript = function ( page, proj ) {&lt;br /&gt;
	if ( !proj ) {&lt;br /&gt;
		importScript_( page );&lt;br /&gt;
	} else {&lt;br /&gt;
		if ( proj.indexOf( &amp;#039;.&amp;#039; ) === -1 ) {&lt;br /&gt;
			proj += &amp;#039;.wikipedia.org&amp;#039;;&lt;br /&gt;
		}&lt;br /&gt;
		mw.loader.using( &amp;#039;mediawiki.util&amp;#039; ).done( function () {&lt;br /&gt;
			mw.loader.load( &amp;#039;//&amp;#039; + proj + &amp;#039;/w/index.php?title=&amp;#039; + mw.util.wikiUrlencode( page ) +&lt;br /&gt;
				&amp;#039;&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;#039; );&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Часто те или иные манипуляции со страницей нужно выполнить как можно раньше, но нет гарантии, что&lt;br /&gt;
 * к моменту выполнения кода нужный участок DOM готов, а событие полной загрузки страницы происходит&lt;br /&gt;
 * слишком поздно. В этой функции проверяется наличие элемента $testElement и в случае успеха&lt;br /&gt;
 * функция-колбэк выполняется, иначе же её выполнение поручается другой функции. Если элемент&lt;br /&gt;
 * в $testElement имеет содержимое, правильнее указать следующий за ним элемент, чтобы быть&lt;br /&gt;
 * уверенным, что он загрузился до конца. Имейте в виду, что разные скины часто используют разные&lt;br /&gt;
 * названия классов и идентификаторов.&lt;br /&gt;
 */&lt;br /&gt;
function runAsEarlyAsPossible( callback, $testElement, func ) {&lt;br /&gt;
	func = func || $;&lt;br /&gt;
	$testElement = $testElement || $( &amp;#039;#footer&amp;#039; );&lt;br /&gt;
&lt;br /&gt;
	if ( $testElement.length ) {&lt;br /&gt;
		callback();&lt;br /&gt;
	} else {&lt;br /&gt;
		func( callback );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Настройка обработки «е» и «ё» при сортировке в таблицах&lt;br /&gt;
 */&lt;br /&gt;
mw.config.set( &amp;#039;tableSorterCollation&amp;#039;, { &amp;#039;Ё&amp;#039;: &amp;#039;Е&amp;#039;, &amp;#039;ё&amp;#039;: &amp;#039;е&amp;#039; } );&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Строки. Иноязычный интерфейс предположительно включают весьма редко, поэтому раздувать этот&lt;br /&gt;
 * список не стоит. При необходимости добавить много сообщений во много языков можно использовать&lt;br /&gt;
 * механизм системных сообщений (= страниц в пространстве MediaWiki, у которых могут быть суффиксы&lt;br /&gt;
 * типа /en). См., как их получение реализовано в MediaWiki:Gadget-sidebarRelated.js.&lt;br /&gt;
 */&lt;br /&gt;
var expandCaption, collapseCaption, zeroSectionTip;&lt;br /&gt;
if ( mw.config.get( &amp;#039;wgUserLanguage&amp;#039; ) === &amp;#039;en&amp;#039; ) {&lt;br /&gt;
	expandCaption = &amp;#039;show&amp;#039;;&lt;br /&gt;
	collapseCaption = &amp;#039;hide&amp;#039;;&lt;br /&gt;
	zeroSectionTip = &amp;#039;Edit lead section&amp;#039;;&lt;br /&gt;
} else {&lt;br /&gt;
	expandCaption = &amp;#039;показать&amp;#039;;&lt;br /&gt;
	collapseCaption = &amp;#039;скрыть&amp;#039;;&lt;br /&gt;
	zeroSectionTip = &amp;#039;Править преамбулу&amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * [[ВП:Сворачиваемые блоки]]&lt;br /&gt;
 */&lt;br /&gt;
// Число раскрытых по умолчанию навигационных (и не только) шаблонов, если им задан параметр&lt;br /&gt;
// autocollapse. Участники могут переопределять это значение в личных JS.&lt;br /&gt;
var NavigationBarShowDefault;&lt;br /&gt;
if ( typeof NavigationBarShowDefault === &amp;#039;undefined&amp;#039; ) {&lt;br /&gt;
	NavigationBarShowDefault = 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// table.collapsible&lt;br /&gt;
// collapsibleTablesItrIdx - временное решние, чтобы не дублировались id,&lt;br /&gt;
// если во время срабатывания хука &amp;#039;wikipage.content&amp;#039; добавляются новые сворачиваемые блоки&lt;br /&gt;
var collapsibleTablesItrIdx = 0;&lt;br /&gt;
	&lt;br /&gt;
function collapsibleTables( $content ) {&lt;br /&gt;
	var $btn,&lt;br /&gt;
		$a,&lt;br /&gt;
		tblIdx = collapsibleTablesItrIdx,&lt;br /&gt;
		navboxCount = 0,&lt;br /&gt;
		notNavboxCount = 0,&lt;br /&gt;
		colTables = [],&lt;br /&gt;
		$Tables = $content.find( &amp;#039;table&amp;#039; );&lt;br /&gt;
&lt;br /&gt;
	$Tables.each( function ( i, table ) {&lt;br /&gt;
		if ( $( table ).hasClass( &amp;#039;collapsible&amp;#039; ) ) {&lt;br /&gt;
			var $table = $( this ),&lt;br /&gt;
				$row = $table.find( &amp;#039;tr&amp;#039; ).first(),&lt;br /&gt;
				$cell = $row.find( &amp;#039;th&amp;#039; ).first();&lt;br /&gt;
			if ( !$cell.length ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			$table.attr( &amp;#039;id&amp;#039;, &amp;#039;collapsibleTable&amp;#039; + tblIdx );&lt;br /&gt;
			$btn = $( &amp;#039;&amp;lt;span&amp;gt;&amp;#039; ).addClass( &amp;#039;collapseButton&amp;#039; );&lt;br /&gt;
			$a = $( &amp;#039;&amp;lt;a&amp;gt;&amp;#039; )&lt;br /&gt;
				.attr( &amp;#039;id&amp;#039;, &amp;#039;collapseButton&amp;#039; + tblIdx )&lt;br /&gt;
				.attr( &amp;#039;href&amp;#039;, &amp;#039;javascript:collapseTable(&amp;#039; + tblIdx + &amp;#039;);&amp;#039; )&lt;br /&gt;
				// Изменяем цвет ссылки, только если цвет текста в навбоксе нестандартный&lt;br /&gt;
				.css( &amp;#039;color&amp;#039;, $cell.css( &amp;#039;color&amp;#039; ) === $( &amp;#039;.mw-body&amp;#039; ).css( &amp;#039;color&amp;#039; ) ? &amp;#039;auto&amp;#039; :&lt;br /&gt;
					$cell.css( &amp;#039;color&amp;#039; ) )&lt;br /&gt;
				.text( collapseCaption );&lt;br /&gt;
			$btn&lt;br /&gt;
				.append( &amp;#039;[&amp;#039; )&lt;br /&gt;
				.append( $a )&lt;br /&gt;
				.append( &amp;#039;]&amp;#039; );&lt;br /&gt;
			if ( $cell.contents().length ) {&lt;br /&gt;
				$btn.insertBefore( $cell.contents().first() );&lt;br /&gt;
			} else {&lt;br /&gt;
				$btn.appendTo( $cell );&lt;br /&gt;
			}&lt;br /&gt;
			// hasClass( &amp;#039;navbox&amp;#039; ) — временное решение для навшаблонов, ещё не переведённых&lt;br /&gt;
			// на {{Навигационная таблица}} (также ниже)&lt;br /&gt;
			if ( $table.hasClass( &amp;#039;navbox-inner&amp;#039; ) || $table.hasClass( &amp;#039;navbox&amp;#039; ) ) {&lt;br /&gt;
				navboxCount++;&lt;br /&gt;
			} else {&lt;br /&gt;
				notNavboxCount++;&lt;br /&gt;
			}&lt;br /&gt;
			colTables[tblIdx++] = $table;&lt;br /&gt;
		}&lt;br /&gt;
	} );&lt;br /&gt;
	for ( var i = collapsibleTablesItrIdx; i &amp;lt; tblIdx; i++ ) {&lt;br /&gt;
		if ( colTables[i].hasClass( &amp;#039;collapsed&amp;#039; ) ||&lt;br /&gt;
			( colTables[i].hasClass( &amp;#039;autocollapse&amp;#039; ) &amp;amp;&amp;amp;&lt;br /&gt;
				( ( ( colTables[i].hasClass( &amp;#039;navbox-inner&amp;#039; ) || colTables[i].hasClass( &amp;#039;navbox&amp;#039; ) ) &amp;amp;&amp;amp;&lt;br /&gt;
						navboxCount &amp;gt; NavigationBarShowDefault ) ||&lt;br /&gt;
					( !( colTables[i].hasClass( &amp;#039;navbox-inner&amp;#039; ) || colTables[i].hasClass( &amp;#039;navbox&amp;#039; ) ) &amp;amp;&amp;amp;&lt;br /&gt;
						notNavboxCount &amp;gt; NavigationBarShowDefault ) ) ) )&lt;br /&gt;
		{&lt;br /&gt;
			collapseTable( i );&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	collapsibleTablesItrIdx = tblIdx;&lt;br /&gt;
	// Нужно переписать код на &amp;quot;mw-collapsible&amp;quot;, и заменить использование хука на &amp;quot;wikipage.collapsibleContent&amp;quot;&lt;br /&gt;
	mw.hook( &amp;#039;common.collapsibleContent&amp;#039; ).fire( colTables );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
mw.hook( &amp;#039;wikipage.content&amp;#039; ).add( collapsibleTables );&lt;br /&gt;
&lt;br /&gt;
function collapseTable( idx ) {&lt;br /&gt;
	var $table = $( &amp;#039;#collapsibleTable&amp;#039; + idx ),&lt;br /&gt;
		$rows = $table.children().children( &amp;#039;tr&amp;#039; ),&lt;br /&gt;
		$btn = $( &amp;#039;#collapseButton&amp;#039; + idx );&lt;br /&gt;
	if ( !$table.length || !$rows.length || !$btn.length ) {&lt;br /&gt;
		return false;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var isExpanded = ( $btn.text() === collapseCaption ),&lt;br /&gt;
		cssDisplay = isExpanded ? &amp;#039;none&amp;#039; : $rows.first().css( &amp;#039;display&amp;#039; );&lt;br /&gt;
&lt;br /&gt;
	$btn.text( isExpanded ? expandCaption : collapseCaption );&lt;br /&gt;
	$rows.slice( 1 ).each( function () {&lt;br /&gt;
		$( this ).css( &amp;#039;display&amp;#039;, cssDisplay );&lt;br /&gt;
	} );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// div.NavFrame&lt;br /&gt;
var navFrameExpandCaption = &amp;#039;[&amp;#039; + expandCaption + &amp;#039;]&amp;#039;,&lt;br /&gt;
	navFrameCollapseCaption = &amp;#039;[&amp;#039; + collapseCaption + &amp;#039;]&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
// Изолируем код из глобальной области видимости&lt;br /&gt;
( function () {&lt;br /&gt;
	function collapsibleDivs( $content ) {&lt;br /&gt;
		var navFrameIndex = 0,&lt;br /&gt;
			navFrames = [],&lt;br /&gt;
			i;&lt;br /&gt;
&lt;br /&gt;
		$content.find( &amp;#039;div&amp;#039; ).each( function () {&lt;br /&gt;
			var $div = $( this );&lt;br /&gt;
			if ( $div.hasClass( &amp;#039;NavFrame&amp;#039; ) ) {&lt;br /&gt;
				var $btn = $( &amp;#039;&amp;lt;a&amp;gt;&amp;#039; )&lt;br /&gt;
					.addClass( &amp;#039;NavToggle&amp;#039; )&lt;br /&gt;
					.attr( &amp;#039;href&amp;#039;, &amp;#039;javascript:&amp;#039; )&lt;br /&gt;
					.text( navFrameCollapseCaption )&lt;br /&gt;
					.click( navToggleClickHandler );&lt;br /&gt;
				$div.children( &amp;#039;.NavHead&amp;#039; ).append( $btn );&lt;br /&gt;
				navFrames[ navFrameIndex++ ] = $div;&lt;br /&gt;
			}&lt;br /&gt;
		} );&lt;br /&gt;
		for ( i = 0; i &amp;lt; navFrameIndex; i++ ) {&lt;br /&gt;
			if ( navFrames[ i ].hasClass( &amp;#039;collapsed&amp;#039; ) ||&lt;br /&gt;
				( navFrameIndex &amp;gt; NavigationBarShowDefault &amp;amp;&amp;amp;&lt;br /&gt;
					!navFrames[ i ].hasClass( &amp;#039;expanded&amp;#039; )&lt;br /&gt;
				)&lt;br /&gt;
			) {&lt;br /&gt;
				toggleDiv( navFrames[ i ] );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	mw.hook( &amp;#039;wikipage.content&amp;#039; ).add( collapsibleDivs );&lt;br /&gt;
&lt;br /&gt;
	function navToggleClickHandler() {&lt;br /&gt;
		var $btn = $( this );&lt;br /&gt;
		toggleDiv( $btn.closest( &amp;#039;.NavFrame&amp;#039; ), $btn );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function toggleDiv( $div, $btn ) {&lt;br /&gt;
		$btn = $btn || $div.find( &amp;#039;.NavToggle&amp;#039; ).first();&lt;br /&gt;
		if ( !$div.length || !$btn.length ) return false;&lt;br /&gt;
		var isExpanded = ( $btn.text() === navFrameCollapseCaption );&lt;br /&gt;
		$btn.text( isExpanded ? navFrameExpandCaption : navFrameCollapseCaption );&lt;br /&gt;
		$div.children( &amp;#039;.NavContent, .NavPic&amp;#039; ).each( function () {&lt;br /&gt;
			$( this ).css( &amp;#039;display&amp;#039;, isExpanded ? &amp;#039;none&amp;#039; : &amp;#039;block&amp;#039; );&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Загрузка скриптов через систему подгаджетов&lt;br /&gt;
	 */&lt;br /&gt;
	var namespaceNumber = mw.config.get( &amp;#039;wgNamespaceNumber&amp;#039; );&lt;br /&gt;
&lt;br /&gt;
	// Скрипты для служебных страниц&lt;br /&gt;
	if ( namespaceNumber === -1 ) {&lt;br /&gt;
		var specialGadgets = [&lt;br /&gt;
			&amp;#039;Abusefilter&amp;#039;,&lt;br /&gt;
			&amp;#039;Block&amp;#039;,&lt;br /&gt;
			&amp;#039;Log&amp;#039;,&lt;br /&gt;
			&amp;#039;Movepage&amp;#039;,&lt;br /&gt;
			&amp;#039;Newpages&amp;#039;,&lt;br /&gt;
			&amp;#039;Search&amp;#039;,&lt;br /&gt;
			&amp;#039;Upload&amp;#039;&lt;br /&gt;
		];&lt;br /&gt;
		var canonicalSpecialPageName = mw.config.get( &amp;#039;wgCanonicalSpecialPageName&amp;#039; );&lt;br /&gt;
		if ( specialGadgets.indexOf( canonicalSpecialPageName ) &amp;gt; -1 ) {&lt;br /&gt;
			mw.loader.load( &amp;#039;ext.gadget.common-special-&amp;#039; + canonicalSpecialPageName.toLowerCase() );&lt;br /&gt;
		}&lt;br /&gt;
	} else {&lt;br /&gt;
		// Скрипты для пространств имён&lt;br /&gt;
		var namespaceGadgets = {&lt;br /&gt;
			6: [ &amp;#039;ext.gadget.common-namespace-file&amp;#039; ]&lt;br /&gt;
		};&lt;br /&gt;
&lt;br /&gt;
		if ( namespaceGadgets[ namespaceNumber ] ) {&lt;br /&gt;
			mw.loader.load( namespaceGadgets[ namespaceNumber ] );&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}() );&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Старые коды&lt;br /&gt;
 */&lt;br /&gt;
if ( navigator.platform.indexOf( &amp;#039;Win&amp;#039; ) !== -1 ) {&lt;br /&gt;
	mw.loader.using( &amp;#039;mediawiki.util&amp;#039; ).done( function () {&lt;br /&gt;
		mw.util.addCSS( &amp;#039;.IPA, .Unicode { font-family: &amp;quot;Arial Unicode MS&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;; }&amp;#039; );&lt;br /&gt;
	} );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Дополнительный функционал для заглавной страницы&lt;br /&gt;
 */&lt;br /&gt;
if ( mw.config.get( &amp;#039;wgIsMainPage&amp;#039; ) &amp;amp;&amp;amp; mw.config.get( &amp;#039;wgAction&amp;#039; ) === &amp;#039;view&amp;#039; ) {&lt;br /&gt;
	mw.hook( &amp;#039;wikipage.content&amp;#039; ).add( function () {&lt;br /&gt;
		mw.loader.using( &amp;#039;mediawiki.util&amp;#039; ).done( function () {&lt;br /&gt;
			var el = mw.util.addPortletLink(&lt;br /&gt;
				&amp;#039;p-lang&amp;#039;,&lt;br /&gt;
				mw.config.get( &amp;#039;wgArticlePath&amp;#039; ).replace( /\$1/, &amp;#039;Википедия:Список_Википедий&amp;#039; ),&lt;br /&gt;
				&amp;#039;Полный список&amp;#039;,&lt;br /&gt;
				&amp;#039;interwiki-completelist&amp;#039;&lt;br /&gt;
			);&lt;br /&gt;
			if ( el ) {&lt;br /&gt;
				el.style.fontWeight = &amp;#039;bold&amp;#039;;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$( &amp;#039;#p-wikibase-otherprojects li.wb-otherproject-link a&amp;#039; ).each( function () {&lt;br /&gt;
				var $link = $( this ),&lt;br /&gt;
					url = $link.attr( &amp;#039;href&amp;#039; ).replace( &amp;#039;/Main_Page&amp;#039;, mw.util.wikiUrlencode( &amp;#039;/Заглавная_страница&amp;#039; ) );&lt;br /&gt;
				if ( $link.parent().hasClass( &amp;#039;wb-otherproject-mediawiki&amp;#039; ) ) {&lt;br /&gt;
					url = $link.attr( &amp;#039;href&amp;#039; ) + &amp;#039;/ru&amp;#039;;&lt;br /&gt;
				}&lt;br /&gt;
				$link.attr( &amp;#039;href&amp;#039;, url );&lt;br /&gt;
			} );&lt;br /&gt;
		} );&lt;br /&gt;
	} );&lt;br /&gt;
	&lt;br /&gt;
	// Закрываем меню при клике за его пределами&lt;br /&gt;
	mw.hook( &amp;#039;wikipage.content&amp;#039; ).add( function () {&lt;br /&gt;
		var target, collapsible,&lt;br /&gt;
			$items =  $( &amp;#039;.main-footer-menu&amp;#039; );&lt;br /&gt;
			&lt;br /&gt;
		document.body.addEventListener( &amp;#039;click&amp;#039;, function ( event ) {&lt;br /&gt;
		    target = $( event.target ).parents( &amp;#039;.main-footer-menu&amp;#039; ).get( 0 );&lt;br /&gt;
		    $items.each( function () {&lt;br /&gt;
		    	collapsible = $( this ).data( &amp;#039;mw-collapsible&amp;#039; );&lt;br /&gt;
		        if ( collapsible &amp;amp;&amp;amp; this !== target ) {&lt;br /&gt;
		            collapsible.collapse();&lt;br /&gt;
		        }&lt;br /&gt;
		    } );&lt;br /&gt;
		}, true );&lt;br /&gt;
	} );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Выполнение скриптов из пространства MediaWiki, указанных в URL&lt;br /&gt;
 * См. также https://www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL&lt;br /&gt;
 */&lt;br /&gt;
var withJS = location.href.match( /[&amp;amp;?]withjs=((mediawiki:)?([^&amp;amp;&amp;lt;&amp;gt;=#]+\.js))/i );&lt;br /&gt;
if ( withJS ) {&lt;br /&gt;
	importScript_( &amp;#039;MediaWiki:&amp;#039; + withJS[3] );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Код, который нужно выполнить как можно раньше. Он выполняется, если загружен подвал страницы,&lt;br /&gt;
 * иначе же ждёт наступления события wikipage.content (см. выше определение runAsEarlyAsPossible&lt;br /&gt;
 * и ниже про wikipage.content).&lt;br /&gt;
 */&lt;br /&gt;
runAsEarlyAsPossible( function () {&lt;br /&gt;
	/**&lt;br /&gt;
	 * {{Выполнить скрипт}}&lt;br /&gt;
	 */&lt;br /&gt;
	$( &amp;#039;.executeJS&amp;#039; ).each( function () {&lt;br /&gt;
		var names = $( this ).data( &amp;#039;scriptnames&amp;#039; );&lt;br /&gt;
		if (names) {&lt;br /&gt;
			names.split( &amp;#039; &amp;#039; ).forEach( function ( name ) {&lt;br /&gt;
				name = name.replace( /[^\w_-]/g, &amp;#039;&amp;#039; );&lt;br /&gt;
				if ( name ) {&lt;br /&gt;
					importScript( &amp;#039;MediaWiki:Script/&amp;#039; + name + &amp;#039;.js&amp;#039; );&lt;br /&gt;
				}&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
	} );&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Чтобы ссылки на очистку кэша не требовали подтверждения (они должны быть помещены в тег с классом&lt;br /&gt;
	 * purgelink и именем страницы в атрибуте data-pagename, например как в шаблоне {{Очистить кэш}})&lt;br /&gt;
	 */&lt;br /&gt;
	$( &amp;#039;.purgelink a&amp;#039; ).click( function ( e ) {&lt;br /&gt;
		mw.loader.using( [ &amp;#039;mediawiki.api&amp;#039;, &amp;#039;mediawiki.util&amp;#039; ] ).done( function () {&lt;br /&gt;
			var pageName = $( this ).parent( &amp;#039;.purgelink&amp;#039; ).data( &amp;#039;pagename&amp;#039; ) || mw.config.get( &amp;#039;wgPageName&amp;#039; );&lt;br /&gt;
			new mw.Api().post( {&lt;br /&gt;
				action: &amp;#039;purge&amp;#039;,&lt;br /&gt;
				titles: pageName&lt;br /&gt;
			} ).then( function () {&lt;br /&gt;
				var url = mw.util.getUrl( pageName );&lt;br /&gt;
				if ( e.ctrlKey ) {&lt;br /&gt;
					if ( !window.open( url ) ) {&lt;br /&gt;
						location.assign( url );&lt;br /&gt;
					}&lt;br /&gt;
				} else {&lt;br /&gt;
					location.assign( url );&lt;br /&gt;
				}&lt;br /&gt;
			}, function () {&lt;br /&gt;
				mw.notify( &amp;#039;Не удалось очистить кэш.&amp;#039;, { type: &amp;#039;error&amp;#039; } );&lt;br /&gt;
			} );&lt;br /&gt;
			e.preventDefault();&lt;br /&gt;
		} );&lt;br /&gt;
	} );&lt;br /&gt;
}, $( &amp;#039;#footer&amp;#039; ), mw.hook( &amp;#039;wikipage.content&amp;#039; ).add );&lt;br /&gt;
&lt;br /&gt;
// По какой-то причине фикс для FlaggedRevs работает только при использовании then(), но не done().&lt;br /&gt;
mw.loader.using( &amp;#039;ext.visualEditor.desktopArticleTarget.init&amp;#039; ).then( function () {&lt;br /&gt;
	/**&lt;br /&gt;
	 * Исправление поведения FlaggedRevs в сочетании с визуальным редактором, чтобы&lt;br /&gt;
	 * в стабилизированных статьях на правку в визреде открывалась последняя версия, что&lt;br /&gt;
	 * соответствует поведению обычного редактора. См. [[phab:T165283]],&lt;br /&gt;
	 * [[Википедия:Форум/Архив/Общий/2017/12#Серьёзная проблема с анонимными правками в стабилизированных статьях]].&lt;br /&gt;
	 */&lt;br /&gt;
	runAsEarlyAsPossible( function () {&lt;br /&gt;
		function fixEditLinksForStableRevs( removeClickHandlers ) {&lt;br /&gt;
			if ( $( &amp;#039;#ca-view.selected&amp;#039; ).length ) {&lt;br /&gt;
				// При выходе из визреда (сохранении или переключении) ссылки работают правильно&lt;br /&gt;
				// и убирать обработчики событий нет нужды — только исправить URL’ы на случай&lt;br /&gt;
				// открытия правки в новой вкладке.&lt;br /&gt;
				if ( removeClickHandlers ) {&lt;br /&gt;
					$( &amp;#039;#ca-ve-edit, .mw-editsection-visualeditor&amp;#039; ).off( &amp;#039;click&amp;#039; );&lt;br /&gt;
				}&lt;br /&gt;
				$( &amp;#039;#ca-ve-edit a, .mw-editsection-visualeditor&amp;#039; ).each( function () {&lt;br /&gt;
					var href = $( this ).attr( &amp;#039;href&amp;#039; );&lt;br /&gt;
					if ( !/[?&amp;amp;]stable=0/.test( href ) ) {&lt;br /&gt;
						$( this ).attr( &amp;#039;href&amp;#039;,&lt;br /&gt;
							href&lt;br /&gt;
								.replace( /&amp;amp;veaction=edit/, &amp;#039;&amp;amp;stable=0&amp;amp;veaction=edit&amp;#039; )&lt;br /&gt;
								.replace( /&amp;amp;oldid=\d+/,  &amp;#039;&amp;#039; )&lt;br /&gt;
						);&lt;br /&gt;
					}&lt;br /&gt;
				} );&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Не включаем сюда проверку на наличие #ca-view.selected, чтобы не вычёркивать случай,&lt;br /&gt;
		// когда визред открыт без Ajax и по выходу из него нужно заменить URL’ы в ссылках.&lt;br /&gt;
		if ( $( &amp;#039;#ca-current&amp;#039; ).length &amp;amp;&amp;amp; !/[?&amp;amp;](oldid|diff)=\d+/.test( location.search ) ) {&lt;br /&gt;
			fixEditLinksForStableRevs( true );&lt;br /&gt;
		&lt;br /&gt;
			mw.hook( &amp;#039;ve.deactivationComplete&amp;#039; ).add( function () {&lt;br /&gt;
				fixEditLinksForStableRevs( false );&lt;br /&gt;
			} );&lt;br /&gt;
		}&lt;br /&gt;
	} );&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
mw.hook( &amp;#039;ve.loadModules&amp;#039; ).add( function( addPlugin ) {&lt;br /&gt;
	/**&lt;br /&gt;
	 * Поддержка Викификатора в новом режиме вики-текста aka 2017 wikitext editor&lt;br /&gt;
	 */&lt;br /&gt;
	addPlugin( function () {&lt;br /&gt;
		return mw.loader.using( &amp;#039;ext.gadget.wikificator&amp;#039; );&lt;br /&gt;
	} );&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * {{TOC hidden}}&lt;br /&gt;
 */&lt;br /&gt;
function TOChidden() {&lt;br /&gt;
	$( &amp;#039;.tochidden-wrapper &amp;gt; #toc &amp;gt; #toctogglecheckbox&amp;#039; ).prop(&amp;#039;checked&amp;#039;, true );&lt;br /&gt;
	$( &amp;#039;.tochidden-wrapper&amp;#039; ).attr( &amp;quot;class&amp;quot;, &amp;quot;toc-wrapper&amp;quot; );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
runAsEarlyAsPossible( function () {&lt;br /&gt;
	if ( $( &amp;#039;.tochidden-wrapper&amp;#039; ).length ) {&lt;br /&gt;
		mw.loader.using( [ &amp;#039;mediawiki.cookie&amp;#039; ] ).done( function () {&lt;br /&gt;
			if ( mw.cookie.get( &amp;#039;hidetoc&amp;#039; ) === null ) {&lt;br /&gt;
				$.when( mw.loader.using( [ &amp;#039;mediawiki.toc&amp;#039; ] ), $.ready ).then( TOChidden );&lt;br /&gt;
			}&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
}, $( &amp;#039;#toc&amp;#039; ), mw.hook( &amp;#039;wikipage.content&amp;#039; ).add );&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Код, выполняемый по событию wikipage.content (его обработчики выполняются раньше колбэков для $,&lt;br /&gt;
 * хотя в глубине это одно и то же событие, просто колбэк, инициирующий wikipage.content, становится&lt;br /&gt;
 * в очередь раньше). Так как wikipage.content инициируется после обновления страницы в результате&lt;br /&gt;
 * Ajax-запросов (например, гаджетом быстрого предпросмотра), не добавляйте сюда коды, которые&lt;br /&gt;
 * должны гарантированно выполниться не более одного раза на странице.&lt;br /&gt;
 */&lt;br /&gt;
mw.hook( &amp;#039;wikipage.content&amp;#039; ).add( function () {&lt;br /&gt;
	/**&lt;br /&gt;
	 * Отключение обтекания раздела примечаний, если в нём есть колонки.&lt;br /&gt;
	 * Короткие (до 15 ссылок, если общее число символов не менее 3000) списки примечаний обтекаются&lt;br /&gt;
	 * только справа.&lt;br /&gt;
	 */&lt;br /&gt;
	$( &amp;#039;.reflist.columns&amp;#039; ).each( function () {&lt;br /&gt;
		var clear = &amp;#039;both&amp;#039;,&lt;br /&gt;
			$refs = $( this ).find( &amp;#039;ol.references &amp;gt; li&amp;#039; );&lt;br /&gt;
		if ( $refs.length &amp;lt;= 10 ) return;&lt;br /&gt;
		if ( $refs.length &amp;lt;= 15 &amp;amp;&amp;amp; $refs.text().length &amp;lt; 3000 ) {&lt;br /&gt;
			clear = &amp;#039;left&amp;#039;;&lt;br /&gt;
		}&lt;br /&gt;
		$( this )&lt;br /&gt;
			.prevUntil( &amp;#039;h1, h2, h3, h4, h5, h6&amp;#039; )&lt;br /&gt;
			.addBack()&lt;br /&gt;
			.first()&lt;br /&gt;
			.prev()&lt;br /&gt;
			.css( &amp;#039;clear&amp;#039;, clear );&lt;br /&gt;
	} );&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Imagemap Highlight&lt;br /&gt;
	 */&lt;br /&gt;
	// На странице есть как минимум один элемент .imageMapHighlighter, а браузер поддерживает &amp;lt;canvas&amp;gt;&lt;br /&gt;
	if ( $( &amp;#039;.imageMapHighlighter&amp;#039; ).length &amp;amp;&amp;amp; $( &amp;#039;&amp;lt;canvas&amp;gt;&amp;#039; )[ 0 ].getContext ) {&lt;br /&gt;
		importScript( &amp;#039;MediaWiki:Imagemap-Highlight.js&amp;#039; );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * imgToggle&lt;br /&gt;
	 */&lt;br /&gt;
	// На странице есть как минимум один элемент div.img_toggle&lt;br /&gt;
	if ( $( &amp;#039;div.img_toggle&amp;#039; ).length ) {&lt;br /&gt;
		mw.loader.load( &amp;#039;ext.gadget.imgToggle&amp;#039; );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Авторазбиение списков на колонки. Будет работать только для однострочных списков. 35em&lt;br /&gt;
	 * (из Mediawiki:Common.css) является предварительным числом, а фактическое будет посчитано исходя&lt;br /&gt;
	 * из ширины элементов. Должно использоваться только для UL внутри DIV. Пример использования —&lt;br /&gt;
	 * шаблон {{Wikidata/SisterCities}}.&lt;br /&gt;
	 */&lt;br /&gt;
	$(&amp;quot;div.autocolumns&amp;quot;).each(function(d, div) {&lt;br /&gt;
		var parentWidth = $(div).parent()[0].offsetWidth;&lt;br /&gt;
		if (!parentWidth) return;&lt;br /&gt;
&lt;br /&gt;
		var maxWidth = 0;&lt;br /&gt;
		var elements = 0;&lt;br /&gt;
		$(div).find(&amp;quot;ul&amp;gt;li&amp;quot;).each(function(l, li) {&lt;br /&gt;
			elements++;&lt;br /&gt;
			var jLi = $(li);&lt;br /&gt;
			if (jLi.children().length != jLi.contents().length)&lt;br /&gt;
				jLi.wrapInner(document.createElement(&amp;quot;span&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
			var liWidth = 0;&lt;br /&gt;
			jLi.children().each(function(c, child) {&lt;br /&gt;
				liWidth += child.offsetWidth;&lt;br /&gt;
			});&lt;br /&gt;
			if (liWidth &amp;gt; maxWidth)&lt;br /&gt;
				maxWidth = liWidth;&lt;br /&gt;
		});&lt;br /&gt;
		if ( maxWidth === 0 ) return;&lt;br /&gt;
		// UL/LI bullet width + padding&lt;br /&gt;
		maxWidth += 22.5 * 2;&lt;br /&gt;
&lt;br /&gt;
		var maxColumns = &amp;quot;&amp;quot; + Math.ceil( elements / 5 );&lt;br /&gt;
		$(div).css({&amp;quot;-moz-columns&amp;quot;: maxWidth + &amp;quot;px &amp;quot; + maxColumns, &amp;quot;columns&amp;quot; : maxWidth + &amp;quot;px &amp;quot; + maxColumns});&lt;br /&gt;
	});&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Кнопки описания правок для визуального редактора&lt;br /&gt;
 */&lt;br /&gt;
mw.hook( &amp;#039;ve.activationComplete&amp;#039; ).add( function () {&lt;br /&gt;
	mw.loader.load( &amp;#039;ext.gadget.summaryButtons&amp;#039; );&lt;br /&gt;
} );&lt;br /&gt;
&lt;br /&gt;
/*WikiEditor/Викификатор*/&lt;br /&gt;
if ( $.inArray( mw.config.get( &amp;#039;wgAction&amp;#039; ), [&amp;#039;edit&amp;#039;, &amp;#039;submit&amp;#039;] ) !== -1 ) {&lt;br /&gt;
        mw.loader.load( &amp;#039;//ru.wikipedia.org/w/index.php?title=MediaWiki:Gadget-wikificator.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;#039; );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var customizeToolbar = function() {&lt;br /&gt;
&lt;br /&gt;
$( &amp;#039;#wpTextbox1&amp;#039; ).wikiEditor( &amp;#039;addToToolbar&amp;#039;, {&lt;br /&gt;
        &amp;#039;section&amp;#039;: &amp;#039;advanced&amp;#039;,&lt;br /&gt;
        &amp;#039;group&amp;#039;: &amp;#039;format&amp;#039;,&lt;br /&gt;
        &amp;#039;tools&amp;#039;: {&lt;br /&gt;
                &amp;#039;wikify&amp;#039;: {&lt;br /&gt;
                        label: &amp;#039;Викификатор&amp;#039;,&lt;br /&gt;
                        type: &amp;#039;button&amp;#039;,&lt;br /&gt;
                        icon: &amp;#039;//upload.wikimedia.org/wikipedia/commons/0/06/Wikify-toolbutton.png&amp;#039;,&lt;br /&gt;
                             action: {&lt;br /&gt;
                                  type: &amp;#039;callback&amp;#039;,&lt;br /&gt;
                                       execute: function(context){&lt;br /&gt;
                                              Wikify();&lt;br /&gt;
                                       } &lt;br /&gt;
                             }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
} );&lt;br /&gt;
};&lt;br /&gt;
 &lt;br /&gt;
if ( $.inArray( mw.config.get( &amp;#039;wgAction&amp;#039; ), [&amp;#039;edit&amp;#039;, &amp;#039;submit&amp;#039;] ) !== -1 ) {&lt;br /&gt;
        mw.loader.using( &amp;#039;user.options&amp;#039;, function () {&lt;br /&gt;
                if ( mw.user.options.get(&amp;#039;usebetatoolbar&amp;#039;) ) {&lt;br /&gt;
                        mw.loader.using( &amp;#039;ext.wikiEditor.toolbar&amp;#039;, function () {&lt;br /&gt;
                                $(document).ready( customizeToolbar );&lt;br /&gt;
                        } );&lt;br /&gt;
                }&lt;br /&gt;
        } );&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Andras</name></author>
	</entry>
</feed>