Замечание: Возможно, после публикации вам придётся очистить кэш своего браузера, чтобы увидеть изменения.

  • Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl+F5 или Ctrl+R (⌘+R на Mac)
  • Google Chrome: Нажмите Ctrl+Shift+R (⌘+Shift+R на Mac)
  • Internet Explorer / Edge: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl+F5
  • Opera: Нажмите Ctrl+F5.
/**
 * Sort interwiki links according to a preference table
 * 
 * First revision was imported from https://no.wikipedia.org/wiki/MediaWiki:Interwiki-links.js
 * Original description [[:no:Wikipedia:Sortering av interwiki-lenker]]
 * 
 */
// <nowiki>

(function () {

function main() {
	'use strict';
	
	// Guard against multiple inclusions
	if ( typeof window.InterwikiLinks === 'object' ) return;
	
	var IWL,
		conf = mw.config.get( [
			'wgContentLanguage',
			'wgUserLanguage',
			'wgUseUserLanguage',
			'wgLangPrefs',
			'wgAddLangHints'
		] );
	
	IWL = window.InterwikiLinks = {
		langLinks: {}
		/**
		 * Runs before $( document ).ready() and before translation is available
		 * (important event-binders should be attached as fast as possible)
		 */
		, preinstall: function () {
			// make sure we in fact have a array
			if ( !conf.wgLangPrefs ) {
				conf.wgLangPrefs = [];
			}
			conf.wgLangPrefs.push( conf.wgUserLanguage );
			// choose and adjust lists for prefered languages
			for ( var i = 0; i < conf.wgLangPrefs.length; i++ ) {
				conf.wgLangPrefs[ conf.wgLangPrefs[ i ] ] = 1;
				IWL.langLinks[ conf.wgLangPrefs[ i ] ] = 1;
			}
		}
	    , install: function () {
			// get data structures for nameing and sorting of languages
			// this will block any languages that isn't defined
			
			if ( typeof wgLangNames[ conf.wgUserLanguage ] == 'object' ) {
				// reorganize wgLangNames so we can use it for sorting
				IWL.langNames = {};
				var sortedNames = Object.keys( wgLangNames[ conf.wgUserLanguage ] );
				if ( sortedNames.length > 0 ) {
					sortedNames = sortedNames.map( function ( value, index ) {
						// Language name, code
						return [ wgLangNames[ conf.wgUserLanguage ][ value ], value ];
					} ).sort( function ( a, b ) {
						// Sort by language name
						a = a[ 0 ].toUpperCase();
						b = b[ 0 ].toUpperCase();
						
						return ( a < b ? -1 : ( a > b ? 1 : 0 ) );
					} );
				}
				
				for ( var i = 0; i < sortedNames.length; i++ ) {
					var lang = sortedNames[ i ][ 1 ];
					IWL.langNames[ lang ] = [ sortedNames[ i ][ 0 ], i ];
				}
			} else {
				return;
			}
			// wait for document.readyState
			mw.hook( 'wikipage.content' ).add(IWL.start);
		}
		, sort: function ( a, b ) {
			try {
				return IWL.langNames[ a.className.replace( /^.*?interwiki-/, '' ).replace( /\s.*$/, '' ) ][ 1 ] -
				       IWL.langNames[ b.className.replace( /^.*?interwiki-/, '' ).replace( /\s.*$/, '' ) ][ 1 ];
			} catch ( e ) {
				/* just skip this if its happens to fail, but then the link might be placed a bit random */
			}
		}
		, start: function () {
			// locate iw-links, and the container
			var container = document.getElementById( 'p-lang' );
			if ( !container ) return;
			var ul = container.getElementsByTagName( 'ul' );
			if ( !ul || ul.length != 1 ) return;
			ul = ul[ 0 ];
			var c = container.getElementsByTagName( 'li' );
			if ( !c ) return;
			
			// loop over the iw-links, translate names and
			// separate those we know how to sort from the rest
			// and add babel links
			var childs = [];
			var keeps = [];
			var adds = [];
			for ( var i = 0; i < c.length; i++ ) {
				if ( typeof IWL.langNames != 'undefined' ) {
					if ( c[ i ].className == 'wbc-editpage' ) {
						adds.push( c[ i ] );
						continue;
					}
					var s = c[ i ].className;
					if ( s.indexOf( 'interwiki-' ) === 0 ) continue;
					s = s.replace( /^.*?interwiki-/, '' ).replace( /\s.*$/, '' );
					var a = c[ i ].getElementsByTagName( 'a' );
					
					// localize language names
					try {
						if ( conf.wgUseUserLanguage ) {
							if ( typeof IWL.langNames[ s ] != 'undefined'
								&& typeof IWL.langNames[ s ][ 0 ] == 'string'
							) {
								if ( a.length ) {
									a[ 0 ].innerHTML = IWL.langNames[ s ][ 0 ];
									a[ 0 ].lang = 'ru';
								}
							}
						}
					} catch ( e ) { /* just skip this */ }
					// add hints for language names
					try {
						if ( conf.wgAddLangHints ) {
							if ( typeof IWL.langNames[ s ] != 'undefined'
								&& typeof IWL.langNames[ s ][ 0 ] == 'string'
							) {
								a[ 0 ].setAttribute( 'title', decodeURIComponent( a[ 0 ].getAttribute( 'href' )
										.replace( /^.*?\/wiki\/(.*)$/, '$1' ) )
										.replace( /_/g, ' ' ) +
									' — ' + IWL.langNames[ s ][ 0 ]
								);
							}
						}
					} catch ( e ) { /* just skip this */ }
					// check if we have any odd link
					try {
						if ( conf.wgUseUserLanguage
							&& typeof IWL.langNames[ s ] != 'undefined'
							&& typeof IWL.langNames[ s ][ 1 ] == 'number' ) {
							childs.push( c[ i ] );
						} else {
							adds.push( c[ i ] );
						}
					} catch ( e ) { /* just skip this */ }
				} else {
					childs.push( c[ i ] );
				}
			}
			// sort the childs according to definitions used by sortIWlinks
			if ( conf.wgUseUserLanguage ) {
				childs = childs.sort( IWL.sort );
			}
			// reinsert those we didn't know how to sort into the list of children
			for ( i = 0; i < adds.length; i++ ) {
				childs.push( adds[ i ] );
			}
			// move one block to the top
			try {
				// separate out those that shall be moved to the top
				var link;
				for ( i = 0; i < childs.length; i++ ) {
					// the following test fails if there are several classes for the actual child
					link = IWL.langLinks[
						childs[ i ].className.replace( /^.*?interwiki-/, '' ).replace( /\s.*$/, '' )
					];
					if ( link ) {
						keeps.push( childs[ i ] );
					}
				}
				// reorganize the list of children
				var n = childs.length;
				for ( i = childs.length - 1; i >= 0; i-- ) {
					link = IWL.langLinks[
						childs[ i ].className.replace( /^.*?interwiki-/, '' ).replace( /\s.*$/, '' )
					];
					if ( link ) {
						childs[ i ].className += ' iw-focus';
					} else {
						keeps[ --n ] = childs[ i ];
					}
				}
			} catch ( e ) { /* just skip this */ }
			// remove all existing children and reinsert from our own list
			if ( keeps.length ) {
				var child;
				while ( ( child = ul.firstChild ) !== null ) {
					ul.removeChild( child );
				}
				for ( i = 0; i < keeps.length; i++ ) {
					ul.appendChild( keeps[ i ] );
				}
			}
		}
	};
	
	// bail out for debugging
	if ( typeof wgDebugIWlang != 'undefined' && wgDebugIWlang ) return;
	
	IWL.preinstall();
	
	wgLangNames = {};
	wgLangNames.ru = {
		'aa': 'афар',
		'ab': 'абхазский',
		'ace': 'ачехский',
		'ady': 'адыгейский',
		'af': 'африкаанс',
		'ak': 'акан',
		'als': 'алеманнские (немецкий)',
		'alt': 'алтайский',
		'am': 'амхарский',
		'an': 'арагонский',
		'ang': 'древнеанглийский',
		'ar': 'арабский',
		'arc': 'арамейский',
		'ary': 'марокканский диалект арабского',
		'arz': 'египетский (арабский)',
		'as': 'ассамский',
		'ast': 'астурийский',
		'atj': 'атикамек',
		'av': 'аварский',
		'awa': 'авадхи',
		'ay': 'аймара',
		'az': 'азербайджанский',
		'azb': 'иранский азербайджанский',
		'ba': 'башкирский',
		'ban': 'балийский',
		'bar': 'баварский (немецкий)',
		'bat-smg': 'жемайтский (литовский)',
		'bcl': 'центральный бикольский',
		'be': 'белорусский',
		'be-tarask': 'белорусский (тарашкевица)',
		'be-x-old': 'белорусский (тарашкевица)',
		'bg': 'болгарский',
		'bh': 'бходжпури',
		'bi': 'бислама',
		'bjn': 'банджарский',
		'bm': 'бамана',
		'bn': 'бенгальский',
		'bo': 'тибетский',
		'bpy': 'бишнуприя-манипури',
		'br': 'бретонский',
		'bs': 'боснийский',
		'bug': 'бугийский',
		'bxr': 'бурятский',
		'ca': 'каталанский',
		'cbk-zam': 'чабакано',
		'cdo': 'восточноминьский (китайский)',
		'ce': 'чеченский',
		'ceb': 'себуанский',
		'ch': 'чаморро',
		'cho': 'чокто',
		'chr': 'чероки',
		'chy': 'шайенский',
		'ckb': 'сорани',
		'co': 'корсиканский',
		'cr': 'языки кри',
		'crh': 'крымскотатарский',
		'cs': 'чешский',
		'csb': 'кашубский',
		'cu': 'старославянский',
		'cv': 'чувашский',
		'cy': 'валлийский',
		'da': 'датский',
		'de': 'немецкий',
		'din': 'динка',
		'diq': 'южный зазаки',
		'dsb': 'нижнелужицкий',
		'dty': 'дотияли',
		'dv': 'мальдивский',
		'dz': 'дзонг-кэ',
		'ee': 'эве',
		'el': 'греческий',
		'eml': 'эмилиано-романьольский',
		'en': 'английский',
		'eo': 'эсперанто',
		'es': 'испанский',
		'et': 'эстонский',
		'eu': 'баскский',
		'ext': 'эстремадурский',
		'fa': 'персидский',
		'ff': 'фула',
		'fi': 'финский',
		'fiu-vro': 'выруский',
		'fj': 'фиджийский',
		'fo': 'фарерский',
		'fr': 'французский',
		'frp': 'франкопровансальский',
		'frr': 'севернофризский',
		'fur': 'фриульский',
		'fy': 'западнофризский',
		'ga': 'ирландский',
		'gag': 'гагаузский',
		'gan': 'гань',
		'gcr': 'гвианский креольский',
		'gd': 'шотландский (кельтский)',
		'gl': 'галисийский',
		'glk': 'гилянский',
		'gn': 'гуарани',
		'gom': 'конкани',
		'gor': 'горонтало',
		'got': 'готский',
		'gu': 'гуджарати',
		'gv': 'мэнский',
		'ha': 'хауса',
		'hak': 'хакка',
		'haw': 'гавайский',
		'he': 'иврит',
		'hi': 'хинди',
		'hif': 'фиджийский хинди',
		'ho': 'хири-моту',
		'hr': 'хорватский',
		'hsb': 'верхнелужицкий',
		'ht': 'гаитянский креольский',
		'hu': 'венгерский',
		'hy': 'армянский',
		'hyw': 'западноармянский',
		'hz': 'гереро',
		'ia': 'интерлингва',
		'id': 'индонезийский',
		'ie': 'интерлингве',
		'ig': 'игбо',
		'ii': 'носу',
		'ik': 'инупиак',
		'ilo': 'илоканский',
		'inh': 'ингушский',
		'io': 'идо',
		'is': 'исландский',
		'it': 'итальянский',
		'iu': 'инуктитут',
		'ja': 'японский',
		'jam': 'ямайский креольский',
		'jbo': 'ложбан',
		'jv': 'яванский',
		'ka': 'грузинский',
		'kaa': 'каракалпакский',
		'kab': 'кабильский',
		'kbd': 'кабардино-черкесский',
		'kbp': 'кабье',
		'kg': 'конго',
		'khw': 'кховар',
		'ki': 'кикуйю',
		'kj': 'кваньяма',
		'kk': 'казахский',
		'kl': 'гренландский',
		'km': 'кхмерский',
		'kn': 'каннада',
		'ko': 'корейский',
		'koi': 'коми-пермяцкий',
		'kr': 'канури',
		'krc': 'карачаево-балкарский',
		'ks': 'кашмирский',
		'ksh': 'рипуарские (немецкий)',
		'ku': 'курдский',
		'kv': 'коми-зырянский',
		'kw': 'корнский',
		'ky': 'киргизский',
		'la': 'латинский',
		'lad': 'сефардский',
		'lb': 'люксембургский',
		'lbe': 'лакский',
		'lez': 'лезгинский',
		'lfn': 'лингва франка нова',
		'lg': 'луганда',
		'li': 'лимбургский',
		'lij': 'лигурийский',
		'lld': 'ладинский',
		'lmo': 'ломбардский',
		'ln': 'лингала',
		'lo': 'лаосский',
		'lrc': 'севернолурский',
		'lt': 'литовский',
		'ltg': 'латгальский',
		'lv': 'латышский',
		'lzh': 'вэньянь',
		'mad': 'мадурский',
		'mai': 'майтхили',
		'map-bms': 'баньюмасанский',
		'mdf': 'мокшанский',
		'mg': 'малагасийский',
		'mh': 'маршалльский',
		'mhr': 'марийский',
		'mi': 'маори',
		'min': 'минангкабау',
		'mk': 'македонский',
		'ml': 'малаялам',
		'mn': 'монгольский',
		'mni': 'манипури',
		'mnw': 'монский',
		'mo': 'молдавский диалект румынского',
		'mr': 'маратхи',
		'mrj': 'горномарийский',
		'ms': 'малайский',
		'mt': 'мальтийский',
		'mus': 'крикский',
		'mwl': 'мирандский',
		'my': 'бирманский',
		'myv': 'эрзянский',
		'mzn': 'мазандеранский',
		'na': 'науруанский',
		'nah': 'астекский',
		'nap': 'неаполитанский',
		'nds': 'нижненемецкий (немецкий)',
		'nds-nl': 'нижнесаксонский (нидерландский)',
		'ne': 'непальский',
		'new': 'неварский',
		'ng': 'ндонга',
		'nia': 'ниас',
		'nl': 'нидерландский',
		'nn': 'норвежский (нюнорск)',
		'no': 'норвежский (букмол)',
		'nov': 'новиаль',
		'nqo': 'нко',
		'nrm': 'нормандский',
		'nso': 'северный сото',
		'nv': 'навахо',
		'ny': 'ньянджа',
		'oc': 'окситанский',
		'olo': 'ливвиковский (карельский)',
		'om': 'оромо',
		'or': 'ория',
		'os': 'осетинский',
		'pa': 'восточный пенджаби',
		'pag': 'пангасинанский',
		'pam': 'капампанганский',
		'pap': 'папьяменто',
		'pcd': 'пикардский',
		'pdc': 'пенсильванский (немецкий)',
		'pfl': 'пфальцский (немецкий)',
		'pi': 'пали',
		'pih': 'норфолкский / питкэрнский',
		'pl': 'польский',
		'pms': 'пьемонтский',
		'pnb': 'западный пенджаби',
		'pnt': 'понтийский',
		'ps': 'пушту',
		'pt': 'португальский',
		'qu': 'кечуа',
		'rm': 'романшский',
		'rmy': 'влашские (цыганский)',
		'rn': 'рунди',
		'ro': 'румынский',
		'roa-rup': 'арумынский',
		'roa-tara': 'тарантинский',
		'ru': 'русский',
		'rue': 'русинский',
		'rw': 'руанда',
		'sa': 'санскрит',
		'sah': 'якутский',
		'sat': 'сантали',
		'sc': 'сардинский',
		'scn': 'сицилийский',
		'sco': 'шотландский (германский)',
		'sd': 'синдхи',
		'se': 'северносаамский',
		'sg': 'санго',
		'sh': 'сербохорватский',
		'shn': 'шанский',
		'si': 'сингальский',
		'simple': 'английский (упрощённый)',
		'sk': 'словацкий',
		'skr': 'сирайки',
		'sl': 'словенский',
		'sm': 'самоанский',
		'smn': 'инари-саамский',
		'sn': 'шона',
		'so': 'сомалийский',
		'sq': 'албанский',
		'sr': 'сербский',
		'srn': 'сранан-тонго',
		'ss': 'свати',
		'st': 'сесото',
		'stq': 'восточнофризский',
		'su': 'сунданский',
		'sv': 'шведский',
		'sw': 'суахили',
		'szl': 'силезский',
		'szy': 'сакизайя',
		'ta': 'тамильский',
		'tcy': 'тулу',
		'te': 'телугу',
		'tet': 'тетум',
		'tg': 'таджикский',
		'th': 'тайский',
		'ti': 'тигринья',
		'tk': 'туркменский',
		'tl': 'тагальский',
		'tn': 'тсвана',
		'to': 'тонганский',
		'tpi': 'ток-писин',
		'tr': 'турецкий',
		'ts': 'тсонга',
		'tt': 'татарский',
		'tum': 'тумбука',
		'tw': 'чви',
		'ty': 'таитянский',
		'tyv': 'тувинский',
		'udm': 'удмуртский',
		'ug': 'уйгурский',
		'uk': 'украинский',
		'ur': 'урду',
		'uz': 'узбекский',
		've': 'венда',
		'vec': 'венетский',
		'vep': 'вепсский',
		'vi': 'вьетнамский',
		'vls': 'западнофламандский',
		'vo': 'волапюк',
		'wa': 'валлонский',
		'war': 'варайский',
		'wo': 'волоф',
		'wuu': 'у',
		'xal': 'калмыцкий',
		'xh': 'коса',
		'xmf': 'мегрельский',
		'yi': 'идиш',
		'yo': 'йоруба',
		'za': 'чжуанский',
		'zea': 'зеландский',
		'zh': 'китайский',
		'zh-classical': 'китайский (вэньянь)',
		'zh-min-nan': 'южноминьский',
		'zh-yue': 'юэ',
		'zu': 'зулу'
	};
	IWL.install();
}

var wgLangNames, wgDebugIWlang;

mw.loader.using( [ 'user.options'], function () {
	// Нестрогое сравнение, потому что формат значений нестабилен, см. [[phab:T54542]]
	if ( mw.user.options.get( 'compact-language-links' ) != 1 ) {
		mw.loader.using('ext.uls.interface').then( main );
	}
});

}());

// </nowiki>