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