MediaWiki:Gadget-directLinkToCommons.js

З Вікіпедыі, свабоднай энцыклапедыі

Заўвага: Пасля апублікавання, вам можа спатрэбіцца ачыстка кэшу браўзера, каб убачыць унесеныя змены.

  • Firefox / Safari: націсніце Reload, утрымліваючы Shift, або націсніце Ctrl-F5 ці Ctrl-R (⌘-R на Макінтошах)
  • Google Chrome: Націсніце Ctrl-Shift-R (⌘-Shift-R на Mac)
  • Internet Explorer / Edge: націсніце Refresh, утрымліваючы Ctrl, або націсніце Ctrl-F5
  • Opera: Увайдзіце Menu → Settings (Opera → Preferences на Mac), далей Privacy & security → Clear browsing data → Cached images and files.
/**
 * @source: https://www.mediawiki.org/wiki/Snippets/Direct_imagelinks_to_Commons
 */
mw.hook( 'wikipage.content' ).add( function ( $content ) {
	var fileSelector = 'a.image, a.mw-file-description';
	// Ignore most files in the mobile version until [[phab:T65504]] gets resolved
	if ( mw.config.get( 'skin' ) === 'minerva' ) {
		fileSelector = '.noviewer a.image, .noviewer a.mw-file-description';
	}
	
	if ( mw.config.get( 'wgNamespaceNumber', 0 ) < 0 ) {
		return;
	}
	
	mw.loader.using( 'mediawiki.util' ).done( function () {
		var	commonsBase =  '//commons.wikimedia.org/wiki/File:',
			localBase = mw.util.getUrl( mw.config.get( 'wgFormattedNamespaces' )[ 6 ] + ':' ),
			commonsBaseScript =  '//commons.wikimedia.org/w/index.php?title=File:',
			localBaseScript = mw.util.wikiScript() + '?title=' + mw.util.wikiUrlencode( mw.config.get( 'wgFormattedNamespaces' )[ 6 ] + ':' ),
			uploadBaseRe = new RegExp( '^' + mw.util.escapeRegExp( '//upload.wikimedia.org/wikipedia/commons/' ) );

		$content.find( fileSelector ).attr( 'href', function( i, currVal ) {
			// Link has no current value, so exit early to avoid error
			// TypeError: Cannot read properties of undefined (reading 'replace')
			if ( !currVal ) {
				return;
			}
			var src = $( this ).find( 'img' ).attr( 'src' );
			if ( !src ) {
				return;
			}
			if ( uploadBaseRe.test( src ) ) {
				var url = currVal.replace( localBase, commonsBase ).replace( localBaseScript, commonsBaseScript );
				// Override default language on Commons for non-logged in users only
				if( !mw.config.get( 'wgUserId' ) ) {
					url += ( /\?/.test(url) ? '&' : '?' ) + 'uselang=be';
				}
				return url;
			}
		} );
	} );
} );