MediaWiki:Gadget-nkjp-lookup.js

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 messages = {
		'toolbar-nkjp-tooltip': 'Wygeneruj szablon NKJP',
		'toolbar-nkjp-example': 'http://nkjp.uni.lodz.pl/ParagraphMetadata?pid=e8f388f43c5a921039efd59b53dddc70&match_start=228&match_end=235&wynik=1',
		'toolbar-nkjp-dialog-title': 'Generowanie szablonu NKJP',
		'toolbar-nkjp-dialog-input': 'Adres wystąpienia w korpusie (<a href="$1" target="_blank" class="nkjp-example-link">przykład</a>):',
		'toolbar-nkjp-dialog-result': 'Wynik:',
		'toolbar-nkjp-dialog-more': 'Zobacz też:',
		'toolbar-nkjp-dialog-more-template': '<a href="//pbbot.toolforge.org/nkjp-generator" target="_blank">stronę narzędzia w witrynie Tool Labs</a>',
		'toolbar-nkjp-dialog-more-tools': '<a href="' + mw.util.getUrl( 'Szablon:NKJP' ) + '" target="_blank">dokumentację szablonu</a>',
		'toolbar-nkjp-dialog-button-query': 'Wyślij zapytanie',
		'toolbar-nkjp-dialog-button-report': 'Zgłoś błąd',
		'toolbar-nkjp-dialog-placeholder': 'Wpisz adres w powyższym polu i kliknij na „$1” lub wciśnij klawisz „Enter”.',
		'toolbar-nkjp-dialog-fetching': 'Oczekiwanie na odpowiedź...',
		'toolbar-nkjp-error': 'Błąd: $1'
	},
	modules = [
		'jquery.ui',
		'jquery.textSelection'
	],
	REPORT_LINK = mw.util.getUrl( 'Dyskusja wikipedysty:Peter Bowman', {
		action: 'edit',
		section: 'new',
		preloadtitle: 'nkjp-generator.js',
		nosummary: ''
	} ),
	gui = {
		launched: false
	},
	currentRequest = null;

function makeRequest( address ) {
	return $.ajax( {
		url: '//pbbot.toolforge.org/nkjp-generator',
		data: {
			address: address,
			format: 'json'
		}
	} );
}

function queryButtonHandler( evt ) {
	var address = $.trim( gui.$input.val() );
	
	if ( currentRequest ) {
		currentRequest.abort();
	}
	
	if ( !address ) {
		return;
	}
	
	gui.$result.empty().append( $( '<p>' ).text( mw.msg( 'toolbar-nkjp-dialog-fetching' ) ) );
	
	currentRequest = makeRequest( address ).done( function ( data ) {
		var $ul, $textarea;
		
		gui.$result.empty();
		
		if ( data.status !== 200 ) {
			$( '<p>' )
				.text( mw.msg( 'toolbar-nkjp-error', data.error ) )
				.appendTo( gui.$result );
			
			if ( data.backtrace.length ) {
				$ul = $( '<ul>' );
				
				$.each( data.backtrace, function ( i, el ) {
					$( '<li>' ).text( el ).appendTo( $ul );
				} );
				
				$ul.appendTo( gui.$result );
			}
		} else {
			$textarea = $( '<textarea>' )
				.attr( 'rows', 3 )
				.prop( 'readonly', true )
				.val( data.output )
				.appendTo( gui.$result );
			
			$textarea.textSelection( 'setSelection', {
				start: 0,
				end: data.output.length
			} ).focus();
		}
	} ).fail( function ( jqXHR, textStatus, errorThrown ) {
		var $content = $( '<p>' ).text( mw.msg( 'toolbar-nkjp-error', errorThrown ) );
		gui.$result.empty().append( $content );
	} );
}

function resetResults() {
	var msg = mw.msg( 'toolbar-nkjp-dialog-placeholder', mw.msg( 'toolbar-nkjp-dialog-button-query' ) );
	gui.$input.val( '' );
	gui.$result.empty().append( $( '<i>' ).text( msg ) );
}

$( function () {
	var buttonIcon = '//upload.wikimedia.org/wikipedia/commons/3/39/Bouton_site_en.png',
		waitIcon = '//upload.wikimedia.org/wikipedia/commons/3/30/Wait.gif';
	
	mw.messages.set( messages );
	
	gui.$dialog = $( '<div>' ).append(
		$( '<p>' ).html( mw.msg( 'toolbar-nkjp-dialog-input', mw.msg( 'toolbar-nkjp-example' ) ) ),
		gui.$input = $( '<input>' ).attr( 'size', 80 ),
		$( '<p>' ).text( mw.msg( 'toolbar-nkjp-dialog-result' ) ),
		gui.$result = $( '<div>' ),
		$( '<p>' ).text( mw.msg( 'toolbar-nkjp-dialog-more' ) ),
		$( '<ul>' ).append(
			$( '<li>' ).html( mw.msg( 'toolbar-nkjp-dialog-more-template' ) ),
			$( '<li>' ).html( mw.msg( 'toolbar-nkjp-dialog-more-tools' ) )
		)
	);
	
	resetResults();
	
	mw.libs.toolbarGadget.addButton( {
		title: mw.msg( 'toolbar-nkjp-tooltip' ),
		alt: 'NKJP',
		id: 'mw-editbutton-nkjp',
		icon: buttonIcon,
		onclick: function () {
			var $button;
			
			if ( !gui.launched ) {
				$button = $( '#mw-editbutton-nkjp' ).attr( 'src', waitIcon );
				
				mw.loader.using( modules ).done( function () {
					gui.$dialog.dialog( {
						title: mw.msg( 'toolbar-nkjp-dialog-title' ),
						modal: true,
						draggable: false,
						resizable: false,
						width: 750,
						buttons: [
							{
								text: mw.msg( 'toolbar-nkjp-dialog-button-query' ),
								click: queryButtonHandler
							},
							{
								text: mw.msg( 'toolbar-nkjp-dialog-button-report' ),
								click: function ( evt ) {
									open( REPORT_LINK, '_blank' );
								}
							}
						],
						beforeClose: function ( evt ) {
							if ( currentRequest ) {
								currentRequest.abort();
							}
							
							resetResults();
						}
					} );
					
					gui.launched = true;
					
					$button.attr( 'src', buttonIcon );
					gui.$input.focus();
				} );
			} else {
				gui.$dialog.dialog( 'open' );
				gui.$input.focus();
			}
		}
	} );
	
	gui.$input.on( 'keypress', function ( evt ) {
		if ( evt.keyCode === 13 ) { // Enter
			gui.$dialog.dialog( 'option', 'buttons' )[ 0 ].click();
		}
	} );
	
	gui.$dialog.on( 'click', '.nkjp-example-link', function ( evt ) {
		var keyPress = $.Event( 'keypress' );
		keyPress.keyCode = 13;
		gui.$input.val( $( this ).attr( 'href' ) ).trigger( keyPress );
		return false;
	} );
} );