Користувач:RLuts/Gadget-reporter.js

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Увага: Після публікування слід очистити кеш браузера, щоб побачити зміни.

  • Firefox / Safari: тримайте Shift, коли натискаєте Оновити, або натисніть Ctrl-F5 чи Ctrl-Shift-R (⌘-R на Apple Mac)
  • Google Chrome: натисніть Ctrl-Shift-R (⌘-Shift-R на Apple Mac)
  • Internet Explorer / Edge: тримайте Ctrl, коли натискаєте Оновити, або натисніть Ctrl-F5
  • Opera: натисніть Ctrl-F5
/* 
Скрипт для запитів на ВП:ЗА та ВП:ЗС. 
@version 1.1
@author ru.wikipedia.org/wiki/user:Absconditus v.1.0
@author uk.wikipedia.org/wiki/user:Максим_Підліснюк v.1.0u - адаптовано до україномовної Вікіпедії
@author RLuts v.1.1
*/

(function($, mw) {
'use strict';
	if(mw.reporter) return;
	var rep = mw.reporter = {
		msgs: {
			'report': 'Запит',
			'report-desc': 'Додати запит до адміністраторів або на захист',
			'page-protect': 'Вікіпедія:Захист сторінок',
			'page-protect-debug': 'Користувач:RLuts/Gadget-reporter.js/debug/Вікіпедія:Захист сторінок',
			'page-sysoprep': 'Вікіпедія:Запити до адміністраторів',
			'page-sysoprep-debug': 'Користувач:RLuts/Gadget-reporter.js/debug/Вікіпедія:Запити до адміністраторів'
		},
		
		errors: {
			'editconflict': 'Конфлікт редагувань на сторінці {title}. Відкиньте редагування, зроблені цим додатком за останні декілька секунд та спробуйте ще раз',
			'protectedtitle': 'Сторінка {title} захищена. Зв\'яжіться з адміністраторами на сторінці ВП:Запити до адміністраторів',
			'spamdetected':'Ви заблоковані у цій вікі. Спробуйте, будь ласка, пізніше',
			'filtered': 'Автоматичний фільтр заборонив редагування сторінки {title}',
			'notoken': 'Неможливо отримати токен. Зверніться, будь ласка, у «Кнайпу (технічні питання)',
			'captcha': 'API Вікіпедії повернув капчу, яку цей додаток поки що не підтримує. Можливо ви занадто часто робите редагування? Спробуйте, будь ласка, через декілька хвилин або подайте запит вручну',
			'default': 'Невідома помилка при редагуванні сторінки {title}. Відкиньте редагування, зроблені цим додатком за останні декілька секунд та спробуйте пізніше'
		},
		
		install: function() {
			var link = mw.util.addPortletLink( 'p-cactions', '#',  rep.msgs.report );
			$(link).click(function (e) {
				e.preventDefault();
				rep.showDialog();
			});
		},
		
		showDialog: function() {
			if($('#reporter-dialog').length === 0) {
				$('#mw-content-text').append('<div id="reporter-dialog" style="display:none;" title="' + rep.msgs.report + '"><p>Відправити запит на сторінку:</p></div>');
			} 
			mw.loader.using('jquery.ui', function() {
				$('#reporter-dialog').dialog({
					width: 400
				});
			});
		},
		
		editPage: function (title, content, timestamp, summary, option, section, success) {
			var param = {
				action: 'edit',
				title: title, 
				summary: summary, 
				watchlist: 'watch',
				basetimestamp: timestamp,
				token: mw.user.tokens.get('csrfToken'),
				format: 'json'
			};
			param[option || 'text'] = content;
			if (section || section === 0) 
				param.section = section;
			$.post(mw.util.wikiScript('api'), param).done( function(data) {
				if (data.hasOwnProperty('edit') && data.edit.result == 'Success') {
					success();
				} else if (data.hasOwnProperty('edit') && data.edit.result == 'Failure') {
					if(data.edit.hasOwnProperty(code)) {
						var code = data.edit.code;
						switch(code) {
							case 'editconflict':
								alert(rep.errors.editconflict.replace('{title}', title));
								break;
							case 'protectedtitle':
								alert(rep.errors.protectedtitle.replace('{title}', title));
								break;
							case 'spamdetected':
								alert(rep.errors.spamdetected.replace('{title}', title));
								break;
							case 'blocked':
								alert(rep.errors.blocked.replace('{title}', title));
								break;
							case 'filtered':
							case 'abusefilter-disallowed':
								alert(rep.errors.filtered.replace('{title}', title));
								break;
							case 'notoken':
								alert(rep.errors.notoken.replace('{title}', title));
								break;
							default:
								alert(rep.errors.default.replace('{title}', title));
								break;
						}
					} else if(data.edit.hasOwnProperty(captcha)) {
						alert(rep.errors.captcha.replace('{title}', title));
					}
					rep.success();
				}
			});
		}
	};
})(jQuery, mediaWiki);

$(mw.reporter.install());