Differenze tra le versioni di "MediaWiki/Hacking interfaccia"

m
- grassetto onnipresente
m (- grassetto onnipresente)
{{MediaWiki}}
Il software MediaWiki mette a disposizione la possibilità agli utenti o agli amministratori del sito di creare script JS e fogli di stile per '''personalizzare l'interfaccia della propria wiki'''.
 
== Con i fogli di stile ==
 
=== Reperire i giusti selettori ===
Per chi usa [[w:Mozilla Firefox|Mozilla Firefox]] è sufficiente premere contemporaneamente '''Ctrl+U''' per aprire una finsestra in cui è visualizzato tutto il codice sorgente della pagina al momento caricata.<br/>
Questo serve per individuare la struttura [[w:Document Object Model|DOM]] della pagina e gli attributi ID e <code>class</code> dei diversi elementi [[w:HTML|HTML]]: questo è indispensabile se si vuole personalizzare l'interfaccia tramite i CSS, in quanto questi ragionano in termini di codice sorgente e struttura del documento web.
{{Vedi anche|CSS/Selettori}}
 
Alcuni selettori sono presenti in alcune pagine ed assenti in altre, quindi in caso di personalizzazioni "estreme" sarà necessario visualizzare il codice sorgente di una pagina per ogni ''[[Aiuto:Namespaces|namespace]]''.<br/>
Per esempio i tab nella parte superiore delle pagine (link modifica, cronologia, sposta, ecc) hanno ID differenti a seconda del namespace della pagina; il tab con scritto "'''Template'''" è presente solo nelle pagine di template, quindi nel caso in cui volessimo modificare questo tab, esempio per metterci una piccola immagine al suo interno, dovremmo guardare il sorgente di una pagina casuale di template.
 
=== Un semplice esempio: inserire delle iconcine alle tab ===
 
Sono tre righe di semplice HTML, ma in alcune possiamo trovare alcuni elementi a noi molto utili:
* <code>li <nowiki>id="ca-nstab-template"</nowiki></code>: '''ID''' dell'elemento, nel CSS servirà come primo selettore per la personalizzazione.
* class="selected": dichiara al software che il tab è '''selezionato'''; è un'informazione utile se ad esempio vogliamo lavorare solo sulla tab selezionata.
* <code>a href="/wiki/Template:MediaWiki"</code>: '''link''' alla pagina.
* <code>title="Vedi il template [c]"</code>: ciò che appare lasciando il puntatore del mouse fermo sul tab.
* <code>accesskey="c"</code>: '''scorciatoia''' da tastiera (alt+shift+c, che però si limita a ricaricare la pagina).
* <code>Template</code>: '''testo''' che appare dentro al tab, utile per farci rendere conto se siamo nella porzione di codice giusta.
* <code><nowiki></a></li></nowiki></code>: '''chiusura''' dei tag.
 
Utilizzando Web Developer, invece, è possibile fare click su "''Outline''" nella toolbar apposita e poi "''Outline Current Element''" e "''Show element Names When Outlining''. I questo modo, passando sulla tab, potremo esaminare la sua posizione all'interno della gerarchia del DOM e individuarne l'ID e l'eventuale classe.
</source>
Questa dichiarazione CSS serve per inserire un'iconcina accanto al testo della tab "template". In particolare:
* <code>li#ca-nstab-template a</code>: questa parte del codice ('''selettore''') serve a CSS per '''identificare l'elemento''' o gli elementi della pagina a cui applicare le dichiarazioni inserite tra le parentesi graffe: in questo caso, indichiamo di prendere tutti gli elementi <code>&lt;a&gt;</code> contenuti nell'elemento <code>&lt;li&gt;</code> che presenta l'ID <code>ca-nstab-template</code>, cioè la tab del namespace "template".
* <code>padding-left: 18px;</code>: questa dichiarazione CSS indica di inserire all'interno della tab un ''padding'' sinistro di 18px. In pratica, aggiunge una '''spaziatura''' di 18px a sinistra del testo nella tab per fare spazio all'iconcina.
* <code>background: url(<nowiki>http://Indirizzo_completo/immagine.estensione</nowiki>)</code>: indirizzo da cui prelevare l''''immagine'''. Attenzione: l'immagine, nel caso specifico dei tab, deve essere di dimensioni 16x16 [[w:Pixel|pixel]], altrimenti potrebbe non vedersi o vedersi in parte.<br/>L'indirizzo, nel caso in cui fosse un'immagine caricata in una wiki, non è l'indirizzo che appare nella wiki, ma la sua [[w:URL|URL]], che può essere reperita nella [[Speciale:Filepath|pagina apposita]] scrivendo il nome dell'immagine. Se invece fosse caricata in un sito esterno, ad esempio il vostro, se navigate con FF potete cliccare con il tasto destro del mouse sull'immagine, e scegliere ''Copia indirizzo immagine''.
* <code>top left</code>: questa parte della dichiarazione CSS specifica di inserire l'immagine nell'angolo in alto a sinistra della tab
* <code>no-repeat</code>: questa parola chiave indica che l'immagine non deve essere ripetuta nella tab
* <code>!important</code>: questo modificatore serve per attribuire più '''peso''' alla dichiarazione CSS. Se non inserita, potrebbe essere superata dal codice CSS proveniente da altri file.
 
Questo codice va inserito nel proprio '''[[Wikibooks:Monobook.css|monobook]] personale''' in qualsiasi posizione, anche in fondo va bene: in questo modo il codice sarà visibile solo dall'utente che ne ha fatto uso. Per rendere la modifica visibile a tutti, il codice va aggiunto al file [[MediaWiki:Common.css|Common.css]] di sistema, modificabile però solo da amministratori
 
=== Ultime modifiche colorate ===
[[Immagine:RC colorate.png|thumb|left|800px|Le RC colorate in azione]]<br style="clear:both;"/>
Utilizzando i CSS è possibile anche personalizzare la pagina delle '''[[Speciale:UltimeModifiche|Ultime modifiche]]'''. È possibile ad esempio con alcune dichiarazioni CSS differenziare con diversi colori le modifiche positive, negative o nulle. Questo grazie al software, che inserisce questo numero accanto al link alla pagina all'interno di un elemento <code>&lt;span&gt;</code> con una classe particolare:
* <code>.mw-plusminus-pos</code>: questa classe identifica le modifiche positive (cioè nelle quali sono stati aggiunti dei caratteri).
* <code>.mw-plusminus-neg</code>: identifica le modifiche negative.
 
=== Notifica nuova messaggi ===
Quando un utente riceve '''nuovi messaggi''', MediaWiki mostra un messaggio di avviso. La notifica può essere personalizzata in quanto è identificata dalla classe <code>usermessage</code>. Ad esempio:
<source lang=css>
.usermessage { /* imposta uno sfondo blu */
 
=== Table of Content ===
La '''tabella dei contenuti''' (o '''''"TOC'''''") non è altro che una tabella HTML con id #toc. Possiamo ad esempio lavorare sullo span .tocnumber nascondendolo:
<source lang=css>
#toc .tocnumber {
== Con i JavaScript ==
Anche tramite il linguaggio JavaScript è possibile modificare l'interfaccia di MediaWiki, anche se in modo diverso. Mentre con i CSS è possibile eseguire solo modifiche alla visualizzazione, lavorando con gli script è possibile anche aggiungere, rimuovere o nascondere elementi della pagina.
'''Attenzione''': perPer la lettura di questa sezione è ''fortemente'' consigliato conoscere il linguaggio [[w:JavaScript|JavaScript]].
{{Vedi anche|Wikibooks:Monobook.js}}
'''Attenzione''': per la lettura di questa sezione è ''fortemente'' consigliato conoscere il linguaggio [[w:JavaScript|JavaScript]].
{{Vedi anche|JavaScript}}
 
Una funzione JavaScript molto interessante che mette a disposizione il software è <code>addOnloadHook()</code>, che permette di eseguire una funzione al caricamento della pagina.
<br/>Infatti, senza far ricorso a questa funzione, le istruzioni verrebbero eseguite ''prima'' del caricamento della pagina, senza poter accedere agli e'''lementielementi del [[w:Document Object Model|DOM]]'''.
 
In generale, per far eseguire un JavaScript in ogni pagina di MediaWiki, utilizziamo questo codice:
 
Questa istruzione va inserita nel proprio Monobook.js (per creare un JavaScript personale) oppure nel suo omologo nel namespace MediaWiki (per far eseguire lo script in ogni pagina della wiki).
<br/>Ovviamente è possibile inserire nel monobook delle funzioni, ma queste devono essere comunque eseguite tramite l'lo ''hook''.
 
=== Creare un porlet personalizzato ===
Muovendosi tra gli oggetti del DOM, è possibile creare, modificare o eliminare gli oggetti nella pagina; per esempio è possibile creare un '''menu personale''' nella barra laterale (portlet), partendo da quelli già esistenti:
<source lang=javascript>
//tratto da [[User:Ramac/monobook.js]]
</source>
 
In questo modo è stato creato un nuovo box nella barra laterale (come "navigazione" o "ricerca" pronto a contenere i nostri link o i nostri oggetto [[w:HTML|HTML]]. Sarà sufficiente infatti creare un nuovo oggetto DOM e poi "appenderlo" all'elemento &lt;ul&gt; memorizzato nella variabile <code>ul</code>. Il codice seguente inserisce nel porlet appena creato un '''[[w:Link|link]]''':
<source lang=javascript>
var l = document.createElement('LI'); //crea un punto elenco