MediaWiki:Gadget-sidebarRelated.js (MediaWiki&Gadget-sidebarRelatedQjs)
Перейти к навигации
Перейти к поиску
// Переместить ссылку на элемент Викиданных в секцию «В других проектах»
function addOtherProjects() {
var cfSkin = mw.config.get( 'skin' );
if (
mw.config.get( 'wgAction' ) !== 'view' ||
mw.config.get( 'wgNamespaceNumber' ) % 2 ||
mw.config.get( 'wgWikibaseItemId' ) === null
) {
return;
}
function initMove( $list ) {
var $tWikibase = $( '#t-wikibase' );
var $pOtherLink = $tWikibase.clone()
.addClass( 'wb-otherproject-link wb-otherproject-wikidata' )
.css( 'display', 'list-item' )
.appendTo( $list );
$tWikibase.remove();
}
function moveWikidataElementLink() {
// Найти блок «Печать/экспорт»
// (id различается в зависимости от пространства имён)
var $pPrintExport = $( '#p-coll-print_export,#p-electronpdfservice-sidebar-portlet-heading' );
if ( $pPrintExport.length === 0 ) {
return;
}
// Клонировать «Печать/экспорт»
$pOther = $pPrintExport
.first()
.clone()
.removeClass( 'emptyPortlet' )
.attr( 'id', 'p-wikibase-otherprojects' );
var labelSelector = 'h3';
if ( cfSkin === 'vector' ) {
labelSelector = '.vector-menu-heading-label';
}
if ( cfSkin === 'vector-2022' ) {
labelSelector = '.vector-menu-heading';
}
var $pOtherLabel = $pOther.find( labelSelector );
$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( $pOtherList );
// Вставить новый блок перед / после «На других языках» если есть, или в конец сайдбара
var $pLang = $( '#p-lang' );
var $mwSidebar = $pPrintExport.parent();
if( $pLang.length > 0 ) {
if ( cfSkin === 'timeless' ) {
$pOther.insertAfter( $pLang );
} else {
$pOther.insertBefore( $pLang );
}
} else if( $mwSidebar.length > 0 ) {
$pOther.appendTo( $mwSidebar );
}
}
var $pOther = $( '#p-wikibase-otherprojects' );
var $pOtherList = $pOther.find( 'ul' );
if ( $pOther.length > 0 ) {
$pOther.removeClass( 'emptyPortlet' );
initMove( $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 );
}