Wikibooks:Monobook.js/Collegamenti personali.js
/*
Interfaccia grafica per il setup dei collegamenti personali.
Autore: Jalo.
- /
//
<nowiki>
var myLinksNew;
var tblBody;
function fullescape(text)
{
return escape(text).replace(/\+/g,"%2B");
}
// Grazie a [[:en:User:Topaz]]
function msXmlhttpreq() {
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 msDoReq(url,postdata,headers) {
var req = msXmlhttpreq();
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 msSetPageContent(pagename,content,summary,watch) {
var prelimresp = msDoReq("/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];
msDoReq("/w/index.php?title="+pagename+"&action=submit",
"wpEdittime="+edittime+
"&wpEditToken="+fullescape(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 msGetPageContent(pagename) {
var req = msDoReq("/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 msGenerateNewConfig(){
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 < myLinksNew.length; i++)
{
// trasformo ' in \\\'
myLinksNew[i][0] = myLinksNew[i][0].replace(/\'/gi, "\\\'");
myLinksNew[i][1] = myLinksNew[i][1].replace(/\'/gi, "\\\'");
res += '[\'' + myLinksNew[i][0] + '\',\'' + myLinksNew[i][1] + '\'],';
}
// tolgo l'ultima virgola
res = res.substr(0,res.length-1);
return res;
}
// Controlla se il monobook e' tra tag -PRE-
function checkPre(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 msSave(){
var oldMonobook = msGetPageContent('Utente:' + wgUserName + '/' + msConfigFile);
// Se c'erano gia' i pulsanti
if (oldMonobook.match(/var myLinks[ ]*=[ ]*new Array.*;/) != null)
var newMonobook = oldMonobook.replace(/var myLinks[ ]*=[ ]*new Array.*;/, "var myLinks = new Array(" + msGenerateNewConfig() + ");");
else
var newMonobook = oldMonobook.replace(/var toLoad/, "var myLinks = new Array(" + msGenerateNewConfig() + ");\n\nvar toLoad");
// controlla se e' il caso di racchiudere il monobook tra tag -PRE-
tempMonobook = checkPre(newMonobook);
msSetPageContent('Utente:' + wgUserName + '/' + msConfigFile, tempMonobook, "Collegamenti 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('SetupCollegamenti');
}
// Crea una riga nella tabella
function creaRiga(numero, nome, link)
{
var row = document.createElement("tr");
row.id = 'Riga'+numero;
// Crea pulsante "rimuovi questo collegamento"
var cell = document.createElement("td");
var rimuovimi = document.createElement('input');
rimuovimi.value = 'Rimuovi';
rimuovimi.id = numero;
rimuovimi.type = 'button';
rimuovimi.onclick = function() {rimuoviCollegamento(this.id);};
cell.appendChild(rimuovimi);
row.appendChild(cell);
// Creo cella per nome
var cell = document.createElement("td");
cell.innerHTML += nome;
row.appendChild(cell);
// Creo cella per link
var cell = document.createElement("td");
cell.innerHTML += link;
row.appendChild(cell);
// aggiunge la riga alla fine della tabella
tblBody.appendChild(row);
}
// Crea un collegamento
function msCreate()
{
msWndSetup=document.getElementById("SetupCollegamenti");
var nome, link;
// Recupera i valori da salvare
nome = document.getElementById("nomeCollegamento").value;
link = document.getElementById("linkCollegamento").value;
// Correggo i caratteri apostrofo
nome = nome.replace(/\'/gi, "\'");
link = link.replace(/\'/gi, "\'");
// Aggiungili all'Array
var nuovo = new Array(nome, link);
myLinksNew[myLinksNew.length] = nuovo;
// E alla tabella
// Correggi il font
nome = "<span style=\"font-size: medium;\">"+nome+"</span>";
link = "<span style=\"font-size: medium;\">"+link+"</span>";
creaRiga(tblBody.rows.length, nome, link);
}
// Cancella un collegamento
function rimuoviCollegamento(riga)
{
msWndSetup=document.getElementById("SetupCollegamenti");
//Elimina riga "riga" dalla myLinksNew
myLinksNew.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('SetupCollegamenti');
msCreateUI();
}
// Disegna la finestra
function msCreateUI(){
var msWndSetup = document.createElement('div');
msWndSetup.id = 'SetupCollegamenti';
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 = 'setupCollegeamentiTop';
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('SetupCollegamenti')";
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>Collegamenti personali</b>.<br /><br />" +
"Vedi <span style=\"font-weight: bold;\"><a href='http://it.wikipedia.org/wiki/Wikipedia:Monobook.js/Collegamenti 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 collegamenti 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 Collegamento</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>Indirizzo HTTP</b></span>";
cell3.appendChild(cellText3);
header.appendChild(cell3);
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 < myLinksNew.length; j++)
{
// Creo "Nome"
var nome = myLinksNew[j][0];
// Creo "Link"
var link = myLinksNew[j][1];
creaRiga(j, "<span style=\"font-size: medium;\">"+nome+"</span>",
"<span style=\"font-size: medium;\">"+link+"</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 collegamento:</span><br/>';
body.appendChild(titoloCrea);
var ACapo = document.createElement('p');
ACapo.innerHTML = '<br/>';
body.appendChild(ACapo);
// Nome del collegamento
var p = document.createElement('p');
p.innerHTML += "<span style=\"font-size: medium;\">Nome del collegamento: </span>";
var nomeCollegamento = document.createElement('input');
nomeCollegamento.name = 'nomeCollegamento';
nomeCollegamento.id = 'nomeCollegamento';
nomeCollegamento.type = 'text';
p.appendChild(nomeCollegamento);
body.appendChild(p);
// Link del collegamento
var p = document.createElement('p');
p.innerHTML += "<span style=\"font-size: medium;\">Indirizzo HTTP: </span>";
var linkCollegamento = document.createElement('input');
linkCollegamento.name = 'linkCollegamento';
linkCollegamento.id = 'linkCollegamento';
linkCollegamento.type = 'text';
p.appendChild(linkCollegamento);
body.appendChild(p);
var Help = document.createElement('p');
Help.innerHTML = '<br/><b><u>Nota Bene:</u></b>';
Help.innerHTML += '<br/>L\'indirizzo HTTP deve essere completo di "http://"';
Help.innerHTML += '<br/>La stringa %TITOLO% verra\' sostituita dal nome della pagina in cui vi troverete';
Help.innerHTML += '<br/>La stringa %TITOLO2% verra\' sostituita dal nome della pagina in cui vi troverete ma senza l\'eventuale namespace';
Help.innerHTML += '<br/><br/>Ad esempio:';
Help.innerHTML += '<br/><br/>1) http://it.wikisource.org/wiki/%TITOLO% vi portera\' all\'omonima pagina su wikisource';
Help.innerHTML += '<br/>2) http://www.google.it/search?num=100&hl=it&q=%TITOLO2%+site%3Ait.wikibooks.org&btnG=Cerca&meta= vi permettera\' di cercare su google il titolo della voce';
Help.innerHTML += '<br/>';
body.appendChild(Help);
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 collegamento";
btnCreate.onclick = msCreate;
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 = msSave;
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('SetupCollegamenti') };
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{
myLinksNew = new Array();
// se non esiste ancora "myLinks" la creo
if (typeof (myLinks) == 'undefined')
var myLinks = new Array();
else
{
for (i=0; i < myLinks.length; i++)
myLinksNew[i] = new Array();
for (i=0; i < myLinks.length; i++)
for (j=0; j < myLinks[0].length; j++)
myLinksNew[i][j] = myLinks[i][j].toString();
}
// Disegna la finestra
msCreateUI();
}
// </nowiki>