Benutzer:Fomafix/Gadget-redirecttitle.js
Erscheinungsbild
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 );
} );