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

  • Firefox / Safari: тримайте Shift, коли натискаєте Оновити, або натисніть Ctrl-F5 чи Ctrl-Shift-R (⌘-R на Apple Mac)
  • Google Chrome: натисніть Ctrl-Shift-R (⌘-Shift-R на Apple Mac)
  • Edge: тримайте Ctrl, коли натискаєте Оновити, або натисніть Ctrl-F5.
// author Andriy.v
// based on [[user:RLuts/RenameReplace.js]]

if (typeof(window.RenameReplaceImgs) == 'undefined') {
	var RenameReplaceImgs = {
		install: function() {
			// Додати кнопку для заміни для адміністраторів та перейменовувачів файлів
			if( ($.inArray('sysop',mw.config.get('wgUserGroups')) > -1 || $.inArray('filemover',mw.config.get('wgUserGroups')) > -1) && mw.config.get('wgNamespaceNumber') == 6) {
				mw.loader.using(['mediawiki.util']).done(function () {
					mw.util.addPortletLink('p-cactions', 'javascript:window.RenameReplaceImgs.replaceDialog();', 'Замінити');
				});
			}
			
			// Додати кнопку заміни файлів, які є у Вікісховищі адміністраторам
			if( $.inArray('sysop' ,mw.config.get('wgUserGroups')) > -1 && mw.config.get('wgNamespaceNumber') == 6 && $('.mw-imagepage-duplicates .external').length > 0) {
				$.each(	$('.mw-imagepage-duplicates .external'), function() {
					if($(this).html() != mw.config.get('wgPageName').replace(/_/g, ' ') && $('.mw-imagepage-linkstoimage').length > 0) {
						$(this).parent().append('&nbsp<a href="javascript:RenameReplaceImgs.replaceonly(\''+$(this).html().replace('Файл:','').replace('\'','\\\'').replace(RegExp('\"','g'),'\\"') + '\');">(замінити включення на цей файл за допомогою скрипта)</a>');
					} else {
						if($.inArray('sysop', mw.config.get('wgUserGroups')) > -1) {
							if($(this).html() == mw.config.get('wgPageName').replace(/_/g, ' '))
								$(this).parent().append('&nbsp<a href="https://uk.wikipedia.org/w/index.php?title=' + encodeURIComponent(mw.config.get('wgPageName')) + '&action=delete&wpReason=' + encodeURIComponent('Є у Вікісховищі: [[commons:File:' + mw.config.get('wgTitle') + '|під такою самою назвою]]') + '">(вилучити)</a>');
							else if($('.mw-imagepage-linkstoimage').length === 0)
								$(this).parent().append('&nbsp<a href="https://uk.wikipedia.org/w/index.php?title=' + encodeURIComponent(mw.config.get('wgPageName')) + '&action=delete&wpReason=' + encodeURIComponent('Є у Вікісховищі: [[commons:File:' + $(this).html().replace('Файл:','') + '|'+ $(this).html().replace('Файл:','') +']]') + '">(вилучити)</a>');
						}
					}
				});
			}
			if($('#nowcommons').text().replace(/_/g, ' ') !== mw.config.get('wgTitle') && $('.mw-imagepage-linkstoimage').length > 0)
				$('#nowcommons').append('&nbsp<a style="color:lightblue" href="javascript:RenameReplaceImgs.replaceonly(\''+$('#nowcommons').text().replace('Файл:','').replace('File:','').replace('\'','\\\'').replace(/_/g, ' ') + '\');">(замінити включення на цей файл за допомогою скрипта)</a>');
		},
		
		replaceonly: function(fn) {
			var ri = this;
			var page = mw.config.get('wgPageName');
			ri.wait('Заміна включень '+ mw.config.get('wgTitle') + ' → ' + fn);
			var params = {
				action: 'query',
				format: 'json',
				list: 'imageusage',
				iutitle: page,
				};
			api = new mw.Api();
			api.get( params ).done( function ( data ) {
				var pages = data.query.imageusage;
				var n = pages.length;
				ri.editApi(pages, n, fn);
			});
		},
		editApi: function (pages, iterations, fn) {
			var ri = this;
			if (iterations != 0) {
				var re = RegExp(mw.config.get('wgTitle').replace(/([\.\"\[\]\(\)\\\/\|\?\*\+\#\^\$])/g, '\\$1').replace(/ /g, '[_ ]'),"gi");
				iterations --;
				new mw.Api().edit(pages[iterations].title, function(revision) {
					return {
						text: revision.content.replace(re, fn),
						summary: '[[user:Andriy.v/Gadget-ReplaceImgs.js|Script]]: заміна файлу',
						assert: 'user'
						};
				}).then(function () {
					ri.editApi(pages, iterations, fn);
				}).fail( function (error) {
					ri.editErrors(error, page);
					});
				}
				else {
					ri.wait('Включення замінено');
					setTimeout(function(){
						$( '#rr-rename-dialog' ).dialog('close');
						location.reload(); 
					},700);
				}
			},
		replaceDialog: function() {
			var ri = this;
			var content = '<p style="color:red">УВАГА! ЦЕЙ СКРИПТ ЩЕ ТЕСТУЄТЬСЯ. ПЕРЕВІРЯЙТЕ, БУДЬ ЛАСКА, ВСІ РЕДАГУВАННЯ, ЗРОБЛЕНІ СКРИПТОМ, А ПРО БАГИ <a style="color:red; text-decoration:underline" href="//uk.wikipedia.org/wiki/User_talk:Andriy.v">ПИШІТЬ Andriy.v\</a></p><p style="font-size:.9em">Скрипт постарається замінити всі посилання. Доступний лише адміністраторам</p><p>Нова назва (без простору імен):</p><input id="rr-renameid" value="" style="width:200px">';
			if($( "#rr-rename-dialog" ).length === 0 ) {
				$( "#mw-content-text" ).append('<div id="rr-rename-dialog" style="display:none;" title="Замінити">'+ content + '</div>');
			} else {
				$( "#rr-rename-dialog" ).html(content);
			}
				$('#rr-rename-dialog').dialog({
					buttons: {
						'Замінити': function() {
							var newname = $('#rr-renameid').val(), reason = $('#rr-reason').val();
							if( !/\S/.test(newname)  ) {
								$('#rr-rename-dialog').append( '<p style="font-size:80%; color:red">Введіть нову назву</p>' );
								return;
							}
							ri.replaceonly(newname);
						}
					}
				});
				$( '#rr-renameid' ).focus();
		},
		wait: function(mes) {
			console.log('wait');
			if($('#rr-rename-dialog').length === 0) {
				$( "#mw-content-text" ).append('<div id="rr-rename-dialog" style="display:none;"></div>');
			}
			if ($("#rr-rename-dialog").hasClass('ui-dialog-content')) {
				$('#rr-rename-dialog').dialog('destroy');
			}
			$('#rr-rename-dialog').prop('title', 'Зачекайте, будь ласка...');
			$('#rr-rename-dialog').html('<p style="font-size: 120%; font-weight:bold;">' + mes + '</p>');
			mw.loader.using( 'jquery.ui', function() {
				$('#rr-rename-dialog').dialog({
					modal: true,
					buttons: false
				});
			});
		},
		editErrors: function(code, title) {
			switch(code) {
				case 'editconflict':
					alert('Конфлікт редагувань на сторінці ' + title + '. Відкиньте редагування, зроблені цим додатком за останні декілька секунд та спробуйте ще раз');
					break;
				case 'protectedtitle':
					alert('Сторінка ' + title + ' захищена. Зв\'яжіться з адміністраторами на сторінці ВП:Запити до адміністраторів');
					break;
				case 'spamdetected':
					alert('При редагуванні сторінки ' + title + ' автоматичний фільтр визначив ваш текст, як спам');
					break;
				case 'blocked':
					alert('Ви заблоковані у цій вікі. Спробуйте, будь ласка, пізніше');
					break;
				case 'filtered':
				case 'abusefilter-disallowed':
					alert('Автоматичний фільтр заборонив редагування сторінки ' + title);
					break;
				case 'notoken':
					alert('Неможливо отримати токен. Зверніться, будь ласка, у «Кнайпу (адміністрування)»');
					break;
				default:
					alert('Невідома помилка при редагуванні сторінки ' + title + '. Відкиньте редагування, зроблені цим додатком за останні декілька секунд та спробуйте пізніше');
					break;
			}
		}
	};
}

$(document).ready(function() {
	RenameReplaceImgs.install();
});