m (Please discuss undoing of changes that don't break the script on the talkpage.) Tag: sourceedit |
Affirmation (talk | contribs) (Undid revision 58211 by KockaAdmiralac (talk)—I think it does break the script. The button does not appear for me anymore.) Tag: sourceedit |
||
Line 292: | Line 292: | ||
this.i18nu = $.extend(i18nc1.en, i18nc1[config.wgUserLanguage.split('-')[0]], i18nc1[config.wgUserLanguage]); |
this.i18nu = $.extend(i18nc1.en, i18nc1[config.wgUserLanguage.split('-')[0]], i18nc1[config.wgUserLanguage]); |
||
this.i18nc = $.extend(i18nc2.en, i18nc2[config.wgContentLanguage.split('-')[0]], i18nc2[config.wgContentLanguage]); |
this.i18nc = $.extend(i18nc2.en, i18nc2[config.wgContentLanguage.split('-')[0]], i18nc2[config.wgContentLanguage]); |
||
+ | $('.mw-spcontent p') |
||
− | $( '.page-header__contribution-buttons' ).append( '<a class="wds-is-squished wds-button" id="btn-resolve-redirects" title=' + this.i18nu.button + '>' + this.i18nu.button + '</button>' ); |
||
+ | .first() |
||
+ | .append( |
||
+ | $('<p>') |
||
+ | .append( |
||
+ | $('<a>') |
||
+ | .attr({ |
||
+ | class: 'button', |
||
+ | style: 'cursor: pointer;', |
||
+ | id: 'btn-resolve-redirects' |
||
+ | }) |
||
+ | .text(this.i18nu.button) |
||
+ | ) |
||
+ | ); |
||
$('#btn-resolve-redirects').click($.proxy(this.onClick, this)); |
$('#btn-resolve-redirects').click($.proxy(this.onClick, this)); |
||
}, |
}, |
Revision as of 12:18, 12 July 2017
/*
* Redirect Management
* @description Delete broken redirects and fix double redirects automatically.
* @author Ozuzanna
* @author KockaAdmiralac
* <nowiki>
*/
(function() {
var config = mw.config.get([
'wgCanonicalSpecialPageName',
'wgContentLanguage',
'wgUserGroups',
'wgUserLanguage'
]);
if (
!(/DoubleRedirects|BrokenRedirects/g.test(config.wgCanonicalSpecialPageName))
|| $('#btn-resolve-broken').length
|| $('#btn-resolve-double').length
|| ( // ew
!(/sysop|vstf|staff|helper|content-moderator/.test(config.wgUserGroups))
&& config.wgCanonicalSpecialPageName === 'BrokenRedirects'
)
) {
return;
}
var i18n = {
en: {
button: 'Resolve redirects',
editSummary: 'Resolving [[Special:DoubleRedirects|double redirect]] (automatic)',
deleteReason: 'Resolving [[Special:BrokenRedirects|broken redirect]] (automatic)',
successDouble: 'Resolving double redirect for $1 successful!',
errorDouble: 'Failed to resolve double redirect for $1',
successBroken: 'Deletion of $1 successful!',
errorBroken: 'Failed to delete $1'
},
ar: {
button: 'إزالة إعادة توجيه',
editSummary: 'القضاء [[Special:DoubleRedirects|انقر نقرا مزدوجا إعادة توجيه]] (تلقائي)',
deleteReason: 'القضاء [[Special:BrokenRedirects|كسر الموجهات]] (تلقائي)',
successDouble: 'القضاء على مضاعفة إعادة توجيه 1$ ناجحة!',
errorDouble: '$فشلت في حل مزدوج توجيه 1',
successBroken: '$1 حذف ناجحة!',
errorBroken: '$فشل إزالة 1'
},
be: {
button: 'Знішчэнне перанакіраванняў',
editSummary: 'Знішчэнне [[Special:DoubleRedirects|падвойных перанакіраванняў]] (аўтаматычнае)',
deleteReason: 'Знішчэнне [[Special:BrokenRedirects|разарваных перанакіраванняў]] (аўтаматычнае)',
successDouble: 'Знішчэнне падвойнага перанакіравання для $1 выканана паспяхова!',
errorDouble: 'Не атрымалася знішчыць падвойнае перанакіраванне для $1',
successBroken: 'Выдаленне $1 выканана паспяхова!',
errorBroken: 'Не атрымалася выдаліць $1'
},
bs: {
button: 'Sredi preusmjeravanja',
editSummary: 'Sređivanje [[Special:DoubleRedirects|dvostrukog preusmjeravanja]] (automatsko)',
deletereason: 'Sređivanje [[Special:BrokenRedirects|nedovršenog preusmjeravanja]] (automatsko)',
successDouble: 'Sređivanje dvostrukog preusmjeravanja za $1 uspješno!',
errorDouble: 'Greška pri sređivanju dvostrukog preusmjeravanja za $1',
successBroken: 'Brisanje $1 uspješno!',
errorBroken: 'Greška pri brisanju $1'
},
ca: {
button: 'Correcció de redireccions',
editSummary: 'Correcció de la [[Special:DoubleRedirects|redirecció doble]] (automàtic)',
deleteReason: 'Correcció de la [[Special:BrokenRedirects|redirecció trencada]] (automàtic)',
successDouble: 'La redirecció doble cap a $1 ha estat corregida amb èxit!',
errorDouble: 'Hi ha hagut un error en corregir la redirecció doble cap a $1',
successBroken: '$1 ha estat esborrat amb èxit!',
errorBroken: 'Hi ha hagut un error en esborrar $1'
},
de: {
button: 'Weiterleitungen beheben',
editSummary: '[[Special:DoubleRedirects|Doppelte Weiterleitung]] behoben (automatisch)',
deleteReason: '[[Special:BrokenRedirects|Kaputte Weiterleitung]] behoben (automatisch)',
successDouble: 'Doppelte Weiterleitung $1 erfolgreich behoben!',
errorDouble: 'Fehler beim Beheben der doppelten Weiterleitung $1',
successBroken: 'Löschen von $1 erfolgreich!',
errorBroken: 'Löschen von $1 fehlgeschlagen'
},
es: {
button: 'Corrección de redirecciones',
editSummary: 'Corrección de la [[Special:DoubleRedirects|redirección doble]] (automático)',
deleteReason: 'Corrección de la [[Special:BrokenRedirects|redirección rota]] (automático)',
successDouble: '¡La redirección doble hacia $1 ha sido corregida con éxito!',
errorDouble: 'Ha habido un error al corregir la redirección doble hacia $1',
successBroken: '¡$1 ha sido borrado con éxito!',
errorBroken: 'Ha habido un error al borrar $1'
},
fi: {
button: 'Ratkaise uudelleenohjaukset',
editSummary: 'Ratkaistaan [[Special:DoubleRedirects|tupla uudelleenohjausta]] (automaattinen)',
deleteReason: 'Ratkaistaan [[Special:BrokenRedirects|rikkinäistä uudelleenohjausta]] (automaattinen)',
successDouble: 'Kohteen $1 tupla uudelleenohjauksen ratkaiseminen onnistui!',
errorDouble: 'Kohteen $1 tupla uudelleenohjauksen ratkaiseminen epäonnistui',
successBroken: 'Kohteen $1 poistaminen onnistui!',
errorBroken: 'Kohteen $1 poistaminen epäonnistui'
},
fr: {
button: 'Correction des redirections',
editSummary: 'Correction de la [[Special:DoubleRedirects|double redirection]] (automatique)',
deleteReason: 'Correction de la [[Special:BrokenRedirects|redirection cassée]] (automatique)',
successDouble: 'La double redirection vers $1 a été corrigée avec succès !',
errorDouble: 'Une erreur s\'est produite lors de la correction de la double redirection vers $1',
successBroken: 'La page $1 a été supprimée avec succès !',
errorBroken: 'Une erreur s\'est produite lors de la suppression de la page $1'
},
fy: {
button: 'Synonimen korrizjearje',
editSummary: '[[Special:DoubleRedirects|Dûbelde synonym]] korrizjeare (automatysk)',
deleteReason: '[[Special:BrokenRedirects|Mis synonym]] korrizjeare (automatysk)',
successDouble: 'Dûbelde synonym $1 súksesfol korrizjeare!',
errorDouble: 'Koe dûbelde synonym $1 net korrizjearje',
successBroken: '$1 súksesfol wiske!',
errorBroken: 'Koe $1 net wiskje'
},
gl: {
button: 'Corrección de redireccións',
editSummary: 'Corrección da [[Special:DoubleRedirects|redirección dobre]] (automático)',
deleteReason: 'Corrección da [[Special:BrokenRedirects|redirección rota]] (automático)',
successDouble: 'A redirección dobre cara a $1 foi corrixida con éxito!',
errorDouble: 'Houbo un erro ao corrixir a redirección dobre cara a $1',
successBroken: '$1 foi borrado con éxito!',
errorBroken: 'Houbo un erro ao borrar $1'
},
hi: {
button: 'संकल्प रीडायरेक्ट',
editSummary: 'हल [[Special:DoubleRedirects|डबल अनुप्रेषित]] (स्वचालित)',
deleteReason: 'हल [[Special:BrokenRedirects|टूट अनुप्रेषित]] (स्वचालित)',
successDouble: 'हल डबल $1 सफल लिए अनुप्रेषित!',
errorDouble: '$1 के लिए डबल अनुप्रेषित को हल करने में विफल',
successBroken: '$1 का विलोपन सफल!',
errorBroken: '$1 को नष्ट करने में विफल'
},
hr: {
button: 'Rješavanje preusmjeravanja',
editSummary: 'Otklanjanje [[Special:DoubleRedirects|dvostrukih preusmjeravanja]] (automatski)',
deleteReason: 'Otklanjanje [[Special:BrokenRedirects|krivulje preusmjeravanja]] (automatski)',
successDouble: 'Otklanjanje dvostrukog preusmjeravanja $1 je završeno!',
errorDouble: 'Nije uspio eliminirati dvostruko preusmjeravanje $1',
successBroken: 'Brisanje $1 je završeno!',
errorBroken: 'Nije moguće izbrisati $1'
},
hu: {
button: 'Átirányítások megoldása',
editSummary: 'Megoldás [[Special:DoubleRedirects|dupla átirányítás]] (automatikus)',
deleteReason: 'Megoldás [[Special:BrokenRedirects|rossz átirányítás]] (automatikus)',
successDouble: '$1-nek a kettős átirányításának megoldása sikeres!',
errorDouble: '$1-nek a kettős átirányítása sikertelen',
successBroken: '$1 törlése sikeres!',
errorBroken: '$1-t nem sikerült törölni!'
},
it: {
button: 'Correggi redirect',
editSummary: 'Correzione del [[Special:DoubleRedirects|redirect doppio]] (automatico)',
deleteReason: 'Correzione del [[Special:BrokenRedirects|redirect errato]] (automatico)',
successDouble: 'Il redirect doppio per $1 è stato corretto con successo!',
errorDouble: 'C\'è stato un errore durante la correzione del redirect doppio per $1',
successBroken: '$1 è stato cancellato con successo!',
errorBroken: 'C\'è stato un errore durante la cancellazione di $1'
},
kn: {
button: 'ಪುನರ್ನಿರ್ದೇಶನಗಳು ಪರಿಹರಿಸಿ',
editSummary: 'ಪರಿಹರಿಸಲಾಗುತ್ತಿದೆ [[Special:DoubleRedirect|ಡಬಲ್ ಮರುನಿರ್ದೇಶಿಸುತ್ತದೆ]] (ಸ್ವಯಂಚಾಲಿತ)',
deleteReason: 'ಪರಿಹರಿಸಲಾಗುತ್ತಿದೆ [[Special:BrokenRedirect|ಮುರಿದು ಮರುನಿರ್ದೇಶಿಸುತ್ತದೆ]] (ಸ್ವಯಂಚಾಲಿತ)',
successDouble: 'ಪರಿಹರಿಸಲಾಗುತ್ತಿದೆ ಡಬಲ್ $1 ಯಶಸ್ವಿ ಮರುನಿರ್ದೇಶಿಸುತ್ತದೆ!',
errorDouble: '$1 ಡಬಲ್ ಮರುನಿರ್ದೇಶಿಸುತ್ತದೆ ಪರಿಹರಿಸುವಲ್ಲಿ ವಿಫಲಗೊಂಡಿದೆ ',
successBroken: '$1 ಅಳಿಸುವಿಕೆ ಯಶಸ್ವಿ!',
errorBroken: '$1 ಅಳಿಸಲು ವಿಫಲವಾಗಿದೆ'
},
ko: {
button: '넘겨주기 문서 관리',
editSummary: '[[Special:DoubleRedirects|이중 넘겨주기]]를 고침 (자동)',
deleteReason: '[[Special:BrokenRedirects|깨진 넘겨주기]]를 고침 (자동)',
successDouble: '성공적으로 $1의 이중 넘겨주기를 고쳤습니다.',
errorDouble: '$1의 이중 넘겨주기를 고치는 데 실패했습니다.',
successBroken: '성공적으로 $1을(를) 삭제했습니다.',
errorBroken: '$1을(를) 삭제하는 데 실패했습니다.'
},
mo: {
button: 'Коректаря редирекционэрилор',
editSummary: 'Коректаря [[Special:DoubleRedirects|редирекционэрий дубле]] (аутоматик)',
deleteReason: 'Коректаря [[Special:BrokenRedirects|редирекционэрий ынтрерупте]] (аутоматик)',
successDouble: 'Редирекционаря дублэ спре $1 с\'а коректат ку сукчес!',
errorDouble: 'А апэрут о ероаре ла коректаря редирекционэрий дубле спре $1',
successBroken: '$1 а фост штерс ку сукчес!',
errorBroken: 'А апэрут о ероаре ла штерӂеря паӂиний $1'
},
nl: {
button: 'Doorverwijzingen corrigeren',
editSummary: '[[Special:DoubleRedirects|Dubbele doorverwijzing]] gecorrigeerd (automatisch)',
deleteReason: '[[Special:BrokenRedirects|Defecte doorverwijzing]] gecorrigeerd (automatisch)',
successDouble: 'Dubbele doorverwijzing $1 succesvol gecorrigeerd!',
errorDouble: 'Kon dubbele doorverwijzing $1 niet corrigeren',
successBroken: '$1 succesvol verwijderd!',
errorBroken: 'Kon $1 niet verwijderen'
},
oc: {
button: 'Correccion de redireccions',
editSummary: 'Correccion de la [[Special:DoubleRedirects|redireccion dobla]] (automatic)',
deleteReason: 'Correccion de la [[Special:BrokenRedirects|redireccion copada]] (automatic)',
successDouble: 'La redireccion dobla vèrs $1 es estat corregida amb capitada !',
errorDouble: 'I a agut una error al moment de corregir la redireccion dobla vèrs $1',
successBroken: '$1 es estat escafat amb capitada !',
errorBroken: 'I a agut una error al moment d\'escafar $1'
},
pl: {
button: 'Napraw przekierowania',
editSummary: 'Naprawa [[Special:DoubleRedirects|podwójnego przekierowania]] (automatycznie)',
deleteReason: 'Usunięcie [[Special:BrokenRedirects|zerwanego przekierowania]] (automatycznie)'
},
pt: {
button: 'Correcção de redireccionamentos',
editSummary: 'Correcção do [[Special:DoubleRedirects|redireccionamento duplo]] (automático)',
deleteReason: 'Correcção do [[Special:BrokenRedirects|redireccionamento quebrado]] (automático)',
successDouble: 'O redireccionamento duplo para $1 foi corrigido com sucesso!',
errorDouble: 'Ocorreu um erro ao corrigir o redireccionamento duplo para $1',
successBroken: '$1 foi apagado com sucesso!',
errorBroken: 'Ocorreu um erro ao apagar $1'
},
'pt-br': {
button: 'Resolver redirecionamentos',
editSummary: 'Resolvendo o [[Special:DoubleRedirects|redirecionamento duplo]] (automático)',
deleteReason: 'Resolvendo o [[Special:BrokenRedirects|redirecionamento quebrado]] (automático)',
successDouble: 'O redireccionamento duplo para $1 foi resolvido com sucesso!',
errorDouble: 'Falhou em resolver redirecionamento duplo para $1',
successBroken: 'Eliminação de $1 com sucesso!',
errorBroken: 'Falhou em deletar $1'
},
ro: {
button: 'Corectarea redirecţionărilor',
editSummary: 'Corectarea [[Special:DoubleRedirects|redirecţionării duble]] (automatic)',
deleteReason: 'Corectarea [[Special:BrokenRedirects|redirecţionării întrerupte]] (automatic)',
successDouble: 'Redirecţionarea dublă spre $1 s-a corectat cu succes!',
errorDouble: 'A apărut o eroare la corectarea redirecţionării duble spre $1',
successBroken: '$1 a fost şters cu succes!',
errorBroken: 'A apărut o eroare la ştergerea paginii $1'
},
ru: {
button: 'Устранение перенаправлений',
editSummary: 'Устранение [[Special:DoubleRedirects|двойных перенаправлений]] (автоматическое)',
deleteReason: 'Устранение [[Special:BrokenRedirects|разорванных перенаправлений]] (автоматическое)',
successDouble: 'Устранение двойного перенаправления для $1 выполнено успешно!',
errorDouble: 'Не удалось устранить двойное перенаправление для $1',
successBroken: 'Удаление $1 выполнено успешно!',
errorBroken: 'Не удалось удалить $1'
},
sr: {
button: 'Среди преусмерења',
editSummary: 'Сређивање [[Special:DoubleRedirects|двоструког преусмерења]] (аутоматско)',
deleteReason: 'Сређивање [[Special:BrokenRedirects|поквареног преусмерења]] (аутоматско)',
successDouble: 'Сређивање двоструког преусмерења за $1 успешно!',
errorDouble: 'Грешка при сређивању двоструког преусмерења за $1',
successBroken: 'Брисање $1 успешно!',
errorBroken: 'Неуспех при брисању $1'
},
'sr-el': {
button: 'Sredi preusmerenja',
editSummary: 'Sređivanje [[Special:DoubleRedirects|dvostrukog preusmerenja]] (automatsko)',
deleteReason: 'Sređivanje [[Special:BrokenRedirects|pokvarenog preusmerenja]] (automatsko)',
successDouble: 'Sređivanje dvostrukog preusmerenja za $1 uspešno!',
errorDouble: 'Greška pri sređivanju dvostrukog preusmerenja za $1',
successBroken: 'Brisanje $1 uspešno!',
errorBroken: 'Neuspeh pri brisanju $1'
},
uk: {
button: 'Усунення перенаправлень',
editSummary: 'Усунення [[Special:DoubleRedirects|подвійних перенаправлень]] (автоматичне)',
deleteReason: 'Усунення [[Special:BrokenRedirects|розірваних перенаправлень]] (автоматичне)',
successDouble: 'Усунення подвійного перенаправлення для $1 виконано успішно!',
errorDouble: 'Не вдалося усунути подвійне перенаправлення для $1',
successBroken: 'Видалення $1 виконано успішно!',
errorBroken: 'Не вдалося видалити $1'
},
val: {
button: 'Correcció de redireccions',
editSummary: 'Correcció de la [[Special:DoubleRedirects|redirecció doble]] (automàtic)',
deleteReason: 'Correcció de la [[Special:BrokenRedirects|redirecció trencada]] (automàtic)',
successDouble: '¡La redirecció doble cap a $1 ha segut corregida en èxit!',
errorDouble: 'Hi ha hagut un error corregint la redirecció doble cap a $1',
successBroken: '¡$1 ha segut borrat en èxit!',
errorBroken: 'Hi ha hagut un error borrant $1'
}
};
var RedirectManagement = {
init: function() {
this.api = new mw.Api();
this.double = config.wgCanonicalSpecialPageName === 'DoubleRedirects';
// ;-;
var i18nc1 = $.extend(true, {}, i18n),
i18nc2 = $.extend(true, {}, i18n);
this.i18nu = $.extend(i18nc1.en, i18nc1[config.wgUserLanguage.split('-')[0]], i18nc1[config.wgUserLanguage]);
this.i18nc = $.extend(i18nc2.en, i18nc2[config.wgContentLanguage.split('-')[0]], i18nc2[config.wgContentLanguage]);
$('.mw-spcontent p')
.first()
.append(
$('<p>')
.append(
$('<a>')
.attr({
class: 'button',
style: 'cursor: pointer;',
id: 'btn-resolve-redirects'
})
.text(this.i18nu.button)
)
);
$('#btn-resolve-redirects').click($.proxy(this.onClick, this));
},
onClick: function() {
$('.special > li').each($.proxy(function(_, el) {
var children = $(el).children();
if(children.length !== 4) {
// Already resolved
return;
}
var page = $(children[0]).text();
this.api.post($.extend({
title: page,
watchlist: 'nochange',
token: mw.user.tokens.get('editToken')
}, this.double ? {
action: 'edit',
text: '#REDIRECT [[' + $(children[3]).text() + ']]',
summary: this.i18nc.editSummary
} : {
action: 'delete',
reason: this.i18nc.deleteReason
}))
.done($.proxy(function(d) {
if(d.error) {
console.error(this.i18nPrefix('error', page) + ': ' + d.error.code);
} else {
console.info(this.i18nPrefix('success', page));
}
}, this))
.fail($.proxy(function() {
console.error(this.i18nPrefix('error', page));
}, this));
}, this));
setTimeout(function() {
location.reload();
}, 15000);
},
i18nPrefix: function(k, param) {
return this.i18nu[k + (this.double ? 'Double' : 'Broken')].replace('$1', param);
}
};
mw.loader.using('mediawiki.api', $.proxy(RedirectManagement.init, RedirectManagement));
})();