MediaWiki:Gadget-interwiki.js

Iz Medžuviki, svobodnoj enciklopedije
Jump to navigation Jump to search

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
// Update from https://intuition.toolforge.org/wpAvailableLanguages.js.php - Last update: Wed, 28 Jun 2023 19:53:02 +0000
window.wpAvailableLanguages={"aa":"Qafár af","ab":"аԥсшәа","abs":"bahasa ambon","ace":"Acèh","acm":"عراقي","ady":"адыгабзэ","ady-cyrl":"адыгабзэ","aeb":"تونسي \/ Tûnsî","aeb-arab":"تونسي","aeb-latn":"Tûnsî","af":"Afrikaans","agq":"Aghem","ak":"Akan","aln":"Gegë","als":"Alemannisch","alt":"алтай тил","am":"አማርኛ","ami":"Pangcah","an":"aragonés","ang":"Ænglisc","ann":"Obolo","anp":"अंगिका","ar":"العربية","arc":"ܐܪܡܝܐ","arn":"mapudungun","arq":"جازايرية","ary":"الدارجة","arz":"مصرى","as":"অসমীয়া","ase":"American sign language","ast":"asturianu","atj":"Atikamekw","av":"авар","avk":"Kotava","awa":"अवधी","ay":"Aymar aru","az":"azərbaycanca","azb":"تۆرکجه","ba":"башҡортса","bag":"Tuki","ban":"Basa Bali","ban-bali":"ᬩᬲᬩᬮᬶ","bar":"Boarisch","bas":"Basaa","bat-smg":"žemaitėška","bax":"Bamum","bbc":"Batak Toba","bbc-latn":"Batak Toba","bbj":"Ghomála'","bcc":"جهلسری بلوچی","bci":"wawle","bcl":"Bikol Central","be":"беларуская","be-tarask":"беларуская (тарашкевіца)","be-x-old":"беларуская (тарашкевіца)","bew":"Betawi","bfd":"Bafut","bg":"български","bgn":"روچ کپتین بلوچی","bh":"भोजपुरी","bho":"भोजपुरी","bi":"Bislama","bjn":"Banjar","bkc":"Baka","bkh":"Bakoko","bkm":"Kom","blk":"ပအိုဝ်ႏဘာႏသာႏ","bm":"bamanankan","bn":"বাংলা","bo":"བོད་ཡིག","bpy":"বিষ্ণুপ্রিয়া মণিপুরী","bqi":"بختیاری","bqz":"Mka'a","br":"brezhoneg","brh":"Bráhuí","bs":"bosanski","btm":"Batak Mandailing","bto":"Iriga Bicolano","bug":"ᨅᨔ ᨕᨘᨁᨗ","bxr":"буряад","byv":"Medumba","ca":"català","cak":"Kaqchikel","cbk-zam":"Chavacano de Zamboanga","cdo":"閩東語 \/ Mìng-dĕ̤ng-ngṳ̄","ce":"нохчийн","ceb":"Cebuano","ch":"Chamoru","cho":"Chahta anumpa","chr":"ᏣᎳᎩ","chy":"Tsetsêhestâhese","ckb":"کوردی","cnh":"Hakha Chin","co":"corsu","cps":"Capiceño","cr":"Nēhiyawēwin \/ ᓀᐦᐃᔭᐍᐏᐣ","crh":"qırımtatarca","crh-cyrl":"къырымтатарджа (Кирилл)","crh-latn":"qırımtatarca (Latin)","crh-ro":"tatarşa","cs":"čeština","csb":"kaszëbsczi","cu":"словѣньскъ \/ ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ","cv":"чӑвашла","cy":"Cymraeg","da":"dansk","dag":"dagbanli","de":"Deutsch","de-at":"Österreichisches Deutsch","de-ch":"Schweizer Hochdeutsch","de-formal":"Deutsch (Sie-Form)","dga":"Dagaare","din":"Thuɔŋjäŋ","diq":"Zazaki","dsb":"dolnoserbski","dtp":"Dusun Bundu-liwan","dty":"डोटेली","dua":"Duala","dv":"ދިވެހިބަސް","dz":"ཇོང་ཁ","ee":"eʋegbe","egl":"Emiliàn","el":"Ελληνικά","eml":"emiliàn e rumagnòl","en":"English","en-ca":"Canadian English","en-gb":"British English","en-us":"American English","eo":"Esperanto","es":"español","es-419":"español de América Latina","es-formal":"español (formal)","et":"eesti","eto":"Eton","etu":"Ejagham","eu":"euskara","ewo":"Ewondo","ext":"estremeñu","fa":"فارسی","fat":"mfantse","ff":"Fulfulde","fi":"suomi","fit":"meänkieli","fiu-vro":"võro","fj":"Na Vosa Vakaviti","fkv":"kvääni","fmp":"Fe'fe'","fo":"føroyskt","fon":"fɔ̀ngbè","fr":"français","frc":"français cadien","frp":"arpetan","frr":"Nordfriisk","fur":"furlan","fy":"Frysk","ga":"Gaeilge","gaa":"Ga","gag":"Gagauz","gan":"贛語","gan-hans":"赣语(简体)","gan-hant":"贛語(繁體)","gcr":"kriyòl gwiyannen","gd":"Gàidhlig","gl":"galego","gld":"на̄ни","glk":"گیلکی","gn":"Avañe'ẽ","gom":"गोंयची कोंकणी \/ Gõychi Konknni","gom-deva":"गोंयची कोंकणी","gom-latn":"Gõychi Konknni","gor":"Bahasa Hulontalo","got":"\ud800\udf32\ud800\udf3f\ud800\udf44\ud800\udf39\ud800\udf43\ud800\udf3a","gpe":"Ghanaian Pidgin","grc":"Ἀρχαία ἑλληνικὴ","gsw":"Alemannisch","gu":"ગુજરાતી","guc":"wayuunaiki","gur":"farefare","guw":"gungbe","gv":"Gaelg","gya":"Gbaya","ha":"Hausa","hak":"客家語\/Hak-kâ-ngî","haw":"Hawaiʻi","he":"עברית","hi":"हिन्दी","hif":"Fiji Hindi","hif-latn":"Fiji Hindi","hil":"Ilonggo","hno":"ہندکو","ho":"Hiri Motu","hr":"hrvatski","hrx":"Hunsrik","hsb":"hornjoserbsce","hsn":"湘语","ht":"Kreyòl ayisyen","hu":"magyar","hu-formal":"magyar (formal)","hy":"հայերեն","hyw":"Արեւմտահայերէն","hz":"Otsiherero","ia":"interlingua","id":"Bahasa Indonesia","ie":"Interlingue","ig":"Igbo","igl":"Igala","ii":"ꆇꉙ","ik":"Iñupiatun","ike-cans":"ᐃᓄᒃᑎᑐᑦ","ike-latn":"inuktitut","ilo":"Ilokano","inh":"гӀалгӀай","io":"Ido","is":"íslenska","isu":"Isu","it":"italiano","iu":"ᐃᓄᒃᑎᑐᑦ \/ inuktitut","ja":"日本語","jam":"Patois","jbo":"la .lojban.","jut":"jysk","jv":"Jawa","ka":"ქართული","kaa":"Qaraqalpaqsha","kab":"Taqbaylit","kbd":"адыгэбзэ","kbd-cyrl":"адыгэбзэ","kbp":"Kabɩyɛ","kcg":"Tyap","kea":"kabuverdianu","ker":"Kera","kg":"Kongo","khw":"کھوار","ki":"Gĩkũyũ","kiu":"Kırmancki","kj":"Kwanyama","kjh":"хакас","kjp":"ဖၠုံလိက်","kk":"қазақша","kk-arab":"قازاقشا (تٴوتە)","kk-cn":"قازاقشا (جۇنگو)","kk-cyrl":"қазақша (кирил)","kk-kz":"қазақша (Қазақстан)","kk-latn":"qazaqşa (latın)","kk-tr":"qazaqşa (Türkïya)","kl":"kalaallisut","km":"ភាសាខ្មែរ","kn":"ಕನ್ನಡ","ko":"한국어","ko-kp":"조선말","koi":"перем коми","kr":"kanuri","krc":"къарачай-малкъар","kri":"Krio","krj":"Kinaray-a","krl":"karjal","ks":"कॉशुर \/ کٲشُر","ks-arab":"کٲشُر","ks-deva":"कॉशुर","ksf":"Bafia","ksh":"Ripoarisch","ksw":"စှီၤ","ku":"kurdî","ku-arab":"كوردي (عەرەبی)","ku-latn":"kurdî (latînî)","kum":"къумукъ","kus":"Kʋsaal","kv":"коми","kw":"kernowek","ky":"кыргызча","la":"Latina","lad":"Ladino","lb":"Lëtzebuergesch","lbe":"лакку","lem":"Nomaande","lez":"лезги","lfn":"Lingua Franca Nova","lg":"Luganda","li":"Limburgs","lij":"Ligure","liv":"Līvõ kēļ","lki":"لەکی","lld":"Ladin","lmo":"lombard","ln":"lingála","lns":"Lamnso'","lo":"ລາວ","loz":"Silozi","lrc":"لۊری شومالی","lt":"lietuvių","ltg":"latgaļu","lus":"Mizo ţawng","luz":"لئری دوٙمینی","lv":"latviešu","lzh":"文言","lzz":"Lazuri","mad":"Madhurâ","mag":"मगही","mai":"मैथिली","map-bms":"Basa Banyumasan","mcn":"vùn màsànà","mcp":"Maka","mdf":"мокшень","mg":"Malagasy","mh":"Ebon","mhr":"олык марий","mi":"Māori","min":"Minangkabau","mk":"македонски","ml":"മലയാളം","mn":"монгол","mni":"ꯃꯤꯇꯩ ꯂꯣꯟ","mnw":"ဘာသာ မန်","mo":"молдовеняскэ","mos":"moore","mr":"मराठी","mrh":"Mara","mrj":"кырык мары","ms":"Bahasa Melayu","ms-arab":"بهاس ملايو","mt":"Malti","mua":"Mundang","mus":"Mvskoke","mwl":"Mirandés","my":"မြန်မာဘာသာ","myv":"эрзянь","mzn":"مازِرونی","na":"Dorerin Naoero","nah":"Nāhuatl","nan":"Bân-lâm-gú","nan-hani":"閩南語","nap":"Napulitano","nb":"norsk bokmål","nds":"Plattdüütsch","nds-nl":"Nedersaksies","ne":"नेपाली","new":"नेपाल भाषा","ng":"Oshiwambo","nge":"Ngémba","nia":"Li Niha","niu":"Niuē","nl":"Nederlands","nl-informal":"Nederlands (informeel)","nla":"Ngombala","nmg":"Kwasio","nmz":"nawdm","nn":"norsk nynorsk","nnh":"Ngiemboon","nnz":"Nda'nda'","no":"norsk","nod":"ᨣᩤᩴᨾᩮᩬᩥᨦ","nog":"ногайша","nov":"Novial","nqo":"ߒߞߏ","nrm":"Nouormand","nso":"Sesotho sa Leboa","nv":"Diné bizaad","ny":"Chi-Chewa","nyn":"runyankore","nys":"Nyunga","oc":"occitan","ojb":"Ojibwemowin","olo":"livvinkarjala","om":"Oromoo","or":"ଓଡ଼ିଆ","os":"ирон","osa-latn":"Wažáže íe","ota":"لسان عثمانى","pa":"ਪੰਜਾਬੀ","pag":"Pangasinan","pam":"Kapampangan","pap":"Papiamentu","pap-aw":"Papiamento","pcd":"Picard","pcm":"Naijá","pdc":"Deitsch","pdt":"Plautdietsch","pfl":"Pälzisch","pi":"पालि","pih":"Norfuk \/ Pitkern","pl":"polski","pms":"Piemontèis","pnb":"پنجابی","pnt":"Ποντιακά","prg":"prūsiskan","ps":"پښتو","pt":"português","pt-br":"português do Brasil","pwn":"pinayuanan","qu":"Runa Simi","quc":"Qatzijob\\ʼal","qug":"Runa shimi","rgn":"Rumagnôl","rif":"Tarifit","rki":"ရခိုင်","rm":"rumantsch","rmc":"romaňi čhib","rmf":"kaalengo tšimb","rmy":"romani čhib","rn":"ikirundi","ro":"română","roa-rup":"armãneashti","roa-tara":"tarandíne","rsk":"руски","ru":"русский","rue":"русиньскый","rup":"armãneashti","ruq":"Vlăheşte","ruq-cyrl":"Влахесте","ruq-latn":"Vlăheşte","rw":"Ikinyarwanda","rwr":"मारवाड़ी","ryu":"沖縄口","sa":"संस्कृतम्","sah":"саха тыла","sat":"ᱥᱟᱱᱛᱟᱲᱤ","sc":"sardu","scn":"sicilianu","sco":"Scots","sd":"سنڌي","sdc":"Sassaresu","sdh":"کوردی خوارگ","se":"davvisámegiella","se-fi":"davvisámegiella (Suoma bealde)","se-no":"davvisámegiella (Norgga bealde)","se-se":"davvisámegiella (Ruoŧa bealde)","sei":"Cmique Itom","ses":"Koyraboro Senni","sg":"Sängö","sgs":"žemaitėška","sh":"srpskohrvatski \/ српскохрватски","sh-cyrl":"српскохрватски (ћирилица)","sh-latn":"srpskohrvatski (latinica)","shi":"Taclḥit","shi-latn":"Taclḥit","shi-tfng":"ⵜⴰⵛⵍⵃⵉⵜ","shn":"ၽႃႇသႃႇတႆး ","shy":"tacawit","shy-latn":"tacawit","si":"සිංහල","simple":"Simple English","sjd":"кӣллт са̄мь кӣлл","sje":"bidumsámegiella","sju":"ubmejesámiengiälla","sk":"slovenčina","skr":"سرائیکی","skr-arab":"سرائیکی","sl":"slovenščina","sli":"Schläsch","sm":"Gagana Samoa","sma":"åarjelsaemien","smj":"julevsámegiella","smn":"anarâškielâ","sms":"nuõrttsääʹmǩiõll","sn":"chiShona","so":"Soomaaliga","sq":"shqip","sr":"српски \/ srpski","sr-ec":"српски (ћирилица)","sr-el":"srpski (latinica)","srn":"Sranantongo","sro":"sardu campidanesu","srq":"mbia cheë","ss":"SiSwati","st":"Sesotho","stq":"Seeltersk","sty":"себертатар","su":"Sunda","sv":"svenska","sw":"Kiswahili","syl":"ꠍꠤꠟꠐꠤ","szl":"ślůnski","szy":"Sakizaya","ta":"தமிழ்","tay":"Tayal","tcy":"ತುಳು","tdd":"ᥖᥭᥰᥖᥬᥳᥑᥨᥒᥰ","te":"తెలుగు","tet":"tetun","tg":"тоҷикӣ","tg-cyrl":"тоҷикӣ","tg-latn":"tojikī","th":"ไทย","ti":"ትግርኛ","tk":"Türkmençe","tl":"Tagalog","tly":"tolışi","tly-cyrl":"толыши","tn":"Setswana","to":"lea faka-Tonga","tok":"toki pona","tpi":"Tok Pisin","tr":"Türkçe","tru":"Ṫuroyo","trv":"Seediq","ts":"Xitsonga","tt":"татарча \/ tatarça","tt-cyrl":"татарча","tt-latn":"tatarça","tum":"chiTumbuka","tvu":"Tunen","tw":"Twi","ty":"reo tahiti","tyv":"тыва дыл","tzm":"ⵜⴰⵎⴰⵣⵉⵖⵜ","udm":"удмурт","ug":"ئۇيغۇرچە \/ Uyghurche","ug-arab":"ئۇيغۇرچە","ug-latn":"Uyghurche","uk":"українська","ur":"اردو","uz":"oʻzbekcha \/ ўзбекча","uz-cyrl":"ўзбекча","uz-latn":"oʻzbekcha","ve":"Tshivenda","vec":"vèneto","vep":"vepsän kel’","vi":"Tiếng Việt","vls":"West-Vlams","vmf":"Mainfränkisch","vmw":"emakhuwa","vo":"Volapük","vot":"Vaďďa","vro":"võro","vut":"Vute","wa":"walon","wal":"wolaytta","war":"Winaray","wes":"Pidgin (Cameroon)","wls":"Fakaʻuvea","wo":"Wolof","wuu":"吴语","wuu-hans":"吴语(简体)","wuu-hant":"吳語(正體)","wya":"Wyandot","xal":"хальмг","xh":"isiXhosa","xmf":"მარგალური","xsy":"saisiyat","yas":"Nugunu","yat":"Yambeta","yav":"Yangben","ybb":"Yemba","yi":"ייִדיש","yo":"Yorùbá","yrl":"Nhẽẽgatú","yue":"粵語","yue-hans":"粵语(简体)","yue-hant":"粵語(繁體)","za":"Vahcuengh","zea":"Zeêuws","zgh":"ⵜⴰⵎⴰⵣⵉⵖⵜ ⵜⴰⵏⴰⵡⴰⵢⵜ","zh":"中文","zh-classical":"文言","zh-cn":"中文(中国大陆)","zh-hans":"中文(简体)","zh-hant":"中文(繁體)","zh-hk":"中文(香港)","zh-min-nan":"Bân-lâm-gú","zh-mo":"中文(澳門)","zh-my":"中文(马来西亚)","zh-sg":"中文(新加坡)","zh-tw":"中文(臺灣)","zh-yue":"粵語","zu":"isiZulu"};

// <nowiki>
// Show Wikipedia interwiki links from Wikidata ID
// Use with [[d:Q1]]
// </nowiki>
( function() {
	// Suggested languages
	var suggestedLangs = [
		'en',

		'bg',
		'be',
		'be-tarask', 'be-x-old',
		'bs',
		'cs',
		'csb',
		'cu',
		'dsb',
		'hr',
		'hsb',
		'mk',
		'pl',
		'ru',
		'rue',
		'sh',
		'sk',
		'sl',
		'sr',
		'szl',
		'uk'
	];

	// Ignore global Wikimedia wikis
	var ignoredWikis = [
		'commonswiki',
		'incubatorwiki',
		'mediawikiwiki',
		'metawiki',
		'sourceswiki',
		'specieswiki',
		'wikidatawiki',
		'wikimaniawiki',
		'outreachwiki'
	];

	// Should match [[MediaWiki:Interlanguage-link-d]]
	var wdLinkLabel = 'Element Vikidanyh';

	// Response caching time in seconds (1 hour)
	var cachingTime = 60 * 60;

	// Re-used variables
	var id;
	var isMinerva = mw.config.get( 'skin' ) === 'minerva';
	var isVector2022 = mw.config.get( 'skin' ) === 'vector-2022';
	var langOverlay;

	var $wdItem;
	var $listItem;
	
	// Link counts
	var linkCount = 0;
	var regularLinkCount = 0;

	// Internal script data
	var iwData = {
		useBadges: true,
		listSelector: '#p-lang ul',
		wdItemPlacement: '#t-info',

		wdGadgetId: '#t-wikibase',
		wdSelector: '.interwiki-d'
	}
	
	// Change some variables in Minerva
	if ( isMinerva ) {
		Object.assign( iwData, {
			useBadges: false,
			showAll: true,
			listSelector: '.all-languages',
			wdItemPlacement: '.suggested-languages li:last-child',
			
			wdSelector: '.all-languages li',

			// Minerva-specific options
			suggestedListSelector: '.suggested-languages',
			autonymSelector: '.autonym',
			titleSelector: '.title'
		} );
	}

	// Change some variables in Vector 2022
	if ( isVector2022 ) {
		function vector2022AfterRender() {
			mw.loader.using( 'mediawiki.api' ).then( function() {
				new mw.Api().loadMessagesIfMissing( [
					'vector-language-button-label',
					'vector-language-button-aria-label'
				] ).then( function() {
					$( '#p-lang-btn' )	
						.removeClass( [ 'mw-portlet-empty',  'oo-ui-pendingElement-pending' ] )
						.addClass( [ 'mw-portlet', 'mw-portlet-lang' ] );
					
					$( '#p-lang-btn-checkbox' ).attr( 'aria-label', mw.message(
						'vector-language-button-aria-label',
						mw.language.convertNumber( linkCount ) ).text()
					);

					$( '#p-lang-btn-label .vector-menu-heading-label' ).text( mw.message(
						'vector-language-button-label',
						mw.language.convertNumber( linkCount ) ).text()
					);
				} );
			} );
		}
		
		var $vectorLangList = $( '#p-lang-btn .vector-menu-content-list' );
		$vectorLangList.before( $vectorLangList.clone().empty() );

		Object.assign( iwData, {
			showAll: true,
			suggestedListSelector: '#p-lang-btn .vector-menu-content-list:first-child',
			listSelector: '#p-lang-btn .vector-menu-content-list:last-child',

			afterRender: vector2022AfterRender
		} );
	}

	/**
	 * @returns Wikidata item ID.
	 */
	function getWdItem() {
		$wdItem = $( iwData.wdSelector );
		var $link = $wdItem.find( 'a' );
		var newId = null;
		
		if ( $link.length ) {
			newId = $link.attr( 'href' ).match( /Q(\d+)$/g );
		}
		return ( newId ? newId[ 0 ] : null );
	}

	/**
	 * @param name Wiki database name.
	 * @returns Language code.
	 */
	function getLangCode( name ) {
		return name.substring( 0, name.length - 4 ).replace( /_/g, '-' );
	}

	/**
	 * Check if the code is suggested.
	 * 
	 * @param code Language code.
	 * @returns True if suggested / false if not.
	 */
	function isSuggested( code ) {
		return suggestedLangs.indexOf( code ) > -1;
	}

	/**
	 * Render toggle button if not present
	 * 
	 * @param $list HTML element where the button will work.
	 */
	function renderToggleButton( $list ) {
		if ( $( '.ext-gadget-interwiki-trigger' ).length ) return;

		var $button = $( '<button>' ).addClass( 'mw-ui-button ext-gadget-interwiki-trigger' );
		$button.text( 'Ješče ' + regularLinkCount );
		$button.on( 'click', function( e ) {
			$list.find( 'li:hidden' ).show();
			$( this ).remove();
		} );
		$list.after( $button );
	}

	/**
	 * Get interwiki list item.
	 * 
	 * @param code Language code for the site.
	 * @param data Site data.
	 * @returns jQuery list item.
	 */
	function getListItem( code, data ) {
		var name = wpAvailableLanguages[ code ];
		if ( !name ) {
			console.warn( 'ext.gadget.interwiki: no name for ' + code + ' found. Gadget probably has to be updated.' );
		}

		var $item = $listItem.clone();
		$item.addClass( 'interwiki-' + code );
		linkCount++;
		if ( !isSuggested( code ) ) {
			if ( !iwData.showAll ) $item.hide();
			regularLinkCount++;
		}

		// Add all badges
		if ( iwData.useBadges && data.badges.length ) {
			$item.addClass( 'badge-' + data.badges.join( ' badge-' ) );
		}

		// Modify cloned link
		var $link = $item.find( 'a' );
		$link.addClass( code )
			.attr( 'href', data.url )
			.attr( 'lang', code )
			.attr( 'hreflang', code );
		
		var linkTitle = data.title + ' — ' + name;
		if ( name && name.length > 0 ) {
			name = name.charAt( 0 ).toUpperCase() + name.slice( 1 );
		}
		if ( iwData.autonymSelector && iwData.titleSelector ) {
			$link.find( iwData.autonymSelector ).text( name );
			$link.find( iwData.titleSelector ).text( data.title );
		} else {
			$link.attr( 'title', linkTitle ).text( name );
		}

		return $item;
	}

	/**
	 * Render a list of language links
	 * 
	 * @param data Array with site link data.
	 */
	function renderIwList( data ) {
		linkCount = 0;
		regularLinkCount = 0;

		// Clean up Wikidata link
		var $wdItemLink = $wdItem.find( 'a' );
		$wdItemLink
			.removeAttr( 'lang' ).removeAttr( 'hreflang' )
			.removeClass( 'd' );
		$wdItem.removeClass( 'interwiki-d' );
		$listItem = $wdItem.clone();

		// Render the list
		var $langList = $( iwData.listSelector );
		var lastInserted = null;
		for ( var i = 0; i < data.length; i++ ) {
			var item = data[ i ];
			var code = getLangCode( item.site );
			var notInserted = true;
			var listItem = getListItem( code, item );

			// Choose a list to insert if needed
			var $list = $langList;
			if ( iwData.suggestedListSelector && isSuggested( code ) ) {
				if ( iwData.suggestedListSelector === iwData.listSelector ) {
					if ( lastInserted !== null ) {
						$list.find( '.interwiki-' + lastInserted ).after( listItem );
					} else {
						$list.prepend( listItem );
					}

					lastInserted = code;
					notInserted = false;
				} else {
					$list = $( iwData.suggestedListSelector );
				}
			}
			if ( notInserted ) $list.append( listItem );
		}
		
		// Add label if missing
		var $labelTarget = $wdItemLink;
		if ( iwData.autonymSelector ) {
			$labelTarget = $wdItemLink.find( iwData.autonymSelector );
		}
		if ( $labelTarget.text() === '' ) {
			$labelTarget.text( wdLinkLabel );
		}

		// Move or update link to Wikidata
		var $wdExistingItem = $( iwData.wdGadgetId );
		if ( $wdExistingItem.length ) {
			$wdExistingItem.html( $wdItem.html() );
			
			$wdItem.remove();
		} else {
			$wdItem.removeAttr( 'class' ).attr( 'id', 't-wikibase' );
			$wdItem.insertAfter( iwData.wdItemPlacement );
		}
		
		if ( iwData.afterRender ) iwData.afterRender();

		// Show hidden links if there are few of them
		if ( iwData.showAll ) return;
		if ( regularLinkCount <= 2 || linkCount <= 11 ) {
			$langList.find( 'li:hidden' ).show();
			return;
		}

		renderToggleButton( $langList );
	}

	/**
	 * Filter data from non-Wikipedias and sort it.
	 * 
	 * @param data Request response.
	 * @returns Filtered array with site link data.
	 */
	function filterData( data ) {
		return Object.keys( data )
			.filter( function( key ) {
				return ignoredWikis.indexOf( key ) === -1
					&& key.substr( -4 ) === 'wiki'
			} )
			.sort( function( a, b ) {
				// Wikidata response is sorted wrong
				return getLangCode( a ) > getLangCode( b );
			} )
			.map( function( key ) {
				var result = data[ key ] || {};
				result.lang = getLangCode( key );
				result.autonym = wpAvailableLanguages[ getLangCode( key ) ] || '';
				result.langname = result.autonym;
				
				return result;
			} );
	}

	/**
	 * Request interwiki links for current item.
	 * 
	 * @returns jQuery promise with the data.
	 */
	function requestIwLinks() {
		id = getWdItem();
		if ( id === null ) return;

		return $.get( {
			url: 'https://www.wikidata.org/w/api.php',
			data: {
				format: 'json',
				action: 'wbgetentities',
				origin: '*',
				ids: id,
				props: 'sitelinks/urls',
				utf8: true,
				maxage: cachingTime,
				smaxage: cachingTime
			}
		} ).done( function( response ) {
			var data;
			if ( response ) {
				response = response.entities;
				var keys = Object.keys( response );
				data = response[ keys[ 0 ] ].sitelinks;
			}
	
			if ( data ) {
				data = filterData( data );
				renderIwList( data );
				
				// Minerva search support
				if ( langOverlay ) {
					langOverlay.options.languages = data;
				}
			}
		} );
	}

	/**
	 * Custom Minerva setup.
	 */
	function setupOnMinerva( overlay ) {
		langOverlay = overlay;
		var $langListHeader = null;

		// Callback
		iwData.afterRender = function() {
			langOverlay.$languageItems = langOverlay.$el.find( 'a' );
			
			if ( !$langListHeader ) {
				return;
			}
			$langListHeader.text(
				$langListHeader.text() + '(' + regularLinkCount + ')'
			);
		}

		// Add suggested languages section
		$langListHeader = $( langOverlay.$subheaders[ 0 ] );
		var $suggestedList = $( langOverlay.$el ).find( iwData.listSelector ).clone();
		$suggestedList.removeClass( 'all-languages' )
			.addClass( 'suggested-languages' )
			.empty();

		var $suggestedListHeading = $langListHeader.clone();
		$suggestedListHeading.text( langOverlay.options.suggestedLanguagesHeader );

		$langListHeader.before( $suggestedList );
		$suggestedList.before( $suggestedListHeading );
		
		langOverlay.$siteLinksList = langOverlay.$el.find( '.site-link-list' );
		langOverlay.$subheaders = langOverlay.$el.find( 'h3' );

		// Remove link number
		$langListHeader.text( $langListHeader.text().replace( /\(\d+\)$/, '' ) );

		$( requestIwLinks );
	}

	// Fire events
	if ( isMinerva ) {
		mw.hook( 'mobileFrontend.languageSearcher.onOpen' ).add( function( overlay ) {
			setupOnMinerva( overlay );
		} );
	} else {
		mw.hook( 'wikipage.content' ).add( requestIwLinks );
	}
}() );