Aller au contenu

Utilisateur:Alexisdepris/Mes scripts/DiffIndicator.js

Une page de Wikipédia, l'encyclopédie libre.
Note : après avoir enregistré la page, vous devrez forcer le rechargement complet du cache de votre navigateur pour voir les changements.

Mozilla / Firefox / Konqueror / Safari : maintenez la touche Majuscule (Shift) en cliquant sur le bouton Actualiser (Reload) ou pressez Maj-Ctrl-R (Cmd-R sur Apple Mac) ;

Firefox (sur GNU/Linux) / Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.
mw.loader.using(['mediawiki.util', 'mediawiki.api'], function () {
    $(document).ready(function () {
        if (mw.config.get('wgAction') === 'view' && mw.util.getParamValue('diff')) {
            var diffId = mw.util.getParamValue('diff');
            var oldId = mw.util.getParamValue('oldid');
            var newId = mw.config.get('wgRevisionId');

            // Fonction pour extraire l'oldid à partir du lien "Version du XXXX"
            function getOldIdFromLink() {
                var oldIdLink = $('#mw-diff-ntitle1 a').attr('href');
                if (oldIdLink) {
                    var oldIdMatch = oldIdLink.match(/[?&]oldid=(\d+)/);
                    if (oldIdMatch) {
                        return oldIdMatch[1];
                    }
                }
                return null;
            }

            // Fonction pour afficher les informations des versions
            function displayVersionIds(oldId, newId) {
                var oldIdInfo = $('<div>').css({
                    'background-color': '#FFE49C',
                    'border': '1px solid #d1d1d1',
                    'padding': '10px',
                    'margin-bottom': '15px',
                    'border-radius': '5px',
                    'box-shadow': '0 2px 4px rgba(0, 0, 0, 0.1)',
                    'cursor': 'pointer'
                }).text('ID de l\'ancienne version : ' + oldId).click(function() {
                    // Copier dans le presse-papiers
                    copyToClipboard(oldId);
                });

                var newIdInfo = $('<div>').css({
                    'background-color': '#A3D3FF',
                    'border': '1px solid #d1d1d1',
                    'padding': '10px',
                    'margin-bottom': '15px',
                    'border-radius': '5px',
                    'box-shadow': '0 2px 4px rgba(0, 0, 0, 0.1)',
                    'cursor': 'pointer'
                }).text('ID de la nouvelle version : ' + newId).click(function() {
                    // Copier dans le presse-papiers
                    copyToClipboard(newId);
                });

                $('#mw-diff-otitle1').before(oldIdInfo);
                $('#mw-diff-ntitle1').before(newIdInfo);
            }

            // Fonction pour afficher une boîte de dialogue d'easter egg
            function showEasterEgg() {
                var dialog = new OO.ui.MessageDialog();
                var windowManager = new OO.ui.WindowManager();
                $(document.body).append(windowManager.$element);
                windowManager.addWindows([dialog]);
                windowManager.openWindow(dialog, {
                    title: 'Easter Egg 🎉',
                    message: 'Félicitations, vous avez trouvé l\'easter egg !',
                    actions: [
                        { action: 'accept', label: 'Merci!', flags: 'primary' }
                    ]
                });
            }

            // Fonction pour copier dans le presse-papiers et afficher une notification
            function copyToClipboard(text) {
                var tempInput = $('<input>');
                $('body').append(tempInput);
                tempInput.val(text).select();
                document.execCommand('copy');
                tempInput.remove();
                showCopyNotification();
            }

            // Fonction pour afficher une notification de copie
            function showCopyNotification() {
                mw.notify('L\'ID a été copié dans le presse-papiers.', {
                    autoHide: true,
                    tag: 'clipboard-copy',
                    classes: 'clipboard-notify'
                });
            }

            // Ajout d'un bouton caché pour l'easter egg
            var easterEggButton = $('<button>').css({
                'position': 'fixed',
                'bottom': '10px',
                'right': '10px',
                'padding': '5px',
                'background-color': '#000000',
                'border': 'none',
                'border-radius': '50%',
                'color': '#ffffff',
                'cursor': 'pointer',
                'opacity': '0.2',
                'font-size': '10px'
            }).text('?').click(function() {
                showEasterEgg();
            });

            $('body').append(easterEggButton);

            // Si oldId est null, essayer de l'extraire du lien "Version du XXXX"
            if (!oldId) {
                oldId = getOldIdFromLink();
            }

            // Si diffId est 'prev', obtenir l'ID de la version précédente via l'API
            if (diffId === 'prev') {
                mw.notify('Récupération des informations de révision...', { autoHide: true });
                new mw.Api().get({
                    action: 'query',
                    prop: 'revisions',
                    titles: mw.config.get('wgPageName'),
                    rvlimit: 2,
                    rvprop: 'ids|timestamp',
                    rvdir: 'older',
                    rvstartid: newId
                }).done(function (data) {
                    var pages = data.query.pages;
                    var pageId = Object.keys(pages)[0];
                    var revisions = pages[pageId].revisions;
                    if (revisions && revisions.length === 2) {
                        oldId = revisions[1].revid;
                        diffId = newId;  // Le diffId est le même que la nouvelle révision dans ce cas
                    }
                    displayVersionIds(oldId, newId);
                    mw.notify('Informations de révision récupérées avec succès.', { type: 'success' });
                }).fail(function () {
                    mw.notify('Erreur lors de la récupération des informations de révision.', { type: 'error' });
                });
            } else {
                displayVersionIds(oldId, newId);
            }
        }
    });
});

// Ajouter des styles pour la notification violette
mw.util.addCSS('\
    .mw-notification-container .clipboard-notify {\
        background-color: #800080;\
        color: white;\
    }\
');