MediaWiki:Gadget-PurgeCommonsMetadata.js

Z Nonsensopedii, polskiej encyklopedii humoru

Uwaga: aby zobaczyć zmiany po zapisaniu, 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: Przytrzymaj Ctrl jednocześnie klikając Odśwież lub naciśnij klawisze Ctrl+F5
  • Konqueror: Kliknij polecenie Odśwież lub naciśnij klawisz F5
  • Opera: Wyczyść pamięć podręczną w Narzędzia → Preferencje
$(function() {
	if (mw.config.get('wgNamespaceNumber') !== 6) return;
	var template = $( '.information-template.importing-data > tbody' );
	if (!template.length) return;
	
	function PurgeDialog(config) {
		PurgeDialog.super.call(this, config);
	}
	OO.inheritClass(PurgeDialog, OO.ui.ProcessDialog);

	PurgeDialog.static.name = 'purgeDialog';
	PurgeDialog.static.title = 'Odświeżyć importowane dane?';
	
	var labels = ['OK', 'OK', 'OK', 'OK', 'OK', 'OK', 'Jo'];
	PurgeDialog.static.actions = [
		{
			action: 'accept',
			label: labels[Math.floor(Math.random() * labels.length)],
			flags: ['primary', 'progressive'],
		},
		{
			action: 'cancel',
			label: 'Anuluj',
			flags: 'safe'
		}
	];
	
	PurgeDialog.prototype.initialize = function () {
		PurgeDialog.super.prototype.initialize.apply( this, arguments );
		
		this.content = new OO.ui.PanelLayout( {
			padded: true,
			expanded: false
		} );
		this.$body.append( this.content.$element );
	};
	
	PurgeDialog.prototype.getSetupProcess = function ( data ) {
		data = data || {};
		this.importedData = data;
		
		return PurgeDialog.super.prototype.getSetupProcess.call( this, data )
		.next( function () {
			var html = '';
			
			if (data.files) {
				html += '<p><b>Pliki:</b><br>' + data.files.join('<br>') + '</p>';
			}
			if (data.authors) {
				html += '<p><b>Autorzy:</b><br>' + data.authors.join('<br>') + '</p>';
			}
			
			this.content.$element.html(html);
		}, this );
	};
	
	PurgeDialog.prototype.getActionProcess = function ( action ) {
		var self = this;
		
		if (action === 'accept') {
			return new OO.ui.Process( function () {
				var query = self.importedData;
				query.action = 'purgecommonsmetadata';
				
				var api = new mw.Api();
				return api.post(query).done( function () {
					api.post( { 
						action: 'purge', 
						titles: mw.config.get( 'wgPageName' ) 
					} ).done(function () {
						location.reload();
					} ).fail( function () {
						mw.notify( 'Nie udało się odświeżyć strony. Metadane za to powinny być wyczyszczone.', { type: 'error' } );
					});
				} ).fail( function () {
					mw.notify( 'Nie udało się odświeżyć metadanych. Jeśli klikasz w szale opętania, to zaparz se melisę, serwer to nie antystres.', { type: 'error' } );
				} ).then( function() {
					self.close();
				} );
			} );
		} else if (action === 'cancel') {
			return new OO.ui.Process( function () {
				self.close();
			} );
		}
		// Fallback to parent handler.
		return PurgeDialog.super.prototype.getActionProcess.call( this, action );
	};
	
	var dialog = new PurgeDialog({size: 'medium'});
	var manager = new OO.ui.WindowManager();
	$('body').append(manager.$element);
	manager.addWindows([dialog]);
	mw.d = dialog;
	
	function showDialog() {
		// wciągamy dane zostawione przez kod Lua w HTML-u
		var data = JSON.parse($('.information-template').attr('data-imported'));
		manager.openWindow(dialog, data);
	}
	
    var row = $('<tr>', {class: 'n-purge-metadata'}).append( 
    	$('<td>', {colspan: 2}).append( 
    		$('<a>')
    			.text('odśwież importowane dane')
    			.attr('title', 'Odśwież dane importowane z Commons i Wikidanych')
    			.click(OO.ui.debounce(showDialog, 500, true))
		)
	);
	row.appendTo( template );
});