Користувач:Bunyk/PavloChemBotFixer.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.
// <nowiki>
if (typeof module !== 'object') { // browser:
(function ($, mw) {
'use strict';
var api = new mw.Api();
var missing_pages =[];
try {
missing_pages = JSON.parse(localStorage.missing_pages);
} catch (e) {}
if(!onErrorsPage()) {
$('a.extiw').each(function() {
var title = $(this).attr('title');
if(missing_pages.indexOf(title) != -1) {
$(this).append(
'<span>!!!</span>'
).css('color', '#ba0000');
}
});
}
$('span[title="Шаблон «не перекладено» не замінено"]').each(function() {
var link = $(this).prev();
var title = link.html();
var href = decodeURIComponent(link.attr('href').slice('/wiki/'.length));
var page = (new mw.Title(href)).getPrefixedText();
var button = $('<button>->[[]]</button>');
button.click(function() {
button.prop('disabled', true);
api.edit(
mw.config.get('wgPageName'),
function ( revision ) {
var new_text = remove_template(revision.content, page);
return {
text: new_text,
summary: '-[[Шаблон:нп]] для [[' + page + ']]',
minor: true
};
}
).then( function (res) {
if(res.nochange) {
button.html('Не змінено');
} else {
button.html('Збережено');
}
} );
});
$(this).append(button);
});
if (!onErrorsPage()) {
return;
}
$(function() {
console.log("Завантажено сторінку з помилками")
var missing_pages = [];
$("td:contains('Не знайдено сторінки') a").each(function() {
var contents = $(this).html();
if(missing_pages.indexOf(contents) == -1) {
missing_pages.push(contents);
}
});
localStorage.missing_pages = JSON.stringify(missing_pages);
var to_hide = {};
try {
to_hide = JSON.parse(localStorage.error_pages_to_hide);
} catch (e) {
console.log(e);
}
$('tr td:nth-child(3)').each(function() {
var jthis = $(this);
var firstCell = jthis.parent().children().first();
var title = firstCell.find('a').attr('title');
var hide = function(anim) {
var rows = 1;
if (firstCell.attr('rowspan')) {
rows = +firstCell.attr('rowspan');
}
var to_hide = jthis.parent();
while (rows > 0) {
if (anim) {
to_hide.fadeOut();
} else {
to_hide.hide();
}
to_hide = to_hide.next();
rows--;
}
};
if (to_hide[title]) {
var unhideButton = $('<button title="Таки треба">Показати ' + title + '</button>');
unhideButton.click(function() {
delete to_hide[title];
localStorage.error_pages_to_hide = JSON.stringify(to_hide);
jthis.parent().fadeIn();
unhideButton.fadeOut();
});
$('.mw-parser-output').append(unhideButton);
hide(false);
return;
}
var button = $('<button title="Тося зробит">x</button>');
button.click(function() {
to_hide[title] = true;
localStorage.error_pages_to_hide = JSON.stringify(to_hide);
hide(true);
});
jthis.append(button);
});
$("td:contains('хоча хотіли')").each(function() {
var contents = $(this).html();
var links = $('<p>' + contents + '</p>').find('a');
if(links.length != 3 && links.length != 4) {
return;
}
var last = links.length - 1;
var required = links[last].text;
if(!$(links[last]).hasClass('new')) {
// Link is not red
return;
}
var exists = links[last - 1].text;
var button = $('<button><- Перенаправити</button>');
button.click(function() {
button.prop('disabled', true);
if(confirm('Перенаправити "' + required + '" -> "' + exists + '" ?')) {
api.create(required, {}, '#ПЕРЕНАПРАВЛЕННЯ [[' + exists + ']]').then(function() {
button.html('Створено');
}, function() {
button.html('Невдача');
});
}
});
$(this).append('<br />');
$(this).append(button);
var button2 = $('<button><- Перенапралення з помилкою</button>');
button2.click(function() {
button2.prop('disabled', true);
if(confirm('Перенаправити "' + required + '" -> "' + exists + '" і позначити як помилку?')) {
api.create(required, {}, '#ПЕРЕНАПРАВЛЕННЯ [[' + exists + ']]\n\n{{Перенаправлення з помилки}}').then(function() {
button2.html('Створено');
}, function() {
button2.html('Невдача');
});
}
});
$(this).append(button2);
var button3 = $('<button>-> Перейменувати</button>');
button3.click(function() {
button3.prop('disabled', true);
if(confirm('Перейменувати "' + exists + '" на "' + required + '" ?')) {
api.postWithEditToken({
action: 'move',
from: exists,
to: required,
movetalk: '1',
reason: prompt(
'Причина',
'[[Користувач:BunykBot/Сторінки з неправильно використаним шаблоном "Не перекладено"|посилання на цю назву]]'
),
}).then(function() {
button3.html('Перейменовано');
}, function() {
button3.html('Невдача');
});
}
});
$(this).append(button3);
});
$("td:contains('з різними елементами вікіданих')").each(function() {
var contents = $(this).html();
var links = $('<p>' + contents + '</p>').find('a');
if(links.length != 2) {
return;
}
var button = $('<button>wikidata-redirect</button>');
button.click(function() {
button.prop('disabled', true);
if(confirm('Приєднати "' + links[0].text + '" до "' + links[1].text + '" ?')) {
api.edit(
links[1].text,
function ( revision ) {
var text = revision.content;
text = text.replace(/#(redirect|перенаправлення)/gi, '$1')
text += '\n{{wikidata-redirect}}'
return {
text: text,
summary: 'wikidata-redirect',
minor: true
};
}
).then(function (res) {
alert('ok');
});
}
});
$(this).append(button);
});
});
function onErrorsPage() {
return mw.config.get('wgPageName').endsWith('/Сторінки_з_неправильно_використаним_шаблоном_"Не_перекладено"');
}
}(jQuery, mediaWiki));
} else { // Node:
var testCases = [{
text: 'Під час {{Не перекладено|Наступ на Південний Ємен (2015)|південного наступу хуситів||Southern Yemen offensive (2015)}} Саудівська Аравія',
result: 'Під час [[Наступ на Південний Ємен (2015)|південного наступу хуситів]] Саудівська Аравія',
page: 'Наступ на Південний Ємен (2015)'
}, {
text: '* {{нп|Коледж Брін Мор||ru|Брин-Мор-колледж}}',
result: '* [[Коледж Брін Мор]]',
page: 'Коледж Брін Мор'
}, {
text: '* {{нп|Technicolor}}',
result: '* [[Technicolor]]',
page: 'Technicolor'
}, {
text: '* {{не перекладено|треба=Історія|текст=Історія|мова=en|є=History}}',
result: '* [[Історія]]',
page: 'Історія',
}, {
text: '| {{не перекладено|треба=Грут (Marvel Comics)|текст=Грут|мова=ru|є=Грут}}',
result: '| [[Грут (Marvel Comics)|Грут]]',
page: 'Грут (Marvel Comics)',
}, {
text: '{{Нп|треба=Покажчик цитування журналів|мова=en|є=Journal Citation Reports}}',
result: '[[Покажчик цитування журналів]]',
page: 'Покажчик цитування журналів',
}, {
text: '{{iw|розщеплення води|3=en|4=Water splitting}}',
result: '[[розщеплення води]]',
page: 'розщеплення води',
}];
for(var i=0; i<testCases.length; i++) {
var tc = testCases[i];
var res = remove_template(tc.text, tc.page);
console.assert(res == tc.result, tc.result + '\n is not equal to\n' + res);
}
}
function quote(str) {
var s = str.replace(/(?=[\/\\^$*+?.()|{}[\]])/g, "\\")
.replace(/ /g, '[_ ]');
s = '[' + s[0].toUpperCase() + s[0].toLowerCase() + ']' + s.slice(1);
return '(' + s + ')';
}
function remove_template(text, page_name) {
var templatePrefix = '{{\\s*([Нн]п5?|[Нн]е перекладено|iw2?)\\s*\\|\\s*';
var templatePrefixWithName = templatePrefix + quote(page_name) + '\\s*';
return text.replace(
rg(templatePrefixWithName + '\\|[34]\\s*=\\s*\\w+\\|[34]\\s*=.*?}}'),
'[[$2]]'
).replace(
rg(templatePrefixWithName + '(\\|[^|]*?)(\\|.*?)?}}'),
'[[' + page_name + '$3]]'
).replace(
rg(templatePrefixWithName + '}}'),
'[[' + page_name + ']]'
).replace(
rg(templatePrefix + 'треба\\s*=\\s*' + quote(page_name) + '\\s*\\|\\s*текст\\s*=\\s*([^|]+).*?}}'),
'[[' + page_name + '|$3]]'
).replace(
rg(templatePrefix + 'треба\\s*=\\s*' + quote(page_name) + '\\s*\\|.*?}}'),
'[[' + page_name + ']]'
).replace(
/\|\]\]/g,
']]'
).replace(
/\[\[([^|\]]+)\|\1\]\]/g,
'[[$1]]'
);
}
// Build a global regexp
function rg(pattern) {
//console.log(pattern);
return new RegExp(pattern, 'g');
}
// </nowiki>