Участник:A particle for world to form/iwrm-extensions.js

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
// <nowiki>

$( function() {
	if ( !window.IWRM ) window.IWRM = {};
	if ( !IWRM.extensions ) IWRM.extensions = {};

	if ( mw.config.get('wgCanonicalSpecialPageName') === 'Search' ) {
		mw.loader.using( 'mediawiki.util', function() {
			var portlet = mw.util.addPortletLink(
				'p-tb',
				IWRM.prefs.hash + 'Search',
				IWRM.prefs.name,
				't-iwrm'
			);
	
			$( portlet ).find( 'a' ).click( IWRM.Init.bind( this, $( '.mw-search-result-heading > a' ).toArray().map( (el) => el.innerText ) ) );
		} );
	}

	IWRM.extensions._replacements = [];

	IWRM.extensions.addReplacement = function( pattern, replacement ) {
		IWRM.extensions._replacements.push( [ pattern, replacement ] );
	};

	IWRM.extensions.applyReplacements = function( ) {
		$('.iwrm-line input').each( function( _, element ) {
			var text = element.value;
			for (var i = 0; i < IWRM.extensions._replacements.length; i++) {
				var pattern = IWRM.extensions._replacements[i][0],
					replacement = IWRM.extensions._replacements[i][1];
				if (text.match(pattern)) {
					element.value = text.replace(pattern, replacement);
					element.dispatchEvent(new Event('blur'));
					break;
				}
			}
		} );
	};

	mw.hook( 'iwrm.content' ).add( IWRM.extensions.applyReplacements );


	// Удаляем ссылки на Викитеку.
	IWRM.extensions.addReplacement( /({{iw\|[^\}]+\|s:[^\|\}]+}})/, '' );

	// Раскрываем (красные) ссылки на русскую Википедию.
	IWRM.extensions.addReplacement( /{{iw\|\|([^\|\}]+)\|ru\|([^\|\}]+)}}/, '[[$2|$1]]' );


	// Однозначные случаи.

	IWRM.extensions.addReplacement( /({{iw\|)(\|([^\|]+)\|en\|\3 \((?:group|band)\)}})/, '$1$3 (группа)$2' );
	IWRM.extensions.addReplacement( /({{iw\|)(\|([^\|]+)\|en\|\3 \(company\)}})/, '$1$3 (компания)$2' );

	// [[:en:Half-Life 2 (2004 video game)|Half-Life 2]] → {{iw|Half-Life 2 (игра, 2004)|Half-Life 2|en|Half-Life 2 (2004 video game)}}

	IWRM.extensions.addReplacement( /({{iw\|)(\|([^\|]+)\|en\|\3 \((\d{4}) video game\)}})/, '$1$3 (игра, $4)$2' );
	IWRM.extensions.addReplacement( /({{iw\|)(\|([^\|]+)\|en\|\3 \(video game\)}})/, '$1$3 (игра)$2' );
	IWRM.extensions.addReplacement( /({{iw\|)(\|([^\|]+)\|en\|\3 \(video game series\)}})/, '$1$3 (серия)$2' );

	// [[:en:Hotel California (Eagles album)|Hotel California]] → {{iw|Hotel California (альбом Eagles)|Hotel California|en|Hotel California (Eagles album)}}

	IWRM.extensions.addReplacement( /({{iw\|)(\|([^\|]+)\|en\|\3 \((\d{4}) album\)}})/, '$1$3 (альбом, $4)$2' );
	IWRM.extensions.addReplacement( /({{iw\|)(\|([^\|]+)\|en\|\3 \(([^\)]+) album\)}})/, '$1$3 (альбом $4)$2' );
	IWRM.extensions.addReplacement( /({{iw\|)(\|([^\|]+)\|en\|\3 \(album\)}})/, '$1$3 (альбом)$2' );
	IWRM.extensions.addReplacement( /({{iw\|)(\|([^\|]+)\|en\|\3 \((\d{4}) song\)}})/, '$1$3 (песня, $4)$2' );
	IWRM.extensions.addReplacement( /({{iw\|)(\|([^\|]+)\|en\|\3 \(([^\)]+) song\)}})/, '$1$3 (песня $4)$2' );
	IWRM.extensions.addReplacement( /({{iw\|)(\|([^\|]+)\|en\|\3 \(song\)}})/, '$1$3 (песня)$2' );

	// [[:en:Billboard (magazine)|Billboard]] → {{iw|Billboard (журнал)|Billboard|en|Billboard (magazine)}}

	IWRM.extensions.addReplacement( /({{iw\|)(\|([^\|]+)\|en\|\3 \(magazine\)}})/, '$1$3 (журнал)$2' );
	IWRM.extensions.addReplacement( /({{iw\|)(\|([^\|]+)\|en\|\3 \(website\)}})/, '$1$3 (сайт)$2' );

} );

// </nowiki>