Zum Inhalt springen

Benutzer:Fomafix/Gadget-redirecttitle.js

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 22. Juli 2014 um 13:32 Uhr durch Fomafix (Diskussion | Beiträge) (Das Modul jquery.ui.tooltip (https://api.jqueryui.com/tooltip/) verwendet.). Sie kann sich erheblich von der aktuellen Version unterscheiden.

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
  • Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
/*
 * Dieses Gadget fügt bei Links auf Weiterleitungen das Weiterleitungsziel im Tooltip hinzu.
 */
mw.messages.set( 'redirect-title', '$1 → $2' );
mw.messages.set( 'redirect-title-fragment', '$1 → $2 # $3' );
/* If you just want the redirect destination as title use mw.messages.set( 'redirect-title', '$2' ); */

mw.loader.using( [ 'mediawiki.api' ], function () {
	"use strict";

	var hasOwn = Object.prototype.hasOwnProperty,
		deferreds = {},
		titles = [];

	function ok( res ) {
		if ( !res.query ) {
			return;
		}
		if ( res.query.normalized ) {
			$.each( res.query.normalized, function ( index, normalize ) {
				deferreds[ normalize.to ] = deferreds[ normalize.from ];
				delete deferreds[ normalize.from ];
			} );
		}
		if ( res.query.redirects ) {
			$.each( res.query.redirects, function ( index, redirect ) {
				if ( hasOwn.call( deferreds, redirect.from ) ) {
					deferreds[ redirect.from ].resolve( redirect );
				}
			} );
		}
	}

	function query( titles ) {
		var api = new mw.Api();

		api.get( {
			action: 'query',
			titles: titles.join( '|' ),
			redirects: true
		} )
		.done( ok );
	}

	function getTarget( title ) {
		var deferred;
		if ( hasOwn.call( deferreds, title ) ) {
			deferred = deferreds[ title ];
		} else {
			deferred = $.Deferred();
			titles.push( title );
			if ( titles.length >= 50 ) {
				query( titles );
				titles = [];
			}
			deferreds[ title ] = deferred;
		}
		return deferred.promise();
	}

	function execute( $content ) {
		$content.find( 'a.mw-redirect' )
		.each( function ( index, object ) {
			var title = object.title;
			if ( !title ) {
				return;
			}
			getTarget( title )
			.done( function ( redirect ) {
				mw.loader.using( 'jquery.ui.tooltip', function () {
					$( object ).tooltip( {
						content: redirect.tofragment
							? mw.msg(
								'redirect-title-fragment',
								redirect.from,
								redirect.to,
								redirect.tofragment
							) : mw.msg(
								'redirect-title',
								redirect.from,
								redirect.to
							)
					} );
				} );
			} );
		} );
		if ( titles.length ) {
			query( titles );
			titles = [];
		}
	}

	mw.hook( 'wikipage.content' ).add( execute );
} );