User:Wargo/Scripts/Masowo na TO.js

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
var betacluster = mw.config.get('wgServerName').match('beta');
var tablice_ogłoszeń = !betacluster ? {"wikipedia": "Wikipedia:Tablica ogłoszeń/Ogłoszenia", "wiktionary": "Wikisłownik:Tablica ogłoszeń", "wikiquote": "Wikicytaty:Tablica ogłoszeń", "wikisource": "Wikiźródła:Tablica ogłoszeń", "wikibooks": "Wikibooks:Tablica ogłoszeń", "wikinews": "Wikinews:Tablica ogłoszeń"} : {"en.wikipedia": "User:Wargo/Masowo na TO.js/test", "wikidata": "User:Wargo/TO"};
var months_d = ['stycznia', 'lutego', 'marca', 'kwietnia', 'maja', 'czerwca', 'lipca', 'sierpnia', 'września', 'października', 'listopada', 'grudnia'];

$.when(mw.loader.using(['mediawiki.api', 'mediawiki.jqueryMsg']), $.ready).then(function() {
if(mw.config.get('wgCanonicalSpecialPageName') == 'Blankpage' && mw.config.get('wgPageName').split('/', 2)[1] == 'Ogłoszenia')
{
$('title').html('Roześlij na tablice ogłoszeń');
$('#firstHeading').text('Roześlij ogłoszenie');
$('#mw-content-text p').attr('id', 'specialpage_heading').html('Tutaj możesz rozesłać ogłoszenie na wszystkie tablice ogłoszeń projektów w języku polskim.<br />Pamiętaj aby każdy wpis rozpocząć gwiazdką (można dodawać kilka w jednym wysłaniu) i o wstawieniu podpisu.');
$('#specialpage_heading').after('<textarea id="TO_body" rows="10"></textarea><br />Opis zmian: <input id="TO_summary" value="Nowe ogłoszenie" size="100" /><br /><button id="btn_submit">Wyślij</button><button id="btn_preview">Podgląd</button><hr id="next_steps" style="height: 3px;" /><div id="progress_messages" />');

var apis = {};
apis.general = new mw.Api();

$('#mw-content-text button').click(function(click){
	var content = $('#TO_body').val();
	var summary = $('#TO_summary').val();
	
	var date = new Date();
	var heading_name = date.getDate()+' '+months_d[date.getMonth()];
	var heading_content = "== "+heading_name+" ==\n";
	
	$('#next_steps').css('background', 'blue');
	$('.preview_box').detach();
	$('#progress_messages').html('');
	
	if(click.target.id == 'btn_preview')
	{
		apis.general.post({action: 'parse', prop: 'text', contentmodel: 'wikitext', wrapoutputclass: 'preview_box', pst: true, text: heading_content+content, summary: summary}).done(function(response){
			$('#next_steps').after(response.parse.text['*']).css('background', '');
			if(typeof response.parse.parsedsummary == 'object') $('.preview_box').append("<br />Podgląd opisu zmian: "+response.parse.parsedsummary['*']);
		});
	}
	
	if(click.target.id == 'btn_submit')
	{
		if(content == '')
		{
			alert('Wypełnij pole');
			return;
		}
		
		var count = 0, count_done = 0;
		
		$.each(tablice_ogłoszeń, function(projekt, strona){
			domain = betacluster ? projekt+'.beta.wmflabs' : 'pl.'+projekt;
			apis[projekt] = new mw.ForeignApi('https://'+domain+'.org/w/api.php');
			count++;
			
			apis[projekt].edit(strona, function(response){
				$('#progress_messages').append('⏳ Umieszczam ogłoszenie w projekcie <i>'+projekt+'</i> na stronie <i>'+strona+'</i><br />');
				
				content_m = response.content;
				has_today_header = content_m.match(heading_content);
				if(has_today_header)
				{
					insertion_pos = has_today_header.index + heading_content.length;
					heading = '';
				}
				else
				{
					insertion_pos = content_m.match('==').index;
					heading = heading_content;
				}
				
				content_m = content_m.slice(0, insertion_pos)+heading+content+"\n"+content_m.slice(insertion_pos);
				
				return {text: content_m, summary: summary, assert: 'user'};
			})
			.done(function(){$('#progress_messages').append('✔️ Umieściłem ogłoszenie w projekcie <i>'+projekt+'</i> na stronie <i>'+strona+'</i><br />');})
			.fail(function(code, response){$('#progress_messages').append('⚠️ Błąd umieszczania w projekcie <i>'+projekt+'</i> na stronie <i>'+strona+'</i>: <code>'+response.error.info+'</code><br />');})
			.always(function(){
				count_done++;

				if(count == count_done)
				{
				$('#progress_messages').append('✅ ZAKOŃCZONO');
				
				$('#btn_submit, #TO_body').attr('disabled', true);
				$('#next_steps').css('background', '');
				}
			});
		});
	}
});
}
else
{
mw.util.addPortletLink('p-tb', "/wiki/Special:Blankpage/Ogłoszenia", 'Napisz ogłoszenie');
}
});