MediaWiki:Gadget-translation-editor-rc-filter.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.
$( 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 );
} );