Wikiversità:Monobook.js/Pulsanti personali.js
/*
Interfaccia grafica per il setup dei pulsanti personali.
Autore: Jalo.
- /
//
var myButtonsNew; var tblBody; // 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; } function fullescape(text) { return escape(text).replace(/\+/g,"%2B"); } // 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 < 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, "\\\'"); // 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] + '],'; } // tolgo l'ultima virgola res = res.substr(0,res.length-1); return res; } // Salva la tabella corrente function msSave(){ var oldMonobook = msGetPageContent('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(" + msGenerateNewConfig() + ");"); else var newMonobook = oldMonobook.replace(/var toLoad/, "var myButtons = new Array(" + msGenerateNewConfig() + ");\n\nvar toLoad"); msSetPageContent('Utente:' + wgUserName + '/' + msConfigFile, newMonobook, "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 creaRiga(numero, titolo, dove, prima, dopo) { 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() {rimuoviPulsante(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); // aggiunge la riga alla fine della tabella tblBody.appendChild(row); } // Crea un pulsante function msCreate() { msWndSetup=document.getElementById("SetupPulsanti"); var tipo, titolo, prima, dopo, offset, dove; // 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; offset = 0; // Correggo i caratteri apostrofo titolo = titolo.replace(/\'/gi, "\'"); prima = prima.replace(/\'/gi, "\'"); dopo = dopo.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); 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>"; creaRiga(tblBody.rows.length, titolo, dove, prima, dopo); } // Cancella un pulsante function rimuoviPulsante(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'); msCreateUI(); } // Disegna la finestra function msCreateUI(){ 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.wikiversity.org/wiki/Wikiversità: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); // 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 "dive" 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 = "·"; creaRiga(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>"); } 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.wikiversity.org/wiki/Wikiversità:Monobook.js/Pulsanti personali' target=new>la guida</a></span> per info)"; 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 = 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('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 msCreateUI(); } //