MediaWiki:Gadget-translation-editor-rc-filter.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.
$( function () {
	var panel, fieldset, menu, searchButton, daysSelector, hideMyselfCheckbox, progressBar,
		langdata = require( 'ext.gadget.langdata' ),
		api = new mw.Api(),
		rcTemplate = '{{Special:RecentChanges|days=$1|limit=5000|tagfilter=translation-editor}}',
		storageKeyPrefix = 'translation-editor-rc-filter-',
		storedDays = Number( mw.storage.getObject( storageKeyPrefix + 'days' ) ),
		storedTargets = mw.storage.getObject( storageKeyPrefix + 'targets' ) || [],
		storedHideMyself = !!mw.storage.getObject( storageKeyPrefix + 'hide-self' ),
		$results = $( '<div>' ),
		currentRequest = null;
	
	mw.messages.set( {
		'transl-rcf-title': 'Ostatnie zmiany wykonane za pomocą edytora tłumaczeń',
		'transl-rcf-selector-label': 'Wybierz języki, których zmiany zostaną wyświetlone:',
		'transl-rcf-last-days-label': 'Ostatnich dni:',
		'transl-rcf-hide-self-label': 'Ukryj moje edycje:'
	} );
	
	$( '#firstHeading' ).text( 'Ostatnie tłumaczenia' );
	
	panel = new OO.ui.PanelLayout( {
		content: [
			fieldset = new OO.ui.FieldsetLayout( { 
				label: mw.msg( 'transl-rcf-title' ),
				items: [
					new OO.ui.ActionFieldLayout( menu = new OO.ui.MenuTagMultiselectWidget( {
						inputPosition: 'outline',
						allowArbitrary: false,
						verticalPosition: 'below',
						options: Object.keys( langdata.lang2code ).sort( function ( a, b ) {
								return a.localeCompare( b, 'pl' );
							} ).map( function ( lang ) {
								return { data: lang, label: lang };
							} ),
						selected: storedTargets.filter( function ( lang ) {
							return lang in langdata.lang2code;
						} )
					} ), searchButton = new OO.ui.ButtonWidget( {
						label: 'Szukaj',
						flags: [ 'primary', 'progressive' ]
					} ), {
						label: mw.msg( 'transl-rcf-selector-label' )
					} ),
					new OO.ui.FieldLayout( daysSelector = new OO.ui.ButtonSelectWidget( {
						items: [
							new OO.ui.ButtonOptionWidget( {
								data: 1,
								label: '1'
							} ),
							new OO.ui.ButtonOptionWidget( {
								data: 3,
								label: '3'
							} ),
							new OO.ui.ButtonOptionWidget( {
								data: 7,
								label: '7'
							} ),
							new OO.ui.ButtonOptionWidget( {
								data: 14,
								label: '14'
							} ),
							new OO.ui.ButtonOptionWidget( {
								data: 30,
								label: '30',
								selected: true
							} )
						]
					} ), {
						label: mw.msg( 'transl-rcf-last-days-label' )
					} )
				]
			} )
		],
		framed: true,
		padded: true,
		expanded: false
	} );
	
	if ( mw.config.get( 'wgUserName' ) ) {
		fieldset.addItems( [
			new OO.ui.FieldLayout( hideMyselfCheckbox = new OO.ui.CheckboxInputWidget( {
				selected: storedHideMyself
			} ), {
				label: mw.msg( 'transl-rcf-hide-self-label' )
			} )
		] );
	}
	
	if ( storedDays && daysSelector.findItemFromData( storedDays ) ) {
		daysSelector.selectItemByData( storedDays );
	}
	
	progressBar = new OO.ui.ProgressBarWidget().toggle( false );
	
	searchButton.on( 'click', function () {
		var targets = menu.getValue(),
			days = daysSelector.findSelectedItem().data;
		
		if ( currentRequest ) {
			currentRequest.abort();
			currentRequest = null;
		}
		
		mw.storage.setObject( storageKeyPrefix + 'targets', targets );
		mw.storage.setObject( storageKeyPrefix + 'days', days );
		
		if ( hideMyselfCheckbox ) {
			mw.storage.setObject( storageKeyPrefix + 'hide-self', hideMyselfCheckbox.isSelected() );
		}
		
		if ( targets.length ) {
			progressBar.toggle( true );
			$results.empty();
			
			currentRequest = api.parse( mw.format( rcTemplate, days ) ).done( function ( parsed ) {
				var $parsed = $( $.parseHTML( parsed ) );
				$parsed.find( '.mw-changeslist-legend' ).remove();
				
				$parsed.find( '.comment' ).filter( function ( i, el ) {
					return targets.every( function ( lang ) {
						return el.textContent.indexOf( lang ) === -1;
					} );
				} ).closest( '.mw-changeslist-line' ).remove();
				
				if ( hideMyselfCheckbox && hideMyselfCheckbox.isSelected() ) {
					$parsed.find( '.mw-userlink' ).filter( function ( i, el ) {
						return el.textContent === mw.config.get( 'wgUserName' );
					} ).closest( '.mw-changeslist-line' ).remove();
				}
				
				$parsed.find( 'ul.special' ).filter( function ( i, el ) {
					return el.children.length === 0;
				} ).prev( 'h4' ).addBack().remove();
				
				$results.append( $parsed );
			} ).always( function () {
				progressBar.toggle( false );
			} );
		}
	} );
	
	$( '#mw-content-text' ).empty().append( panel.$element, progressBar.$element, $results );
} );