MediaWiki:Gadget-morfeusz-linker-wikieditor.js

Z Wikisłownika – wolnego słownika wielojęzycznego

Uwaga: aby zobaczyć zmiany po opublikowaniu, może zajść potrzeba wyczyszczenia pamięci podręcznej przeglądarki.

  • Firefox / Safari: Przytrzymaj Shift podczas klikania Odśwież bieżącą stronę, lub naciśnij klawisze Ctrl+F5, lub Ctrl+R (⌘-R na komputerze Mac)
  • Google Chrome: Naciśnij Ctrl-Shift-R (⌘-Shift-R na komputerze Mac)
  • Internet Explorer / Edge: Przytrzymaj Ctrl, jednocześnie klikając Odśwież, lub naciśnij klawisze Ctrl+F5
  • Opera: Naciśnij klawisze Ctrl+F5.
var morfeusz,
	notifyOpts = {
		tag: 'ml-wikieditor-notify',
		title: 'Linkowanie automatyczne'
	},
	MAX_ENCODED_LENGTH = 900;

mw.libs.MorfeuszAnalyzer = require( 'ext.gadget.morfeusz-analyzer' ).MorfeuszAnalyzer;
morfeusz = new mw.libs.MorfeuszAnalyzer();

mw.messages.set( {
	'ml-wikieditor-title': 'Linkowanie automatyczne (Morfeusz SGJP)',
	'ml-wikieditor-alt': 'Linkowanie automatyczne',
	'ml-wikieditor-empty-warning': 'Zaznacz niepodlinkowany tekst w języku polskim i kliknij ponownie.',
	'ml-wikieditor-invalid-input': 'Zaznaczony tekst już zawiera linki. Usuń podwójne nawiasy kwadratowe.',
	'ml-wikieditor-invalid-length': 'Zaznaczony tekst jest zbyt długi.',
	'ml-wikieditor-server-error': 'Błąd serwera, spróbuj ponownie.',
	'ml-wikieditor-summary': '+[[WS:AUTOLINK|linkowanie automatyczne]]'
} );

function makeWikitext( items ) {
	return items.reduce( function ( out, item ) {
		if ( 'lemmas' in item ) {
			return out + mw.libs.MorfeuszAnalyzer.makeWikilink( item.lemmas[ 0 ].lemma, item.form );
		} else {
			return out + item.form;
		}
	}, '' );
}

$( function () {
	var request,
		$wpTextbox = $( '#wpTextbox1' ),
		$wpSummary = $( '#wpSummary' );
	
	mw.libs.toolbarGadget.addButton( {
		icon: '//upload.wikimedia.org/wikipedia/commons/9/97/Button_int_link.png',
		title: mw.msg( 'ml-wikieditor-title' ),
		alt: mw.msg( 'ml-wikieditor-alt' ),
		id: 'ml-wikieditor',
		onclick: function () {
			var selection = $wpTextbox.textSelection( 'getSelection' );
			
			if ( request && 'abort' in request ) {
				request.abort();
			}
			
			if ( selection.trim() === '' ) {
				mw.notify( mw.msg( 'ml-wikieditor-empty-warning' ), $.extend( { type: 'warn' }, notifyOpts ) );
			} else if ( encodeURI( selection ).length > MAX_ENCODED_LENGTH ) {
				mw.notify( mw.msg( 'ml-wikieditor-invalid-length' ), $.extend( { type: 'error' }, notifyOpts ) );
			} else if ( selection.indexOf( '[[' ) !== -1 || selection.indexOf( ']]' ) !== -1 ) {
				mw.notify( mw.msg( 'ml-wikieditor-invalid-input' ), $.extend( { type: 'error' }, notifyOpts ) );
			} else {
				request = morfeusz.analyze( selection );
				
				request.done( function ( data ) {
					var replacement = makeWikitext( data.items );
					
					$wpTextbox.textSelection( 'replaceSelection', replacement );
					
					if ( $wpSummary.val().indexOf( mw.msg( 'ml-wikieditor-summary' ) ) === -1 ) {
						$wpSummary.val( (
							$wpSummary.val().trim() + ' ' +
							mw.msg( 'ml-wikieditor-summary' )
						).trim() );
					}
				} ).fail( function () {
					mw.notify( mw.msg( 'ml-wikieditor-server-error' ), $.extend( { type: 'error' }, notifyOpts ) );
				} );
			}
		}
	} );
} );