Zum Inhalt springen

„Benutzer:Fomafix/Gadget-redirecttitle.js“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
Inhalt gelöscht Inhalt hinzugefügt
GET statt POST
$( mw ).bind( 'LivePreviewDone', execute ); hinzugefügt
Zeile 95: Zeile 95:


$( execute );
$( execute );
$( mw ).bind( 'LivePreviewDone', execute );
} );
} );

Version vom 27. Dezember 2012, 23:19 Uhr

/*
 * 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.util', 'mediawiki.api' ], function () {
	"use strict";

	var targets = {};

	/* Umkehrfunktion zu mw.util.wikiGetlink() */
	function wikiGetname( url ) {
		var re, m;

		re = new RegExp( '^' + $.escapeRE( mw.config.get( 'wgArticlePath' ) ).replace( /\\\$1/, '([^#]+)' ) + '(#.*)?$' );
		m = re.exec( url );
		if ( m ) {
			return decodeURIComponent( m[1] ).replace( /_/g, ' ' );
		}
		return null;
	}

	function ok( res ) {
		if ( ! res.query ) {
			return;
		}
		if ( res.query.normalized ) {
			$.each( res.query.normalized, function ( index, normalize ) {
				targets[ normalize.to ] = targets[ normalize.from ];
				delete targets[ normalize.from ];
			} );
		}
		if ( res.query.redirects ) {
			$.each( res.query.redirects, function ( index, redirect ) {
				if ( targets[ redirect.from ] ) {
					$.each( targets[ redirect.from ], function ( index, object ) {
						object.title = redirect.tofragment ?
							mw.msg(
								'redirect-title-fragment',
								redirect.from,
								redirect.to,
								redirect.tofragment
							) :
							mw.msg(
								'redirect-title',
								redirect.from,
								redirect.to
							);
					} );
				}
			} );
		}
	}

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

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

	function execute() {
		var target, titles = [];

		mw.util.$content
		.find( 'a.mw-redirect' )
		.each( function ( index, object ) {
			var title = wikiGetname( object.pathname );
			if ( ! title ) {
				return;
			}
			if ( targets[ title ] ) {
				targets[ title ].push( object );
			} else {
				targets[ title ] = [ object ];
			}
		} );
		for ( target in targets ) {
			titles.push( target );
			if ( titles.length >= 50 ) {
				query( titles );
				titles = [];
			}
		}
		if ( titles.length > 0 ) {
			query( titles );
		}
	}

	$( execute );
	$( mw ).bind( 'LivePreviewDone', execute );
} );