Fandom Developers Wiki
m (Please discuss undoing of changes that don't break the script on the talkpage.)
Tag: sourceedit
(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));
})();