Utente:Titore/VC.js
Questa pagina definisce alcuni parametri di aspetto e comportamento generale di tutte le pagine. Per personalizzarli vedi Aiuto:Stile utente.
Nota: dopo aver salvato è necessario pulire la cache del proprio browser per vedere i cambiamenti (per le pagine globali è comunque necessario attendere qualche minuto). Per Mozilla / Firefox / Safari: fare clic su Ricarica tenendo premuto il tasto delle maiuscole, oppure premere Ctrl-F5 o Ctrl-R (Command-R su Mac); per Chrome: premere Ctrl-Shift-R (Command-Shift-R su un Mac); per Konqueror: premere il pulsante Ricarica o il tasto F5; per Opera può essere necessario svuotare completamente la cache dal menù Strumenti → Preferenze; per Internet Explorer: mantenere premuto il tasto Ctrl mentre si preme il pulsante Aggiorna o premere Ctrl-F5.
/**
* Aggiunge un link nella barra degli strumenti laterale
* per segnalare rapidamente un'utenza o un IP tra i vandalismi in corso.
*
* @author https://it.wikipedia.org/wiki/Utente:Titore and contributors
* @date 2019-09-17
* @license Dual-licensed under CC BY-SA 3.0 and GPL 3.0 (or any later version)
*/
(function (mw, $) {
// API MediaWiki per lettura e invio dati
const api = new mw.Api();
// Nome utente e pagine attinenti (es. contributi, discussioni, pagina utente)
const utente = mw.config.get('wgRelevantUserName');
// Pagina di servizio
const paginaSegnalazioni = 'Wikipedia:Vandalismi in corso';
// Campo oggetto
const oggetto = '+1';
// Aggiunge link nella barra degli strumenti laterale
if (utente) {
var link = mw.util.addPortletLink('p-tb', '#', "Segnala vandalo", "t-segnalavandalo", "Segnala questa utenza o IP in WP:VC");
$(link).click((event) => {
event.preventDefault();
avviaScript();
});
}
/**
* Avvia lo script.
*/
function avviaScript() {
mw.loader.using('oojs-ui-windows')
.done(() => {
finestraDiDialogo();
})
.fail(() => {
console.error('Impossibile avviare lo script VC.js.');
});
}
/**
* Finestra di dialogo
*/
function finestraDiDialogo() {
OO.ui.prompt(utente + ' verrà segnalato tra i vandalismi in corso', {
title: 'Nuova segnalazione',
textInput: { placeholder: 'Motivazione \(senza firma\)' },
size: 'medium'
}).done((motivo) => {
switch (motivo) {
// Clic su annulla
case null:
console.warn('L\'utente ha fatto clic su "Annulla" o ha chiuso la finestra di dialogo.');
break;
// Motivazione non compilata
case '':
mw.notify('Fornire una motivazione', {
title: 'Errore',
type: 'error',
autoHide: false,
tag: 'notif'
});
console.error('L\'utente non ha fornito una motivazione');
break;
// Motivazione compilata
default:
controllaBlocco(utente, blocco => {
if (blocco) {
OO.ui.alert(utente + ' risulta già bloccato.', { title: 'Segnalazione non inviata' });
console.log('Segnalazione non inviata: ' + utente + ' già bloccato.\nIl testo era: "' + motivo + '"');
} else {
inviaSegnalazione('{{vandalo|' + utente + '}} ' + motivo + ' --~~\~~');
}
});
}
});
}
/**
* Invia la segnalazione.
*
* @param {string} segnalazione
*/
function inviaSegnalazione(segnalazione) {
// Data odierna, ordinale per il primo del mese
const dataOdierna = new Date()
.toLocaleDateString("it-IT", { day: 'numeric', month: 'long' })
.replace(/\b[1] /, '1º ');
// URL per link in notifica
const url = mw.config.get('wgArticlePath').replace('$1', paginaSegnalazioni);
// Per aggiungere sottosezione con data se non già esistente
parsingSezioni(titoloUltimaSezione => {
api.postWithEditToken({
action: 'edit',
title: paginaSegnalazioni,
appendtext: (dataOdierna == titoloUltimaSezione) ? ('\n\n' + segnalazione) : ('\n\n=== ' + dataOdierna + ' ===\n' + segnalazione),
summary: oggetto
}).done((data) => {
mw.notify($('<span>' + utente + ' è stato segnalato tra i ' + '<a href="' + url + '#footer">vandalismi in corso</a>.</span>'), {
title: 'Segnalato',
tag: 'notif'
});
console.log('L\'utente ha scritto "' + motivo + '" e ha fatto clic su "OK".');
console.log(data);
}).fail((code) => {
mw.notify(code, {
title: 'Errore',
type: 'error',
autoHide: false,
tag: 'notif'
});
console.error('Segnalazione non inviata: ' + code);
});
});
}
/**
* Parsing della pagina per ricavarne i titoli delle sezioni.
*
* @param {function} titoloUltimaSezione - Risultato
*/
function parsingSezioni(titoloUltimaSezione) {
api.get({
page: paginaSegnalazioni,
action: 'parse',
prop: 'sections'
}).done(data => {
titoloUltimaSezione(
data.parse.sections[data.parse.sections.length - 1].line
// ordinale per il primo del mese
.replace(/\b[1] /, '1º ')
.replace('1° ', '1º ')
);
});
}
/**
* Controlla se l'utente è bloccato.
*
* @param {string} utente
* @param {function} blocco - Risultato
*/
function controllaBlocco(utente, blocco) {
api.get({
action: 'query',
list: 'blocks',
bkusers: utente,
bklimit: '1',
bkprop: 'by',
format: 'json'
}).done(data => {
blocco(data.query.blocks[0]);
});
}
}(mediaWiki, jQuery));
// TODO
// [[Phab:T75714]]: Non è ancora possibile usare string literal (ES2015)
// avvisare se il vandalo:
// è già stato segnalato di recente
// non è stato avvisato
// drop down motivazioni frequenti
// textinput invece di prompt (poco spazio per inserire la motivazione)
// solo autoverificati?