Користувач:Andriy.v/Gadget-ReplaceImgs.js
Увага: Після публікування слід очистити кеш браузера, щоб побачити зміни.
- 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(' <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(' <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(' <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(' <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();
});