מדיה ויקי:סקריפטים/112.js

מתוך ויקיפדיה, האנציקלופדיה החופשית

הערה: לאחר הפרסום, ייתכן שיהיה צורך לנקות את זיכרון המטמון (cache) של הדפדפן כדי להבחין בשינויים.

  • פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload) או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
  • גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
  • אינטרנט אקספלורר / אדג': להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh) או ללחוץ על צירוף המקשים Ctrl-F5.
  • אופרה: ללחוץ על Ctrl-F5.
/*


Adds a "My links" section at the sidebar menu for personal links.

The links are defined at [[Special:MyPage/הקישורים שלי]].

Idea based on [[MediaWiki:Gadget-CustomSideBarLinks.js]].

Rewritten by [[User:Guycn2]] to adapt to vector-2022 and minerva,
among other layout adjustments.

__________________________________________________


הוספת תיבה "הקישורים שלי" בתפריט הצד, ליצירת קישורים אישיים.

הקישורים מוגדרים בדף [[מיחד:הדף שלי/הקישורים שלי]].

הרעיון מבוסס על [[מדיה ויקי:Gadget-CustomSideBarLinks.js]].

נכתב מחדש ע"י [[משתמש:Guycn2]],
לצורך התאמה לעיצוב וקטור 2022 ולתצוגת ניידים, בנוסף לתיקוני תצוגה אחרים.


*/

$( async () => {
	
	'use strict';
	
	const skin = mw.config.get( 'skin' );
	
	const menuHeadingText =
		mw.config.get( 'wgUserLanguage' ) === 'he' ? 'הקישורים שלי' : 'My links';
	
	let $communityMenu, $myLinksMenu, $menuHeading, $menuContent, $menuList;
	
	switch ( skin ) {
		
		case 'vector-2022':
			$communityMenu = $( '#p-community' );
			$myLinksMenu = $communityMenu.clone();
			$myLinksMenu.removeClass( 'mw-portlet-community' );
			$menuHeading = $myLinksMenu.children( '.vector-menu-heading' );
			$menuHeading.text( menuHeadingText );
			$menuContent = $myLinksMenu.children( '.vector-menu-content' );
			$menuList = $menuContent.children( 'ul' ).empty();
			break;
		
		case 'vector':
			$communityMenu = $( '#p-community' );
			$myLinksMenu = $communityMenu.clone();
			$myLinksMenu.removeClass( 'mw-portlet-community' );
			$myLinksMenu.attr( 'aria-labelledby', 'p-personal-links-label' );
			$menuHeading = $myLinksMenu.children( '.vector-menu-heading' );
			$menuHeading.attr( 'id', 'p-personal-links-label' );
			$menuHeading.children( '.vector-menu-heading-label' ).text( menuHeadingText );
			$menuContent = $myLinksMenu.children( '.vector-menu-content' );
			$menuList = $menuContent.children( 'ul' ).empty();
			break;
		
		case 'monobook':
			$communityMenu = $( '#p-community' );
			$myLinksMenu = $communityMenu.clone();
			$myLinksMenu.removeClass( 'mw-portlet-community' );
			$myLinksMenu.attr( 'aria-labelledby', 'p-personal-links-label' );
			$menuHeading = $myLinksMenu.children( '#p-community-label' );
			$menuHeading.attr( 'id', 'p-personal-links-label' ).text( menuHeadingText );
			$menuContent = $myLinksMenu.children( '.pBody' );
			$menuList = $menuContent.children( 'ul' ).empty();
			break;
		
		case 'timeless':
			$communityMenu = $( '#p-community' );
			$myLinksMenu = $communityMenu.clone();
			$myLinksMenu.attr( 'aria-labelledby', 'p-personal-links-label' );
			$menuHeading = $myLinksMenu.children( '#p-community-label' );
			$menuHeading.attr( 'id', 'p-personal-links-label' ).text( menuHeadingText );
			$menuContent = $myLinksMenu.children( '.mw-portlet-body' );
			$menuList = $menuContent.children( 'ul' ).empty();
			break;
		
		case 'minerva':
			$communityMenu = $( '#p-interaction' );
			$myLinksMenu = $communityMenu.clone();
			$menuList = $myLinksMenu.empty();
			break;
		
		default:
			return;
		
	}
	
	$myLinksMenu.attr( 'id', 'p-personal-links' ).insertBefore( $communityMenu );
	
	const params = {
		action: 'parse',
		page: `User:${ mw.config.get( 'wgUserName' ) }/הקישורים שלי`,
		prop: 'text',
		disablelimitreport: true,
		useskin: skin,
		mobileformat: skin === 'minerva'
	};
	
	await mw.loader.using( 'mediawiki.api' );
	
	let data, $outputElem;
	
	try {
		data = await new mw.Api().get( params );
		$outputElem = $( data.parse.text[ '*' ] );
	} catch ( e ) {
		return;
	}
	
	const $listItems = $outputElem.find( 'ul' ).children( 'li' );
	
	$listItems.each( function () {
		
		const $listItem = $( this );
		
		if ( skin === 'minerva' ) {
			
			$listItem.addClass( 'toggle-list-item' );
			
			const $links = $listItem.find( 'a' );
			
			$links.each( function () {
				
				const $link = $( this ), linkText = $link.text();
				
				$link
				.removeClass( 'external' )
				.addClass( 'toggle-list-item__anchor'  )
				.attr( 'data-mw', 'interface' )
				.empty()
				.append(
					$( '<span>' )
					.addClass( 'toggle-list-item__label' )
					.text( linkText )
					.css( 'margin-right', '1.07rem' )
				);
				
			} );
			
		} else {
			
			$listItem.addClass( 'mw-list-item' );
			
		}
		
		$listItem.appendTo( $menuList );
		
	} );
	
} );