Utente:LoStrangolatore/ListaDaCategoria/Gadget-ListaDaCategoria.js

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

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 ...
        }
    });
}