Aller au contenu

Utilisateur:Pre7/Gadget-manquepoint.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.
/* jshint esversion: 6 */
/* globals mw, $ */

/* <nowiki> */

mw.loader.using(['mediawiki.util', 'mediawiki.user', 'mediawiki.api'], function() {
    $(function() {
        console.log("Script démarré");
        var api = new mw.Api();

        // Fonction principale
        function ajouterPonctuationManquante() {
            console.log("Fonction ajouterPonctuationManquante appelée");
            var titre = mw.config.get('wgPageName');
            console.log("Titre de la page:", titre);

            api.get({
                action: 'query',
                prop: 'revisions',
                titles: titre,
                rvprop: 'content',
                rvslots: 'main',
                formatversion: 2
            }).done(function(data) {
                console.log("Contenu de la page récupéré avec succès");
                var page = data.query.pages[0];
                var contenu = page.revisions[0].slots.main.content;
                console.log("Longueur du contenu:", contenu.length);

                var lignes = contenu.split('\n');
                console.log("Nombre de lignes:", lignes.length);
                var lignesModifiees = lignes.map(traiterLigne);
                var nouveauContenu = lignesModifiees.join('\n');

                if (nouveauContenu === contenu) {
                    console.log("Aucune modification nécessaire");
                    mw.notify("Aucune modification de ponctuation nécessaire.", { type: 'warn' });
                    return;
                }

                console.log("Modifications détectées, envoi de l'édition");
                api.postWithToken('csrf', {
                    action: 'edit',
                    title: titre,
                    text: nouveauContenu,
                    summary: 'Ajout automatique de ponctuation manquante',
                    minor: true,
                    bot: true
                }).done(function () {
                    console.log("Modification enregistrée avec succès");
                    mw.notify("Modification enregistrée avec succès !", { type: 'success' });
                    location.reload();
                }).fail(function (error) {
                    console.error("Erreur lors de la modification:", error);
                    mw.notify("Erreur lors de la modification de la page.", { type: 'error' });
                });
            }).fail(function (error) {
                console.error("Erreur lors de la récupération du contenu:", error);
                mw.notify("Erreur lors de la récupération du contenu de la page.", { type: 'error' });
            });
        }

        // Fonction pour traiter chaque ligne
        function traiterLigne(ligne) {
            const ligneTrim = ligne.trim();

            // Liste des caractères de début de ligne à ignorer
            const ignoreDebut = ['*', '=', '[', ']', '|', '{', '}', '#', ';', ':', '!', ' ', '<', '>', '\t'];

            // Vérifier si la ligne commence par un des caractères à ignorer ou par des espaces
            if (ignoreDebut.some(character => ligne.startsWith(character))) {
                console.log("Ligne non modifiée (cas spécial):", ligne);
                return ligne;
            }

            // Ignorer les lignes vides ou ne contenant que des espaces
            if (ligneTrim.length === 0) {
                return ligne;
            }

            // Ponctuations existantes, leur version alternative et les modèles en fin de ligne
            const ponctuations = ['!', '!}}', '!]]', '!]', '?', '?}}', '?]]', '?]', '.', '.}}', '.]]', '.]', ':', ':}}', ':]]', ':]', ';', ';}}', ';]]', ';]', '...', '...}}', '...]]', '...]', '…', '…}}', '…]]', '…]', '}', '}}'];

            // Extraire les 9 derniers caractères de la ligne
            const derniers9Caracteres = ligneTrim.slice(-9);

            // Vérifier si l'un des motifs de ponctuation est présent dans les 9 derniers caractères
            if (!ponctuations.some(ponctuation => derniers9Caracteres.includes(ponctuation))) {
                console.log("Ajout d'un point à la ligne:", ligne);
                return ligne.trimEnd() + '.';
            }

            console.log("Ligne non modifiée:", ligne);
            return ligne;
        }

        // Ajoute un lien dans la barre d'outils pour lancer la modification
        function ajouterLienBarreOutils() {
            console.log("Ajout du lien dans la barre d'outils");
            var $lien = $('<li>')
                .addClass('mw-list-item')
                .append($('<a>')
                    .attr('href', '#')
                    .append($('<span>').text('Ajouter ponctuation'))
                    .click(function (e) {
                        e.preventDefault();
                        console.log("Lien cliqué");
                        if (confirm("Voulez-vous vraiment ajouter la ponctuation manquante ?")) {
                            ajouterPonctuationManquante();
                        }
                    })
                );

            $('#p-cactions ul').append($lien);
            console.log("Lien ajouté avec succès");
        }

        ajouterLienBarreOutils();
        console.log("Script terminé");
    });
});

/* </nowiki> */