Utilisateur:Laurent04000/vreport.js
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./*
* VReport
* Fonctionnalité : Signalement de vandalisme
* Auteurs : Google Gemini et Laurent04000
* {{Catégorisation JS|VReport}}
*/
// <nowiki>
$.when(mw.loader.using(['oojs-ui-core', 'oojs-ui-windows', 'mediawiki.util', 'mediawiki.api']), $.ready).then(() => {
const pageName = mw.config.get('wgPageName');
const userName = mw.config.get('wgRelevantUserName');
// Ajout dans les menus
const portletLink = mw.util.addPortletLink('p-cactions', '#', 'Signaler', 'ca-vreport', 'Signaler un vandalisme sur WP:VEC') ||
mw.util.addPortletLink('p-tb', '#', 'Signaler', 'ca-vreport', 'Signaler un vandalisme sur WP:VEC');
if (!portletLink) {
console.error("VReport : Impossible de trouver un menu pour placer le lien.");
return;
}
$(portletLink).click((e) => {
e.preventDefault();
openReportDialog();
});
function openReportDialog() {
function ReportDialog(config) {
ReportDialog.super.call(this, config);
}
OO.inheritClass(ReportDialog, OO.ui.ProcessDialog);
ReportDialog.static.name = 'reportDialog';
ReportDialog.static.title = 'Signaler';
ReportDialog.static.actions = [
{ action: 'save', label: 'Envoyer', flags: ['primary', 'progressive'] },
{ label: 'Annuler', flags: 'safe' }
];
ReportDialog.prototype.initialize = function () {
ReportDialog.super.prototype.initialize.apply(this, arguments);
this.panel = new OO.ui.PanelLayout({ padded: true, expanded: false });
this.targetInput = new OO.ui.TextInputWidget({
value: userName || pageName.replace(/_/g, ' '),
indicator: 'required'
});
this.reasonInput = new OO.ui.TextInputWidget({
placeholder: 'Expliquez le motif...',
indicator: 'required'
});
const fieldset = new OO.ui.FieldsetLayout({ label: 'Détails de la requête' });
fieldset.addItems([
new OO.ui.FieldLayout(this.targetInput, { label: 'Cible :', align: 'top' }),
new OO.ui.FieldLayout(this.reasonInput, { label: 'Motif :', align: 'top' })
]);
this.panel.$element.append(fieldset.$element);
this.$body.append(this.panel.$element);
};
ReportDialog.prototype.getActionProcess = function (action) {
const dialog = this;
if (action === 'save') {
return new OO.ui.Process(() => {
const target = dialog.targetInput.getValue().trim();
const reason = dialog.reasonInput.getValue().trim();
if (!target || !reason) {
mw.notify('Veuillez remplir tous les champs.', { type: 'error' });
return;
}
return sendReport(target, reason).then(() => {
mw.notify('Requête envoyée !', { type: 'success' });
dialog.close({ action: action });
}).catch((err) => {
mw.notify(`Erreur : ${err}`, { type: 'error' });
});
});
}
if (action) {
return new OO.ui.Process(() => {
dialog.close({ action: action });
});
}
return ReportDialog.super.prototype.getActionProcess.call(this, action);
};
const windowManager = new OO.ui.WindowManager();
$(document.body).append(windowManager.$element);
const dialog = new ReportDialog();
windowManager.addWindows([dialog]);
windowManager.openWindow(dialog);
}
function sendReport(target, reason) {
const api = new mw.Api();
const pageToEdit = 'Wikipédia:Vandalisme en cours';
const newSectionTitle = `Demande de blocage de ${target}`;
const signatureLine = '<small>([[Utilisateur:Laurent04000/vreport.js|VReport]])</small> Message déposé par ~~~~';
const textToAppend = `* Auteur du vandalisme : {{u+|${target}}}\n* Type de dégâts : ${reason}\n<!-- Merci de ne pas modifier la ligne ci-dessous -->\n${signatureLine}`;
return api.postWithToken('csrf', {
action: 'edit',
title: pageToEdit,
section: 'new',
sectiontitle: newSectionTitle,
text: textToAppend,
summary: `[[${pageToEdit}#${newSectionTitle}|Signalement]] de [[Spécial:Contributions/${target}|${target}]] via [[Utilisateur:Laurent04000/vreport.js|VReport]]`
});
}
});
// </nowiki>