Utente:Valcio/Script/NonFirmato.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.
/**
* Inserisce un collegamento 'non firmato' alla barra laterale che, se premuto,
* aggiunge un tasto 'non firmato' accanto ad ogni titolo di sezione.
* Premendolo, è possibile selezionare una modifica dalla cronologia ed inserire
* automaticamente il template non firmato.
*
* @author [[User:Valcio]] and contributors. Strongly inspired by [[MediaWiki:Gadget-cambusa.js]]
*/
( function ( mw, $ ) {
'use strict';
function createDropdown(array, then, obj){
var dropdown = new OO.ui.DropdownInputWidget( {
$overlay: obj.$overlay,
label: '',
text: "Seleziona la modifica che non è stata firmata",
options: array
} );
dropdown.on( 'change', function (value) {
then(value);
} );
obj.content.$element.append( dropdown.$element );
obj.$body.append( obj.content.$element );
}
function createHTML(html, obj){
obj.content.$element.append( html );
obj.$body.append( obj.content.$element );
}
function createButton(Label, onclick, obj,ico=null, accesskey=null, css=null){
var button = new OO.ui.ButtonWidget( {
label: Label
} );
button.on( 'click', function () {
onclick();
} );
if(ico!=null)
button.setIcon(ico);
if(accesskey!=null)
button.setAccessKey(accesskey);
if(css!=null)
button.$element.css(css);
obj.content.$element.append( button.$element );
obj.$body.append( obj.content.$element );
}
function createDialog(funct){
function MyDialog( config ) {
MyDialog.super.call( this, config );
}
OO.inheritClass( MyDialog, OO.ui.Dialog );
MyDialog.static.name = 'myDialog';
MyDialog.prototype.initialize = function () {
MyDialog.super.prototype.initialize.call( this );
this.content = new OO.ui.PanelLayout( { padded: true, expanded: false } );
funct(this);
};
MyDialog.prototype.getBodyHeight = function () {
return this.content.$element.outerHeight( true );
};
var myDialog = new MyDialog( {
size: 'medium'
} );
var windowManager = new OO.ui.WindowManager();
$( document.body ).append( windowManager.$element );
windowManager.addWindows( [ myDialog ] );
windowManager.openWindow( myDialog );
}
function getDate(timestamp){
var month=timestamp[5]+timestamp[6];
switch(month){
case "01": month="gen"; break;
case "02": month="feb"; break;
case "03": month="mar"; break;
case "04": month="apr"; break;
case "05": month="mag"; break;
case "06": month="giu"; break;
case "07": month="lug"; break;
case "08": month="ago"; break;
case "09": month="set"; break;
case "10": month="ott"; break;
case "11": month="nov"; break;
case "12": month="dic"; break;
}
var d = new Date();
var hour="";
for(var i=11; i<=15; i++)
hour=hour+timestamp[i];
var day=timestamp[8]+timestamp[9];
var year=timestamp[0]+timestamp[1]+timestamp[2]+timestamp[3];
var n = new Date(Number(year), Number(timestamp[5]+timestamp[6])-1, Number(day), Number(timestamp[11]+timestamp[12])+1, Number(timestamp[14]+timestamp[15])-d.getTimezoneOffset());
day=String(n.getUTCDate());
year=String(n.getUTCFullYear());
hour=("0"+(n.getUTCHours())).slice(-2)+":"+("0"+n.getMinutes()).slice(-2);
return hour+", "+day+" "+month+" "+year;
}
function ISODateString(d){
function pad(n){return n<10 ? '0'+n : n}
return d.getUTCFullYear()+'-'
+ pad(d.getUTCMonth()+1)+'-'
+ pad(d.getUTCDate())+'T'
+ pad(d.getUTCHours())+':'
+ pad(d.getUTCMinutes())+':'
+ pad(d.getUTCSeconds())+'Z'}
function creaPulsanti(){
$( 'span.mw-editsection > a:last-of-type' ).each( function ( i, el ) {
var $link, sectitle = $( el ).attr( 'title' ).replace( /^(Modifica|Cancella) la sezione /g, '' ), sectionnumber = i+1; $link = $( '<a>' )
.attr( 'href', '#' )
.attr( {'title': 'Aggiungi il template non firmato alla discussione ' + sectitle,
'id': sectionnumber})
.text( 'non firmato' )
.click( function ( event ) {
sectionnumber=$(this).attr('id');
event.preventDefault();
createDialog(function(obj){
createDropdown(options, function(value){
var d = new Date();
d=ISODateString(d);
params= {
action: 'edit',
title: mw.config.get('wgPageName'),
summary: 'Non firmato',
minor: true,
appendtext: '{{nf|'+value+'}}',
section: sectionnumber,
basetimestamp:queryresult[0].timestamp,
starttimestamp: d,
format: 'json'
};
api.postWithToken( 'csrf', params ).done( function ( data ) {
createDialog(function(obj){
createHTML("<p>Fatto!</p>", obj);
createButton("Ricarica la pagina", function(){location.reload();}, obj);
});
} )
.fail(function(error){
var msg;
switch(String(error)){
case "editconflict": msg="Nel modificare la pagina si è verificato un conflitto di modifiche: ricaricare la pagina e riprovare."; break;
default: msg="Si è verificato un errore dal codice: "+error; break;
}
alert(msg);
//@todo Dialog OOui, verificare autore e oggetto medifica e dare possibilità di aggiungere comunque il template
});
}, obj);
});
});
$( el ).after( '<span> | </span>', $link );
});
}
const options=[];
var queryresult, api = new mw.Api();
var params={
"action": "query",
"format": "json",
"prop": "revisions",
"titles": mw.config.get('wgPageName'),
"rvprop": "timestamp|comment|user",
"formatversion": "2",
"rvlimit": "15"
};
api.postWithToken( 'csrf', params ).done( function ( data ) {
queryresult=data.query.pages[0].revisions;
options[0]='';
for(var i=0; i< 15; i++){
options[i+1]={
label: getDate(queryresult[i].timestamp)+" "+queryresult[i].user+" ("+queryresult[i].comment+")",
data: getDate(queryresult[i].timestamp)+" "+queryresult[i].user
};
}
});
var node = mw.util.addPortletLink(
'p-tb',
'#',
"Non firmato"
);
$( node ).on( 'click', function () {
creaPulsanti();
} );
}( mediaWiki, jQuery ) );