MediaWiki:Gadget-ll-script-userbox-thanks.js

Z Wikipedii, wolnej encyklopedii

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.
// https://pl.wikipedia.org/w/index.php?title=Wikipedia:Kawiarenka/Kwestie_techniczne&oldid=54567115

var api,
	config = mw.config.get( [
		'wgNamespaceNumber',
		'wgNamespaceIds'
	] ),
	thanksQuery = {
		formatversion: 2,
		list: 'logevents',
		leprop: 'ids',
		letype: 'thanks',
		lelimit: 'max'
	},
	exports = {};

function makeRequest( query, cont, acc ) {
	return api.get( $.extend( query, cont ) ).then( function ( data ) {
		acc( data.query.logevents.length );
		
		if ( data[ 'continue' ] ) {
			return makeRequest( query, data[ 'continue' ], acc );
		} else {
			return undefined;
		}
	} );
}

function processCallbackChain( $els ) {
	var $el = $els.first(),
		$loading = $el.find( '.userbox-thanks-in-progress' ),
		$results = $el.find( '.userbox-thanks-results' ),
		leuser = $el.data( 'leuser' ),
		letitle = $el.data( 'letitle' ),
		userCount = 0,
		titleCount = 0;
	
	$loading.show();
	$el.addClass( 'userbox-thanks-loading' );
	
	$.when(
		makeRequest( $.extend( {}, thanksQuery, { leuser: leuser } ), {}, function ( count ) {
			userCount += count;
		} ),
		makeRequest( $.extend( {}, thanksQuery, { letitle: letitle } ), {}, function ( count ) {
			titleCount += count;
		} )
	).done( function () {
		var thankedToMsg = mw.msg( 'userbox-thanks-thanked-to', userCount ),
			thankedByMsg = mw.msg( 'userbox-thanks-thanked-by', titleCount );
		
		$el.find( '.userbox-thanks-thanked-to' ).text( thankedToMsg );
		$el.find( '.userbox-thanks-thanked-by' ).text( thankedByMsg );
		
		$loading.hide();
		$el.removeClass( 'userbox-thanks-loading' );
		$results.show();
		
		// https://stackoverflow.com/a/20979871/10404307
		$els.splice( 0, 1 );
		
		if ( $els.length ) {
			processCallbackChain( $els );
		}
	});
}

exports.testPreconditions = function () {
	// tylko przestrzeń użytkownika
	return config.wgNamespaceNumber === config.wgNamespaceIds.user;
};

exports.initialize = function () {
	mw.messages.set( {
		'userbox-thanks-thanked-to': '{{FORMATNUM:$1}} {{PLURAL:$1|raz|razy}}',
		'userbox-thanks-thanked-by': '{{FORMATNUM:$1}} {{PLURAL:$1|podziękowanie|podziękowania|podziękowań}}'
	} );
		
	api = new mw.Api();
};

exports.filter = $.noop;

exports.process = function ( $els ) {
	processCallbackChain( $els );
};

module.exports = exports;