MediaWiki:Gadget-ondemand-mainPage.js

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
JS-код ниже относится к скрытому гаджету ondemand-mainPage. Он вызывается по умолчанию на страницах в категории Википедия:Заглавная страница.

После сохранения или недавних изменений очистите кэш браузера.

/**
 * Дополнительный функционал для заглавной страницы
 * 
 * Вынесено из [[MediaWiki:Common.js]] 2023-03-27
*/
if ( mw.config.get( 'wgIsMainPage' ) && mw.config.get( 'wgAction' ) === 'view' ) {
	mw.hook( 'wikipage.content' ).add( () => {
		mw.loader.using( 'mediawiki.util' ).done( () => {
			mw.util.addCSS( '.ruwiki-interwiki-completelist { font-weight: bold; }' );
			
			// Ссылка на полный список Википедий
			var isNewVector = mw.config.get( 'skin' ) === 'vector-2022';
			var fullListId = 'ruwiki-interwiki-completelist';
			var el = mw.util.addPortletLink(
				isNewVector ? 'p-lang-btn' : 'p-lang',
				mw.util.getUrl( 'Википедия:Список Википедий' ),
				'Полный список',
				fullListId
			);
			el.classList.add( el.id );

			if ( el ) {
				$( '#p-lang-btn-checkbox' ).on( 'click', () => {
					var ulsHasFullList = document.querySelector( '.uls-language-block #' + fullListId ) !== null;
					if ( ulsHasFullList ) {
						return;
					}
					setTimeout( () => {
						$( '.uls-language-block' ).first().find( 'ul' ).last().append( el );
					} );
				} );
			}

			// Исправление ссылок на русские версии
			$( '#p-wikibase-otherprojects li.wb-otherproject-link a' ).each( ( i, el ) => {
				var $link = $( el ),
					url = $link.attr( 'href' ).replace( '/Main_Page', mw.util.wikiUrlencode( '/Заглавная_страница' ) );
				var parentClass = $link.parent().attr( 'class' );
				if ( parentClass.includes( '-mediawiki' ) || parentClass.includes( '-meta' ) ) {
					url = $link.attr( 'href' ) + '/ru';
				}
				$link.attr( 'href', url );
			} );
		} );

		// Закрываем меню при клике за его пределами
		var target, collapsible,
			$items =  $( '.main-footer-menu' );
			
		document.body.addEventListener( 'click', function ( event ) {
		    target = $( event.target ).parents( '.main-footer-menu' ).get( 0 );
		    $items.each( function () {
		    	collapsible = $( this ).data( 'mw-collapsible' );
		        if ( collapsible && this !== target ) {
		            collapsible.collapse();
		        }
		    } );
		}, true );
	} );
}