MediaWiki:Gadget-sidebarRelated.js

Материал из Универсал-вики
Перейти к навигации Перейти к поиску

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

  • Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl-F5 или Ctrl-R (⌘-R на Mac)
  • Google Chrome: Нажмите Ctrl-Shift-R (⌘-Shift-R на Mac)
  • Internet Explorer: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl-F5
  • Opera: Перейдите в Menu → Настройки (Opera → Настройки на Mac), а затем Безопасность → Очистить историю посещений → Кэшированные изображения и файлы
// Переместить ссылку на элемент Викиданных в секцию «В других проектах»
function addOtherProjects() {
	var $pLang = $( '#p-lang' );
	if ( !$pLang.length ||
		mw.config.get( 'wgAction' ) !== 'view' ||
		mw.config.get( 'wgNamespaceNumber' ) % 2 ||
		mw.config.get( 'wgWikibaseItemId' ) === null
	) {
		return;
	}

	function initMove( $el, $list ) {
		// ToDo: Временно вернуть ссылку на элемент в Викиданных в монобуке, см. [[PHAB:T254485]]
		var $tWikibase = $( '#t-wikibase' );
		if ( $tWikibase.length === 0 && mw.config.get( 'wgWikibaseItemId' ) ) {
			mw.util.addPortletLink(
				'p-tb',
				'https://www.wikidata.org/wiki/' + mw.config.get( 'wgWikibaseItemId' ),
				'Элемент Викиданных',
				't-wikibase',
				'Ссылка на связанный элемент репозитория данных [g]',
				'g'
			);
		}
			
		var $pOtherLink = $( '#t-wikibase' ).clone()
			.addClass( 'wb-otherproject-link wb-otherproject-wikidata' )
			.css( 'display', 'list-item' )
			.removeAttr( 'id' )
			.appendTo( $list );
		$( '#t-wikibase' ).remove();
		$pOtherLink.attr( 'id', 't-wikibase' );

		if ( $list.children().length ) {
			$el.insertBefore( $pLang );
		}
	}

	function moveWikidataElementLink() {
		// Найти блок «Печать/экспорт»
		// (id различается в зависимости от пространства имён)
		var $pPrintExport = $( '#p-coll-print_export,#p-electronpdfservice-sidebar-portlet-heading' );
		if ( $pPrintExport.length === 0 ) {
			return;
		}
		
		// Клонировать «Печать/экспорт»
		$pOther = $pPrintExport
			.clone()
			.removeClass( 'emptyPortlet' )
			.attr( 'id', 'p-wikibase-otherprojects' );
			
		var $pOtherLabel = $pOther.find( 'h3' );
		$pOtherList = $pOther.find( 'ul' ).empty();
		$pOtherLabel.text( mw.msg( 'wikibase-otherprojects' ) );

		if ( cfSkin === 'vector' ) {
			$pOther.attr( 'aria-labelledby', 'p-wikibase-otherprojects-label' );
			$pOtherLabel.attr( 'id', 'p-wikibase-otherprojects-label' );
		}

		initMove( $pOther, $pOtherList );
	}

	var $pOther = $( '#p-wikibase-otherprojects' );
	var $pOtherList = $pOther.find( 'ul' );
	var cfSkin = mw.config.get( 'skin' );

	if ( $pOther.length > 0 ) {
		$pOther.removeClass( 'emptyPortlet' );
		initMove( $pOther, $pOtherList );
	} else {
		// Секции не существует, создать новую
		if ( mw.config.get( 'wgUserLanguage' ) === 'ru' ) {
			mw.messages.set( 'wikibase-otherprojects', 'В других проектах' );
			moveWikidataElementLink();
		} else {
			$.when( mw.loader.using( [ 'mediawiki.api' ] ) )
				.then( function () {
					// Загрузить системные сообщения
					return new mw.Api().loadMessagesIfMissing( [
						'wikibase-otherprojects'
					] );
				} )
				.then( moveWikidataElementLink );
		}
	}
}

// In case other projects copypaste the code and forget to implement
// runAsEarlyAsPossible() in MediaWiki:Common.js, which is too easy a mistake to
// make to not account for.
if ( typeof runAsEarlyAsPossible === 'undefined' ) {
	$( addOtherProjects );
} else {
	runAsEarlyAsPossible( addOtherProjects );
}