Wikinotizie:Monobook.js/Pulsanti personali.js
/*
Interfaccia grafica per il setup dei pulsanti personali.
Autore: Jalo.
- /
//
<nowiki>
var myButtonsNew;
var tblBody;
function fullescapePP(text)
{
return escape(text).replace(/\+/g,"%2B");
}
// Grazie a [[:en:User:Topaz]]
function msXmlhttpreqPP() {
if (window.XMLHttpRequest) {
xmlhttpobj = new XMLHttpRequest()
} else {
try {
xmlhttpobj = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttpobj = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
xmlhttpobj = null;
}
}
}
return xmlhttpobj;
}
// Grazie a [[:en:User:Topaz]]
function msDoReqPP(url,postdata,headers) {
var req = msXmlhttpreqPP();
req.open(postdata?"POST":"GET", url, false);
for(header in headers)
req.setRequestHeader(header,headers[header]);
req.send(postdata||null);
return req;
}
// Grazie a [[:en:User:Topaz]]
function msSetPageContentPP(pagename,content,summary,watch) {
var prelimresp = msDoReqPP("/w/index.php?title="+pagename+"&action=submit");
var edittime = prelimresp.responseText.match(/\<input type='hidden' value="(\d+)" name="wpEdittime" \/\>/)[1];
var edittoken = prelimresp.responseText.match(/\<input type='hidden' value="([^"]+)" name="wpEditToken" \/\>/)[1];
msDoReqPP("/w/index.php?title="+pagename+"&action=submit",
"wpEdittime="+edittime+
"&wpEditToken="+fullescapePP(edittoken)+
"&wpTextbox1="+encodeURIComponent(content)+
"&wpSummary="+encodeURIComponent(summary)+
(watch?"&wpWatchthis=on":"")+
"&wpSection=&wpSave=Save+page",
{"Content-Type":"application/x-www-form-urlencoded"});
}
// Grazie a [[:en:User:Topaz]]
function msGetPageContentPP(pagename) {
var req = msDoReqPP("/w/index.php?title="+pagename+"&action=edit");
var content = req.responseText.match(/\<textarea[\w\W]*?\>([\w\W]*?)\<\/textarea\>/)[1];
content = content.replace(/\<\;/gi, "<");
content = content.replace(/\>\;/gi, ">");
content = content.replace(/\"\;/gi, "\"");
content = content.replace(/\&\;/gi, "&");
return content;
}
// Crea una nuova stringa da aggiungere al monobook
function msGenerateNewConfigPP(){
var res = '';
// tolgo i caratteri speciali
for(i = 0; i < myButtonsNew.length; i++)
for(j = 0; j < myButtonsNew[0].length; j++)
if (myButtonsNew[i][j] == "·")
myButtonsNew[i][j] = "";
// creo la stringa da salvare
for(i = 0; i < myButtonsNew.length; i++)
{
// trasformo ' in \\\'
myButtonsNew[i][1] = myButtonsNew[i][1].replace(/\'/gi, "\\\'");
myButtonsNew[i][2] = myButtonsNew[i][2].replace(/\'/gi, "\\\'");
myButtonsNew[i][3] = myButtonsNew[i][3].replace(/\'/gi, "\\\'");
if (typeof(myButtonsNew[i][5]) != 'undefined') //necessario per retrocompatibilita' con la versione senza "oggetto"
myButtonsNew[i][5] = myButtonsNew[i][5].replace(/\'/gi, "\\\'");
else
myButtonsNew[i][5] = '';
// trasformo \n con \\\\n
myButtonsNew[i][1] = myButtonsNew[i][1].replace(/\\n/gi, "\\\\n");
myButtonsNew[i][2] = myButtonsNew[i][2].replace(/\\n/gi, "\\\\n");
res += '[' + myButtonsNew[i][0] + ',\'' + myButtonsNew[i][1] + '\',\'' + myButtonsNew[i][2] + '\',\'' + myButtonsNew[i][3] + '\',' + myButtonsNew[i][4] + ',\'' + myButtonsNew[i][5] + '\'],';
}
// tolgo l'ultima virgola
res = res.substr(0,res.length-1);
return res;
}
// Controlla se il monobook e' tra tag -PRE-
function checkPrePP(newMonobook)
{
if (newMonobook.indexOf("//<pre>") == -1)
newMonobook = "//<pre>\n" + newMonobook;
if (newMonobook.indexOf("//</pre>") == -1)
newMonobook = newMonobook + "\n//</pre>";
return newMonobook;
}
// Salva la tabella corrente
function msSavePP(){
var oldMonobook = msGetPageContentPP('Utente:' + wgUserName + '/' + msConfigFile);
// Se c'erano gia' i pulsanti
if (oldMonobook.match(/var myButtons[ ]*=[ ]*new Array.*;/) != null)
var newMonobook = oldMonobook.replace(/var myButtons[ ]*=[ ]*new Array.*;/, "var myButtons = new Array(" + msGenerateNewConfigPP() + ");");
else
var newMonobook = oldMonobook.replace(/var toLoad/, "var myButtons = new Array(" + msGenerateNewConfigPP() + ");\n\nvar toLoad");
// controlla se e' il caso di racchiudere il monobook tra tag -PRE-
tempMonobook = checkPrePP(newMonobook);
msSetPageContentPP('Utente:' + wgUserName + '/' + msConfigFile, tempMonobook, "Pulsanti personali Setup");
if (newMonobook != oldMonobook)
alert("Configurazione salvata. Ricordati di premere ctrl+r per pulire la cache per attivare i cambiamenti.");
else
alert("Nessuna modifica effettuata.");
RemoveNode('SetupPulsanti');
}
// Crea una riga nella tabella
function creaRigaPP(numero, titolo, dove, prima, dopo, oggetto)
{
var row = document.createElement("tr");
row.id = 'Riga'+numero;
// Crea pulsante "rimuovi questo pulsante"
var cell = document.createElement("td");
var rimuovimi = document.createElement('input');
rimuovimi.value = 'Rimuovi';
rimuovimi.id = numero;
rimuovimi.type = 'button';
rimuovimi.onclick = function() {rimuoviPulsantePP(this.id);};
cell.appendChild(rimuovimi);
row.appendChild(cell);
// Creo cella per titolo
var cell = document.createElement("td");
cell.innerHTML += titolo;
row.appendChild(cell);
// Creo cella per tipo
var cell = document.createElement("td");
cell.innerHTML += dove;
row.appendChild(cell);
// Creo cella per prima
var cell = document.createElement("td");
cell.innerHTML += prima;
row.appendChild(cell);
// Creo cella per dopo
var cell = document.createElement("td");
cell.innerHTML += dopo;
row.appendChild(cell);
// Creo cella per oggetto
var cell = document.createElement("td");
cell.innerHTML += oggetto;
row.appendChild(cell);
// aggiunge la riga alla fine della tabella
tblBody.appendChild(row);
}
// Crea un pulsante
function msCreatePP()
{
msWndSetup=document.getElementById("SetupPulsanti");
var tipo, titolo, prima, dopo, offset, dove, oggetto;
// Recupera i valori da salvare
titolo = document.getElementById("nomePulsante").value;
dove = document.getElementById("dovePulsante").value;
prima = document.getElementById("primaPulsante").value;
dopo = document.getElementById("dopoPulsante").value;
oggetto = document.getElementById("oggettoPulsante").value;
offset = 0;
// Correggo i caratteri apostrofo
titolo = titolo.replace(/\'/gi, "\'");
prima = prima.replace(/\'/gi, "\'");
dopo = dopo.replace(/\'/gi, "\'");
oggetto = oggetto.replace(/\'/gi, "\'");
// Sistemali un po'
switch(dove){
case "0":
tipo = "1";
dopo = "0";
dove = "In cima alla pagina";
break;
case "1":
tipo = "1";
dopo = "1";
dove = "In fondo alla pagina";
break;
case "2":
tipo = "2";
dove = "Posizione del cursore";
if (dopo == "")
offset = prima.length;
break;
default: break;
}
// Aggiungili all'Array
var nuovo = new Array(tipo, prima, dopo, titolo, offset, oggetto);
myButtonsNew[myButtonsNew.length] = nuovo;
// E alla tabella
if ((tipo != "2") && ((dopo == "") || (dopo == "0") || (dopo == "1")))
dopo = "·";
// Correggi il font
titolo = "<span style=\"font-size: medium;\">"+titolo+"</span>";
dove = "<span style=\"font-size: medium;\">"+dove+"</span>";
prima = "<span style=\"font-size: medium;\">"+prima+"</span>";
dopo = "<span style=\"font-size: medium;\">"+dopo+"</span>";
oggetto = "<span style=\"font-size: medium;\">"+oggetto+"</span>";
creaRigaPP(tblBody.rows.length, titolo, dove, prima, dopo, oggetto);
}
// Cancella un pulsante
function rimuoviPulsantePP(riga)
{
msWndSetup=document.getElementById("SetupPulsanti");
//Elimina riga "riga" dalla myButtonsNew
myButtonsNew.splice(riga,1); // Rimuove 1 elemento dall'indice "riga"
// E aggiorna graficamente la tabella
rowToRemove = document.getElementById('Riga'+riga);
rowToRemove.parentNode.removeChild(rowToRemove);
// Chiudi e riapri per riordinare gli id delle righe
RemoveNode('SetupPulsanti');
msCreateUIPP();
}
// Disegna la finestra
function msCreateUIPP(){
var msWndSetup = document.createElement('div');
msWndSetup.id = 'SetupPulsanti';
msWndSetup.style.position = 'absolute';
msWndSetup.style.zIndex = 1000;
msWndSetup.style.left = '0px';
msWndSetup.style.top = '0px';
msWndSetup.style.backgroundColor = '#FFFFFF';
msWndSetup.style.borderStyle = 'solid';
msWndSetup.style.borderWidth = ' medium';
msWndSetup.style.borderColor = '#000000';
msWndSetup.style.width = '630px';
var top = document.createElement('div');
top.id = 'setupPulsantiTop';
top.style.textAlign = 'right';
top.style.margin = '8px';
top.style.backgroundColor = '#DDDDDD';
// crea il tasto "Close"
var a = document.createElement('a');
a.appendChild(document.createTextNode('Close'));
a.href = "javascript:void RemoveNode('SetupPulsanti')";
a.style.margin = '8px';
top.appendChild(a);
msWndSetup.appendChild(top);
var body = msWndSetup;
var intro = document.createElement('p');
intro.innerHTML = "<span style=\"font-size: medium;\">Benvenuto nella configurazione dei tuoi <b>Pulsanti personali</b>.<br /><br />" +
"Vedi <span style=\"font-weight: bold;\"><a href='http://it.wikipedia.org/wiki/Wikipedia:Monobook.js/Pulsanti personali' target=new>qui</a></span> per maggiori informazioni</span><br/><br/>";
body.appendChild(intro);
body.appendChild(document.createElement("hr"));
var ACapo = document.createElement('p');
ACapo.innerHTML = '<br/>';
body.appendChild(ACapo);
// Mostra la tabella dei comandi esistenti
var titoloTbl = document.createElement('p');
titoloTbl.innerHTML = '<span style="font-size: large;color: red;text-decoration: underline;">Elenco dei pulsanti installati:</span>';
body.appendChild(titoloTbl);
var ACapo = document.createElement('p');
ACapo.innerHTML = '<br/>';
body.appendChild(ACapo);
// crea la <table> ed il <tbody>
var tbl = document.createElement("table");
tblBody = document.createElement("tbody");
// Crea la riga di intestazione della tabella
var header = document.createElement("tr");
var cell1 = document.createElement("td");
var cellText1 = document.createElement('p');
cellText1.innerHTML = "·";
cell1.appendChild(cellText1);
header.appendChild(cell1);
var cell2 = document.createElement("td");
var cellText2 = document.createElement('p');
cellText2.innerHTML = "<span style=\"font-size: medium;\"><b>Nome pulsante</b></span>";
cell2.appendChild(cellText2);
header.appendChild(cell2);
var cell3 = document.createElement("td");
var cellText3 = document.createElement('p');
cellText3.innerHTML = "<span style=\"font-size: medium;\"><b>Dove inserire</b></span>";
cell3.appendChild(cellText3);
header.appendChild(cell3);
var cell4 = document.createElement("td");
var cellText4 = document.createElement('p');
cellText4.innerHTML = "<span style=\"font-size: medium;\"><b>Testo da inserire prima</b></span>";
cell4.appendChild(cellText4);
header.appendChild(cell4);
var cell5 = document.createElement("td");
var cellText5 = document.createElement('p');
cellText5.innerHTML = "<span style=\"font-size: medium;\"><b>Testo da inserire dopo</b></span>";
cell5.appendChild(cellText5);
header.appendChild(cell5);
tblBody.appendChild(header);
var cell6 = document.createElement("td");
var cellText6 = document.createElement('p');
cellText6.innerHTML = "<span style=\"font-size: medium;\"><b>Testo da aggiungere all'oggetto</b></span>";
cell6.appendChild(cellText6);
header.appendChild(cell6);
tblBody.appendChild(header);
// mette <tbody> nella <table>
tbl.appendChild(tblBody);
// <table> nel <body>
body.appendChild(tbl);
// e setta il bordo a 2 e lo sfondo a bianco
tbl.setAttribute("border", "2");
tbl.setAttribute("style","background-color:white;");
// crea tutte le celle
for (var j = 0; j < myButtonsNew.length; j++)
{
// Creo "dove"
if (myButtonsNew[j][0] == '2')
var dove = "Posizione del cursore";
else if (myButtonsNew[j][2] == '0')
var dove = "In cima alla pagina";
else
var dove = "In fondo alla pagina";
// Creo "dopo"
if ((myButtonsNew[j][0] == '2') && (myButtonsNew[j][2] != ''))
var dopo = myButtonsNew[j][2];
else
var dopo = "·";
// Creo "oggetto"
if ((typeof(myButtonsNew[j][5]) == 'undefined') ||
(myButtonsNew[j][5] == ''))
var oggetto = "·";
else
var oggetto = myButtonsNew[j][5];
creaRigaPP(j, "<span style=\"font-size: medium;\">"+myButtonsNew[j][3]+"</span>",
"<span style=\"font-size: medium;\">"+dove+"</span>",
"<span style=\"font-size: medium;\">"+myButtonsNew[j][1]+"</span>",
"<span style=\"font-size: medium;\">"+dopo+"</span>",
"<span style=\"font-size: medium;\">"+oggetto+"</span>");
}
var ACapo = document.createElement('p');
ACapo.innerHTML = '<br/>';
body.appendChild(ACapo);
body.appendChild(document.createElement("hr"));
var ACapo = document.createElement('p');
ACapo.innerHTML = '<br/>';
body.appendChild(ACapo);
// Mostra i comandi per crearne uno nuovo
var titoloCrea = document.createElement('p');
titoloCrea.innerHTML = '<span style="font-size: large;color: red;text-decoration: underline;">Crea un nuovo pulsante:</span><br/>';
body.appendChild(titoloCrea);
var ACapo = document.createElement('p');
ACapo.innerHTML = '<br/>';
body.appendChild(ACapo);
// Nome del pulsante
var p = document.createElement('p');
p.innerHTML += "<span style=\"font-size: medium;\">Nome del pulsante: </span>";
var nomePulsante = document.createElement('input');
nomePulsante.name = 'nomePulsante';
nomePulsante.id = 'nomePulsante';
nomePulsante.type = 'text';
p.appendChild(nomePulsante);
body.appendChild(p);
// Dove inserire
var p = document.createElement('p');
p.innerHTML += "<span style=\"font-size: medium;\">Dove inserire il testo?: </span>";
var dovePulsante = document.createElement('select');
dovePulsante.name = 'dovePulsante';
dovePulsante.id = 'dovePulsante';
dovePulsante.size = 1;
var option1 = new Option('In cima','0');
var option2 = new Option('Sul cursore','2');
var option3 = new Option('In fondo','1');
dovePulsante.options[0] = option1;
dovePulsante.options[1] = option2;
dovePulsante.options[2] = option3;
option1.selected = 'true';
p.appendChild(dovePulsante);
body.appendChild(p);
// Cosa inserire prima
var p = document.createElement('p');
p.innerHTML += "<span style=\"font-size: medium;\">Cosa inserire?: </span>";
var primaPulsante = document.createElement('input');
primaPulsante.name = 'primaPulsante';
primaPulsante.id = 'primaPulsante';
primaPulsante.type = 'text';
p.appendChild(primaPulsante);
p.innerHTML += " (\"a capo\" = \"\\n\". Ad esempio \"Prima riga\\nSeconda riga\")";
body.appendChild(p);
// Cosa inserire dopo
var p = document.createElement('p');
p.innerHTML += "<span style=\"font-size: medium;\">Cosa inserire dopo?: </span>";
var dopoPulsante = document.createElement('input');
dopoPulsante.name = 'dopoPulsante';
dopoPulsante.id = 'dopoPulsante';
dopoPulsante.type = 'text';
p.appendChild(dopoPulsante);
p.innerHTML += " (solo per inserimenti sul cursore, leggi <span style=\"font-weight: bold;\"><a href='http://it.wikipedia.org/wiki/Wikipedia:Monobook.js/Pulsanti personali' target=new>la guida</a></span> per info)";
body.appendChild(p);
// Cosa inserire come oggetto
var p = document.createElement('p');
p.innerHTML += "<span style=\"font-size: medium;\">Oggetto della modifica: </span>";
var oggettoPulsante = document.createElement('input');
oggettoPulsante.name = 'oggettoPulsante';
oggettoPulsante.id = 'oggettoPulsante';
oggettoPulsante.type = 'text';
p.appendChild(oggettoPulsante);
body.appendChild(p);
var ACapo = document.createElement('p');
ACapo.innerHTML = '<br/>';
body.appendChild(ACapo);
// Bottone "Crea"
var btnCreate=document.createElement('input');
btnCreate.type='button';
btnCreate.value = "Crea questo pulsante";
btnCreate.onclick = msCreatePP;
body.appendChild(btnCreate);
var ACapo = document.createElement('p');
ACapo.innerHTML = '<br/>';
body.appendChild(ACapo);
body.appendChild(document.createElement("hr"));
var ACapo = document.createElement('p');
ACapo.innerHTML = '<br/>';
body.appendChild(ACapo);
// Bottone "Salva"
var btnSave=document.createElement('input');
btnSave.type='button';
btnSave.value = "Salva";
btnSave.onclick = msSavePP;
body.appendChild(btnSave);
var pad=document.createElement('label');
pad.innerHTML=" ";
body.appendChild(pad);
// Bottone "Annulla"
var btnClose=document.createElement('input');
btnClose.type='button';
btnClose.value = "Annulla";
btnClose.onclick = function(){ RemoveNode('SetupPulsanti') };
body.appendChild(btnClose);
var ACapo = document.createElement('p');
ACapo.innerHTML = '<br/>';
body.appendChild(ACapo);
// e lo mostra a video
document.body.appendChild(msWndSetup);
msWndSetup.getElementsByTagName('input')[0].focus();
}
//START DEL TOOL
if (typeof msConfigFile == 'undefined')
msConfigFile = 'monobook.js';
if(typeof(msWndSetup) != 'undefined'){
msWndSetup.focus();
}else{
myButtonsNew = new Array();
// se non esiste ancora "myButtons" la creo
if (typeof (myButtons) == 'undefined')
var myButtons = new Array();
else
{
for (i=0; i < myButtons.length; i++)
myButtonsNew[i] = new Array();
for (i=0; i < myButtons.length; i++)
for (j=0; j < myButtons[0].length; j++)
myButtonsNew[i][j] = myButtons[i][j].toString();
}
// Disegna la finestra
msCreateUIPP();
}
// </nowiki>