Utilisateur:Pre7/Gadget-manquepoint.js
Apparence
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> */