Benutzer:Fomafix/Gadget-redirectcategories.js

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen

Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Strg+F5
/*
 * This gadget shows redirects with their categories below of the categories of the article.
 * 
 * @author Fomafix, 2015-2023
 * dependencies=mediawiki.api,mediawiki.jqueryMsg,mediawiki.Title,mediawiki.util
 *global mw, $
 */
( function () {
	if ( !mw.config.get( 'wgArticleId' ) ) {
		return;
	}

	mw.loader.using( [ 'mediawiki.api', 'mediawiki.jqueryMsg', 'mediawiki.Title', 'mediawiki.util' ] )
	.then( function () {
		var api = new mw.Api(), apiPromise;

		function getRedirectCategories( titles ) {
			return api.get( {
				formatversion: 2,
				action: 'query',
				generator: 'redirects',
				prop: 'categories|pageprops|redirects',
				grdlimit: 500,
				cllimit: 500,
				rdlimit: 500,
				titles: titles,
				'continue': null
			} );
		}

		mw.messages.set( {
			'redirectcategories-redirect': '{{PLURAL:$1|Weiterleitung|Weiterleitungen}}'
		} );

		apiPromise = getRedirectCategories( mw.config.get( 'wgPageName' ) );

		mw.hook( 'wikipage.categories' ).add( function ( $categories ) {
			apiPromise.then( function ( data ) {
				if ( !data.query ) {
					return;
				}
				var $redirects = $( '<ul>' );
				data.query.pages.forEach( function ( page ) {
					var displaytitle = page.pageprops && page.pageprops.displaytitle,
						wikibase_item = page.pageprops && page.pageprops.wikibase_item,
						intentional = page.pageprops && page.pageprops['wikibase-badge-Q70894304'],
						$list,
						$redirect = $( '<li>' )
						.append(
							$( '<a>' )
							.attr( {
								href: mw.util.getUrl(
									page.title,
									{ redirect: 'no' }
								),
								title: page.title
							} )
							.addClass( 'mw-redirect' )
							.html( displaytitle || mw.html.escape( page.title ) )
						);
					if ( wikibase_item ) {
						var $link = $( '<a>' )
							.attr( {
								href: 'https://www.wikidata.org/wiki/' + wikibase_item,
								title: wikibase_item
							} )
							.text( wikibase_item );
						if ( !intentional ) {
							$link.css( 'color', 'red' );
						}
						$redirect.append( ' (', $link, ')' );
					}
					if ( page.categories ) {
						$list = $( '<ul>' );
						page.categories.forEach( function ( category ) {
							var title = new mw.Title( category.title );
							$list.append(
								$( '<li>' ).append(
									$( '<a>' )
									.attr( {
										href: title.getUrl(),
										title: title.getPrefixedText()
									} )
									.text( title.getMainText() )
								)
							);
						} );
						$redirect.append( ': ', $list );
					}
					if ( page.redirects ) {
						$list = $( '<ul>' );
						page.redirects.forEach( function ( redirect ) {
							$list.append(
								$( '<li>' ).append(
									$( '<a>' )
									.attr( {
										href: mw.util.getUrl(
											redirect.title,
											{ redirect: 'no' }
										),
										title: redirect.title
									} )
									.addClass( 'mw-redirect' )
									.text( redirect.title )
								)
							);
						} );
						$redirect.append(
							' (',
							mw.message( 'redirectcategories-redirect', page.redirects.length ).escaped(),
							': ',
							$list,
							')'
						);
					}
					$redirects.append( $redirect );
				} );
				if ( data[ 'continue' ] ) {
					$redirects.append(
						$( '<li>' )
						.text( '…' )
					);
				}
				$categories
				.removeClass( 'catlinks-allhidden' ) // Show catlinks box
				.append(
					$( '<div>' )
					.attr( 'id', 'redirects' )
					.append(
						$( '<a>' )
						.attr( {
							href: mw.util.getUrl( 'Wikipedia:Weiterleitung' ),
							title: 'Wikipedia:Weiterleitung'
						} )
						.text( mw.msg( 'redirectcategories-redirect', $redirects.children().length ) ),
						': ',
						$redirects
					)
				);
			} );
		} );
	} );
}() );