Benutzer:Hoo man/directLinksToCommons.js
aus Wikipedia, der freien Enzyklopädie
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
/**
* Direct imagelinks to Commons, modified
* Depends on mediawiki.util, user
*
* @author: [[m:User:Hoo man]]
* @source //de.wikipedia.org/wiki/Benutzer:Hoo_man/directLinksToCommons.js
* @version 2
*/
(function ($, mw) {
var localBasePath = mw.util.getUrl( mw.config.get( 'wgFormattedNamespaces' )['6'] + ':' ),
localBaseScript = mw.util.wikiScript() + '?title=' + mw.util.wikiUrlencode( mw.config.get( 'wgFormattedNamespaces' )['6'] + ':' ),
commonsBasePath = '//commons.wikimedia.org/wiki/File:',
commonsBaseScript = '//commons.wikimedia.org/w/index.php?title=File:';
function directLinksToCommonsApi( origURI, done, fail ) {
var filePage, fileTalk;
if(origURI.indexOf('?') === -1) {
filePage = origURI.substring( origURI.lastIndexOf( '/' ) + 1 );
}else{
filePage = mw.util.getParamValue( 'title', origURI );
}
filePage = filePage.replace( /_/g, ' ' );
fileTalk = filePage.replace( mw.config.get( 'wgFormattedNamespaces' )['6'], mw.config.get( 'wgFormattedNamespaces' )['7'] );
$.ajax( {
url : mw.config.get( 'wgServer' ) + mw.util.wikiScript( 'api' ),
data : { action : 'query', format : 'json', titles : filePage + '|' + fileTalk, indexpageids : 1},
cache: true,
timeout : 3500 // timeout after 3.5 seconds
} )
.done( done )
// an error occured
.fail( fail );
}
// On mouseover, changes the href, if no local page exists
// and sets 'directLinksToCommonsChecked' to make sure we don't check again
function directLinksToCommonsOver() {
if( !$(this).prop( 'directLinksToCommonsChecked' ) ) {
var origURI = $(this).attr( 'href' );
var $link = $(this);
directLinksToCommonsApi( $(this).attr( 'href' ), function( data ) {
var pageids = data.query.pageids;
if(pageids[0] === '-1' && pageids[1] === '-2') {
// both pages don't exist
$link.attr( 'href', origURI.replace( localBasePath, commonsBasePath ).replace( localBaseScript, commonsBaseScript ) );
}
$link.prop( 'directLinksToCommonsChecked', true );
}, function() {
$link.prop( 'directLinksToCommonsChecked', true );
} );
}
}
// On click, looks whether we have local pages, if not yet done and acts accordingly
function directLinksToCommonsClick() {
if( !$(this).prop( 'directLinksToCommonsChecked' ) ) {
var origURI = $(this).attr( 'href' );
directLinksToCommonsApi( $(this).attr( 'href' ), function( data ) {
var pageids = data.query.pageids;
if(pageids[0] === '-1' && pageids[1] === '-2') {
// both pages don't exist
window.location = origURI.replace( localBasePath, commonsBasePath ).replace( localBaseScript, commonsBaseScript );
}else{
// at least one exists
window.location = origURI;
}
}, function() {
window.location = origURI;
} );
return false;
}
}
// init
if ( mw.config.get( 'wgNamespaceNumber', -1 ) >= 0 ) {
$(document).ready( function () {
var uploadBaseRe = new RegExp( '^' + $.escapeRE( '//upload.wikimedia.org/wikipedia/commons/' ) );
$( 'a.image' ).attr( 'href', function() {
if ( uploadBaseRe.test( $(this).find( 'img' ).attr( 'src' ) ) ) {
$(this).on( 'click', directLinksToCommonsClick );
if ( !mw.user.anonymous() ) {
// Disable this for anons, to avoid blowing the API
$(this).on( 'mouseover', directLinksToCommonsOver );
}
}
} );
} );
}
}( jQuery, mediaWiki ) );