Svoboda | Graniru | BBC Russia | Golosameriki | Facebook
Przejdź do zawartości

Wikipedysta:Kaligula/js/markAsDone.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)
  • Edge: Przytrzymaj Ctrl, jednocześnie klikając Odśwież, lub naciśnij klawisze Ctrl+F5.
  • Opera: Naciśnij klawisze Ctrl+F5.
/*

 DOCUMENTATION: [[Wikipedysta:Kaligula/js/markAsDone]]

 */

if (mw.config.get('wgAction')=='view') {

	mw.loader.using('ext.gadget.gConfig', function(){

		markAsDone = {
				$author  : 'Kaligula',
				$date    : '2014-09-23',
				$license : 'CC-BY-SA-3.0',
				$version : '2.6.5'
		}

		// settings
		gConfig.register(
			'markAsDone',
			{
				name: 'Oznaczanie załatwionych sekcji (markAsDone)',
				descriptionPage: 'Wikipedysta:Kaligula/js/markAsDone'
			},
			[
				{
					name: 'namespaces',
					desc: '[[Pomoc:Przestrzeń nazw|Przestrzenie nazw]], w których ma działać skrypt.',
					descMode: 'wikitext',
					type: 'string',
					deflt: '',
					validation: function(str){
									var vals = [-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,100,101,102,103,828,829];
									var msg = 'Tylko liczby wybrane spośród ['+vals+'] i oddzielone od siebie przecinkami!';
									try {
										var arr=JSON.parse('['+str+']')
									}
									catch(err){
										throw msg
									}
									for(var i=0;i<arr.length;i++){
										if(jQuery.inArray(arr[i],vals)==-1) throw msg;
									}
									return str;
								}
				},
				{
					name: 'pages',
					desc: 'Strony, na których ma działać skrypt (każda w cudzysłowie (""), oddzielone od siebie przecinkami).',
					type: 'string',
					deflt: '"Dyskusja użytkownika:'+mw.config.get('wgUserName')+'"',
					validation: function(str){
									var msg='Nazwy stron powinny być każda w osobnym cudzysłowie ("") i oddzielone od siebie przecinkami! Jeśli nazwa zawiera cudzysłów (", tj. ten z klawiatury) to należy go w nazwie strony poprzedzić lewym ukośnikiem (\\), tzn. tak: \\".';
									try {
										var arr=JSON.parse('['+str+']')
									}
									catch(err){
										throw msg
									}
									return str;
								}
				}
			]
		);

		markAsDone.init = function () {
			var ns = JSON.parse('['+gConfig.get('markAsDone','namespaces')+']');
			var pages = JSON.parse('['+gConfig.get('markAsDone','pages')+']');

			if ($.inArray(mw.config.get('wgPageName').replace(/_/g,' '), pages)>-1 || $.inArray(mw.config.get('wgNamespaceNumber'), ns)>-1) {
				markAsDone.start()
			}
		}

		markAsDone.start = function () {
			$('.mw-editsection').each(function(i){
				var aedit = $(this).find('a.mw-editsection-link-secondary');
				if (aedit.length < 1) aedit = $(this).find('a');
				var ahref = aedit.attr('href');
				if (ahref) {
					var sectionMatch = ahref.match(/section=(\d+)/);
					var section = sectionMatch && sectionMatch[1];
					if(!section) return;
					var a = $(this).parent().find('.mw-headline');
					a = (a.length>0 ? a.text() : '');
					if (mw.user.options.values.numberheadings && mw.user.options.values.numberheadings==1){
						var sectiontitlenr = a.match(/^\d+ /);
						var sectiontitle = a.replace(/^\d+ /,'');
					}
					else {
						var sectiontitlenr = '';
						var sectiontitle = a;
					}
					$(this).append(' / [', $('<a class="section-mark-as-done" style="cursor: pointer" title="Oznacz jako załatwione">załatwione</a>').click(function(){markAsDone.run(section,sectiontitle,sectiontitlenr)}), ']');
				}
			});
		}

		markAsDone.run = function (section, sectiontitle, sectiontitlenr) {
			// throbber
			$('.mw-editsection:eq('+section+')').find('.section-mark-as-done:eq(0)').html('<img src="//upload.wikimedia.org/wikipedia/commons/4/42/Loading.gif">');

			var d = new Date();
			d.getDate()

			// jeśli włączone jest automatyczne numerowanie nagłówków to usuwa numer
			//(mw.user.options.values.numberheadings == 1) && (sectiontitle = sectiontitle.replace(/^\d+ /,''));
			// link do sekcji w opisie zmian: /* tytuł sekcji */
			var summary = '/* ' + sectiontitle + ' */ załatwione (oznaczone skryptem [[user:Kaligula/js/markAsDone.js|markAsDone]])';

			/* get edittoken */
			$.ajax('/w/api.php?action=query&format=json&meta=tokens')
			.done(function(token_data){
				var edittoken = token_data.query.tokens.csrftoken;
				console.log('markAsDone: edittoken='+edittoken);

				/* edit section – mark it as done with {{załatwione}} */
				$.ajax({
					url: '/w/api.php',
					type: 'POST',
					data: {
						action: 'edit',
						format: 'json',
						title: mw.config.get('wgPageName'),
						section: section,
						appendtext: '\n\n{{Załatwione}}, ' + '~~' + '~~',
						summary: summary,
						token: edittoken
					}
				}).done(function(data){
					var newrevid = data.edit.newrevid;

					/* reload section – get changed section raw code */
					$.ajax({
						url: '/w/index.php?action=raw&title=' + encodeURIComponent(mw.config.get('wgPageName')) + '&section=' + encodeURIComponent(section) + '&oldid=' + newrevid,
						cache: false
						}).done(function(text_after){

						/* reload section – parse code to html */
						$.ajax('/w/api.php?action=parse&format=json&title=' + encodeURIComponent(mw.config.get('wgPageName')) + '&text=' + encodeURIComponent(text_after) + '&prop=text')
						.done(function(html_after){
							/* reload section – update html of the section */
							var j = $('.mw-editsection')[section].parentNode;
							var jj = j.tagName.charAt(0).toLowerCase();
							while ((j.nextElementSibling) && (j.nextElementSibling.tagName.charAt(0).toLowerCase() != jj)) {$(j.nextElementSibling).remove()}
							var kk = $(html_after.parse.text['*']);
							if (mw.user.options.values['gadget-modify-section-style'] && mw.user.options.values['gadget-modify-section-style']==1) {
								kk.find('.mw-headline').parent().toggleClass('modifiedSectionTitle');
								kk.find('.mw-editsection').insertAfter(kk.find('.mw-headline'));
								if (sectiontitlenr!='') {
									kk.find('.mw-headline').prepend( $('<span class="mw-headline-number">'+sectiontitlenr+'</span>') );
								}
							}
							$(j).replaceWith(kk);
						});
					});

					$('.mw-editsection:eq('+section+')').find('.section-mark-as-done:eq(0)').remove();
				});
			});
		}

		$(document).ready(markAsDone.init());

	});

}