MediaWiki:Gadget-QuickRename.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
/*
* @author RLuts
* @ver 0.2
* Quick Rename
* for ukwiki only
*/

//<nowiki>

$(document).ready(function () {
	if((mw.config.get( 'wgNamespaceNumber' ) === 0 | mw.config.get('debug')) && mw.config.get('wgArticleId') > 0) {
		mw.util.addPortletLink('p-cactions', 'javascript:quickRename.isMove();', 'Запит на перейменування');
	}
});

if (window.quickRename === undefined) {
	window.quickRename = {
		install: function() {
			this.page = 'Вікіпедія:Перейменування статей';
			this.tpl = 'Move';   
			this.incTpl = 'Rename';
			this.onIncTpl = 'Rename2';
			this.section = 1;
			
			if(mw.config.get('debug')) {
				this.page = 'User:RLuts/scripttest/QR';
			}
		},
		
		showDialog: function() {
			var qr = this;
			if($('#qr-rename-dialog').length === 0) {
				$( "#mw-content-text" ).append("<div id=\"qr-rename-dialog\" style=\"display:none;\" title=\"Заявка на перейменування статті\"><p style=\"font-size:80%\">Цей інструмент дозволяє спростити процес створення нових заявок на сторінці <a href=\"//uk.wikipedia.org/wiki/Вікіпедія:Перейменування_статей\">Вікіпедія:Перейменування статей</a>. Перед тим як зробити заявку, впевніться, що нова назва більше відповідає нормам української мови та/або <a href=\"//uk.wikipedia.org/wiki/ВП:ІС\">правилам найменування статей у Вікіпедії</a>.</p><p>Введіть нову назву:</p><input id=\"qr-new-name\">\n<p>Причина (вікірозміткою, підпис згенерується автоматично):</p><textarea rows=\"4\" cols=\"50\" id=\"qr-reason\"></textarea>\n</div>");
			}
			mw.loader.using( 'jquery.ui', function () {
				$( "#qr-rename-dialog" ).dialog({
					buttons: {
						"Додати новий запит": function() {
							qr.isExists();
                		}
            		}
				});
			});
		},
		
		isExists: function() {
			var qr = this;
			this.oldname = mw.config.get( 'wgPageName' ).replace(/_/g,' ');
			this.newname = $('#qr-new-name').val();
			var title = this.page + '/' + this.oldname + ' → ' + this.newname;
			var param = {
				action: 'query',
				list: 'allpages',
				format: 'json',
				titles: title,
				aplimit: '1'
			};
			$.get(mw.util.wikiScript('api'), param).done(function(data) {
				if(data.query.pages.hasOwnProperty(-1)) {
					qr.newReq();
				} else {
					$("#qr-rename-dialog").html("Таке перейменування уже обговорювалось<br/><br/><a href=\"" + mw.config.get( 'wgServer' ) + mw.config.get( 'wgArticlePath' ).replace('$1',title) + "\">Перейти до обговорення</a>");
					$("#qr-rename-dialog").dialog({
						buttons: {
							"ОК": function() {
								$( this ).dialog( "close" );
							}
						}
					});
				}
			});
		},
		
		newReq: function() {
			var qr = this;
			var reason = $('#qr-reason').val();
			if( !this.isEmpty( this.newname ) && !this.isEmpty( this.reason )) {
				var title = this.page + '/' + this.oldname + ' → ' + this.newname;
				var content = '=== {{' + this.onIncTpl + '|' + this.oldname + '|' + this.newname + "}} ===\n" + reason + "--~~~~";
				var summary = 'Автоматичне створення нового обговорення ([[Довідка:Додатки/QuickRename|QuickRename.js]])';
				$("#qr-rename-dialog").dialog({
					closeOnEscape: false,
					buttons: false
				});
				$( "#qr-rename-dialog" ).html('Створення обговорення');
				qr.preferences(function (watchlist) {
					watchlist == undefined ? watchlist_aux = undefined: watchlist_aux = watchlist.watchlist_discussionpage;
					qr.writeInPage(title, content, summary, false, false, watchlist_aux,  function() {
						qr.addMove(watchlist);
					});
				}); 
			} else {
				$( "#qr-rename-dialog" ).append("<br/><span style=\"color: red; font-size: 80%;\">Усі поля повинні бути заповнені</span>");
			}			
		},
		
		addMove: function(watchlist) {
			var qr = this;
			$( "#qr-rename-dialog" ).html('Вставка шаблону Move');
			watchlist == undefined ? watchlist_aux = undefined: watchlist_aux = watchlist.watchlist_renamepage;
			qr.writeInPage(qr.oldname, "{{"+ qr.tpl + "|" + qr.newname + "}}\n","шаблон перейменування статті ([[ВП:Додатки/QuickRename|QuickRename.js]])","prependtext",false, watchlist_aux, function () {
				qr.getMovePage(watchlist);
			});
		},
		
		getMovePage: function(watchlist) {
			var qr = this;
			$( "#qr-rename-dialog" ).html('Вставка обговорення на сторінку Вікіпедія:Перейменування статей<br/><br/><span style="color: red;">Будь ласка, не закривайте це вікно. Редагування цієї сторінки може тривати досить довго через велику кількість шаблонів.</span>');
			var param = {
				action: 'query',
				prop: 'revisions',
				format: 'json',
				rvprop: 'content',
				titles: qr.page,
				rvsection: qr.section,
				rvlimit: '1',
				indexpageids: ''
			};
			$.get(mw.util.wikiScript('api'), param).done(function(data) {
				if(data.query.pages.hasOwnProperty(-1)) {
					alert('Невдалося завантажити текст сторінки ' + qr.page);
					location.reload();
				}
				var id = data.query.pageids[0];
				var content = data.query.pages[id].revisions[0]['*'];
				content = content.replace(/(--\>\n)/,"$1{{" + qr.incTpl + "|" + qr.oldname + "|" + qr.newname + "}}\n");
				watchlist == undefined ? watchlist_aux = undefined: watchlist_aux = watchlist.watchlist_nominatedpage;
				qr.writeInPage(qr.page, content, 'Автоматичне створення нового обговорення ([[Довідка:Додатки/QuickRename|QuickRename.js]])', false, qr.section, watchlist_aux, function () {
					qr.success();
				});
			});
		},
		
		success: function() {
			$( "#qr-rename-dialog" ).dialog("close");
			$( "#qr-rename-dialog" ).remove();
			mw.notify($("<span>Ваше обговорення успішно додано на сторінку Вікіпедія:Перейменування статей.<br/>Обговорення та стаття також додані у Ваш список спостереження</span>"));
		},
		
		writeInPage: function(title, content, summary, option, section, watchlist, success) {
			var qr = this;
			if (watchlist == undefined)
				watchlist = 'watch';
			var param = {
				action: 'edit', 
				title: title, 
				summary: summary, 
				watchlist: watchlist,
				format: 'json'
			};
			param[option || 'text'] = content;
			if(section) {
				param.section = section;
			}
			api = new mw.Api();
			api.postWithToken( 'csrf', param ).done( function ( data ) {
					success();
			}).fail(function (code) {
				qr.editErrors(code, title);
			});
		},
		
		isEmpty: function(str) {
			return (!/\S/.test(str));
		},
		
		isMove: function() {
			var qr = this;
			this.install();
			var id = mw.config.get( 'wgArticleId' ); 
			var param = {
				action: 'query',
				list: 'embeddedin',
				format: 'json',
				eititle: 'Template:Move',
				eicontinue: '10|Move|' + id,
				eilimit: '1'
			};
			$.get(mw.util.wikiScript('api'), param).done(function(data) {
				if(data['query-continue'] && data.query.embeddedin[0].pageid == id) {
					qr.moveExists(); 
				} else {
					qr.showDialog();
				}
			});
		},
		
		moveExists: function() {
			if($( "#qr-move" ).length === 0) {
				$( "#mw-content-text" ).append("<div id=\"qr-move\" style=\"display:none;\" title=\"Помилка\"><p>На сторінці знайдено включення шаблону перейменування статей. Можливо перейменування цієї статті уже обговорюється?</p></div>");
			}
			$( "#qr-move" ).dialog({
				buttons: {
					"ОК": function() {
						$( this ).dialog( "close" );
					}
				}
			});
		},
		preferences: function (next) {
			var params = {
				action: 'query',
				titles: 'User:'+ mw.config.get("wgUserName") +'/gadget-preferences.json',
				prop: 'pageprops',
				format: 'json'
			};
			var api = new mw.Api();
			api.get( params ).then( function ( data ) {
				if (data.query.pages[-1] == undefined) {
					$.getJSON(mw.config.get('wgScriptPath')+'/index.php?action=raw&ctype=application/json&title=User:' + mw.config.get("wgUserName") + '/gadget-preferences.json', function(data){
						next(data.QuickRename);
					});
				}
				else
					next();
			});
		},
		editErrors: function(code, title) {
			var qr = this;
			switch(code) {
				case 'editconflict':
					alert('Конфлікт редагувань на сторінці ' + title + '. Відкиньте редагування, зроблені цим додатком за останні декілька секунд та спробуйте ще раз');
					break;
				case 'protectedpage':
					alert('Сторінка ' + title + ' захищена. Зв\'яжіться з адміністраторами на сторінці ВП:Запити до адміністраторів');
					break;
				case 'spamdetected':
					alert('При редагуванні сторінки ' + title + ' автоматичний фільтр визначив ваш текст, як спам');
					break;
				case 'blocked':
					alert('Ви заблоковані у цій вікі. Спробуйте, будь ласка, пізніше');
					break;
				case 'abusefilter-disallowed':
					alert('Автоматичний фільтр заборонив редагування сторінки ' + title);
					break;
				case 'notoken':
					alert('Неможливо отримати токен. Зверніться, будь ласка, у «Кнайпу (адміністрування)»');
					break;
				default:
					alert('Невідома помилка при редагуванні сторінки ' + title + '. Відкиньте редагування, зроблені цим додатком за останні декілька секунд та спробуйте пізніше');
					break;
			}
			qr.success();
		}
	};
}

//</nowiki>