Utente:LoStrangolatore/ListaDaCategoria/Gadget-ListaDaCategoria.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.
// Mostra la lista delle pagine contenute in una categoria. Uso: vedi [[Template:Estrai lista da categoria]].
//
//
// L'implementazione attuale usa codice preso da [[mw:API:Categorymembers#Retrieving_via_AJAX]]
// e adattato da [[User:LoStrangolatore]].
//
$(".lista_da_categoria").each(function(index, obj) {
asyncGetCategoryList($(this).html(), this);
});
// Se categoryName è diverso dalla stringa vuota, inserisce nel target la lista (in formato HTML)
// delle voci presenti nella categoria indicata.
// Se categoryName è la stringa vuota, inserisce nel target un pulsante che chiede la cat all'utente
// e quindi genera la lista.
//
// @param categoryName Il nome della categoria da ispezionare (con o senza il namespace "Categoria:"),
// oppure la stringa vuota.
// @param target Un oggetto del DOM della pagina web, in cui sarà inserito il contenuto generato
// (pulsante o lista).
function asyncGetCategoryList( categoryName, target ) {
if (categoryName == '')
inserisciPulsante(target);
else
inserisciLista(categoryName, target);
}
// Inserisce nel target un pulsante che, quando cliccato, chiede il nome di una categoria all'utente
// e quindi attiva la funzione inserisciLista().
//
// @param target L'oggetto in cui sarà inserita la lista estratta dalla categoria.
function inserisciPulsante(target) {
// copio lo stile dallo Upload Wizard di Commons
urlImgSfondo = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAWBAMAAADz6OuZAAAALVBMVEXh4eHR0dHr6+vb29vo6Ojl5eXV1dXv7+/w8PDt7e3d3d3X19fx8fHy8vLPz88WlQFaAAAAM0lEQVR4XkXBURXAEAAAwIuwCIsggggiiCCCCCKIIIIIIojCn3fWNa+qaH5RQhcM2Wc/BwNbDIE7SpS7AAAAAElFTkSuQmCC';
stile = '' +
' border: 1px #A6A6A6 solid; border-radius:0.5em; ' +
' background-color:#f2f2f2; background-image: url(' + urlImgSfondo + '); ' +
' padding:0.3em 1em 0.25em 1em; ' ;
$(target).html(
'<a style="' + stile + '" onclick="pulsante_onclick( this.parentNode ); return false;">Elenca le pagine di una categoria</a>'
);
}
// Attivato quando l'utente clicca sul pulsante generato da inserisciPulsante().
//
// @param target L'oggetto in cui sarà inserita la lista estratta dalla categoria.
function pulsante_onclick(target) {
categoryName = prompt("Quale categoria devo ispezionare?");
inserisciLista(categoryName, target);
}
// Inserisce nel target la lista (in formato HTML) delle voci presenti nella categoria indicata.
// Questa funzione è stata incollata da [[mw:API:Categorymembers#Retrieving_via_AJAX]]
// e opportunamente modificata.
// Ottiene l'elenco delle pagine presenti in una certa categoria, genera una lista HTML, e inserisce
// la lista in un componente della pagina web.
// Mostra fino a 500 pagine se usato da un account utente senza flag di bot, fino a 5000 se usato
// da un account che ha il flag di bot. Per maggiori info, vedi [[mw:API:Categorymembers]]. Questo limite
// potrà essere superato in futuro, modificando la funzione.
//
// @param categoryName Il nome di una categoria (con o senza il namespace). Non può essere la stringa vuota.
function inserisciLista(categoryName, target) {
categoryName = categoryName.replace(/^[Cc]ategor(ia|y):/, ""); // Rimuovo eventuale prefisso del namespace
$.ajax({
url: mw.util.wikiScript( 'api' ),
data: {
format: 'json',
action: 'query',
list: 'categorymembers',
cmtitle: 'Category:' + categoryName,
cmtype: 'page',
cmlimit: 'max'
},
dataType: 'json',
type: 'GET',
success: function( data ) {
if ( data && data.query && data.query.categorymembers ) {
// Genero la lista in formato HTML a partire dall'elenco delle categorie.
listaHTML = '<ul>';
for(i = 0; i < data.query.categorymembers.length; i++) {
nomePagina = data.query.categorymembers[i].title;
listaHTML += '<li><a href=' + mw.util.getUrl( nomePagina ) + '>' + nomePagina + '</a></li>';
}
listaHTML += '</ul>';
$(target).html(listaHTML);
} else if ( data && data.error ) {
// Will this ever happen??
alert( 'Impossibile ottenere la lista delle pagine della categoria ' + categoryName + '. La API ha restituito il codice di errore "' + data.error.code + '": ' + data.error.info );
} else {
alert( 'Impossibile ottenere la lista delle pagine della categoria ' + categoryName + ': il sito ha restituito dati errati o inutilizzabili.' );
}
},
error: function( xhr ) {
// ... error ...
}
});
}