Utente:Alex brollo/getAny.js
Nota: dopo aver pubblicato, potrebbe essere necessario pulire la cache del proprio browser per vedere i cambiamenti.
- Firefox / Safari: tieni premuto il tasto delle maiuscole Shift e fai clic su Ricarica, oppure premi Ctrl-F5 o Ctrl-R (⌘-R su Mac)
- Google Chrome: premi Ctrl-Shift-R (⌘-Shift-R su un Mac)
- Internet Explorer / Edge: tieni premuto il tasto Ctrl e fai clic su Aggiorna, oppure premi Ctrl-F5
- Opera: premi Ctrl-F5.
/*
Recupera qualsiasi dato recuperabile con API da qualsiasi pagina di qualsiasi progetto mediawiki, e sui dati recuperati (in formato JSON) esegue qualsiasi cosa sia fattibile in js.
Accetta un unico parametro parametri che è un oggetto js del tipo:
var parametri = {
sito: sito,
titolo: titolo,
indice: indice,
ajax: {
url: 'https://' + sito + '/w/api.php',
async: false, // NON MODIFICARE
data: {
format: 'json',
action: 'parse',
page: titolo,
prop: 'text'
},
dataType: 'jsonp' // NON MODIFICARE
},
callback: callback1, // questa funzione viene eseguita su data tenendo anche conto di parametri
}
In questo caso di esempio, il parametro ajax corrisponde alla chiamata API action=parse e prop=text sulla pagina titolo del sito sito e restituisce l'html della pagina; vedi documentazione API. Questo contenuto di parametri permette di recuperare il testo html di qualsiasi pagina normale di qualsiasi progetto mediawiki.
*/
/* Il "cuore" del meccanismo, getAny(), viene portato in Common.js.
function getAny(parametri) {
$.ajax(parametri.ajax).done(function (data) {
parametri.callback( parametri, data);
});
}*/
/* questa particolare funzione callback di elaborazione dei dati estrae l'html come testo, rende assoluti i link relativi in modo che puntino sul sito giusto, e nell'ultima istruzione inserisce il testo html (trasformato in oggetto jQuery) subito
sotto a un "bottone di richiesta di inserimento" (l'esempio è tratto da una particolare applicazione su wikivoyage) */
function callback1(parametri, data) {
// estraggo l'html dall'oggetto JSON
var html = data.parse.text["*"]
// rendo assoluti i link relativi
html = html.replace(/href=\"\/wiki\//g, 'href=//' + parametri.sito + '/wiki/')
html = html.replace(/href=\"\/w\//g, 'href=//' + parametri.sito + '/w/');
// faccio comparire html in .iwt
$(".iwtContent", $(".iwt").eq(parametri.indice)).html("").append($(html));
}
/* questo è un esempio di "funzione chiamante getAny", anch'essa tratta da u esperimento su wikivoyage. Raccoglie dalla pagina
il valore dei due parametri titolo e sito, allestisce l'oggetto parametri e chiama getAny. */
function getAnyGo(titolo, sito, indice) {
if (titolo == undefined) var titolo = $(".nomePagGet").text();
if (sito == undefined) var sito = $(".sitoPagGet").text();
sito = sito.split(":");
sito = sito[0] + "." + sito[1] + ".org";
var parametri = {
sito: sito,
titolo: titolo,
indice: indice,
ajax: {
url: 'https://' + sito + '/w/api.php',
async: false,
data: {
format: 'json',
action: 'parse',
page: titolo,
prop: 'text'
},
dataType: 'jsonp'
},
callback: callback1
}
getAny(parametri, callback1);
$(".itw .bottone").eq(indice).remove();
}
/* Questo è un esempio di funzione preliminare che, sulla base del codice predisposto da un template, crea i bottoni
per attivare getAnyGo() alla pressione di un bottone collegato a una pagina di un sito. In questo caso oltre al bottone
si crea anche una div in cui il risultato finale della chiamata sarà visualizzato. */
$(document).ready(function () {
$(".iwt").each(function (index) {
var titolo = $(".nomePagGet", $(this)).text();
var sito = $(".sitoPagGet", $(this)).text();
$(".bottone", $(this)).append($('<button onclick="getAnyGo("' + titolo + '","' + sito + '",' + index + ')">Visualizza da ' + sito + '</button>'));
// $(this).append($('<div class="iwtContent mw-collapsible-content" style="border:1px dotted blue"></div>'));
})
});
/*
// Questa funzione è WIP per un altro tipo di interrogazione: ricava la lista dei langlinks di una pagina.
// Va profondamente rivista sulla base di una chiamata a Wikidata.
function g(title, lang, site) {
$.ajax({
url: 'https://'+lang+'.'+site+'/w/api.php',
async:false,
data: {
format: 'json',
action: 'parse',
page: title,
prop: 'langlinks|iwlinks',
},
dataType: 'jsonp'
}).done(function (data) {
var l=[];
$.each(data.parse.langlinks, function (index,value) {
if (value.lang=="en" || value.lang=="it" || value.lang=="fr" || value.lang=="de" || value.lang=="el") {
l.push([value["*"],value.lang]);
}
});
$(".ourDiv").data("langlinks",l);
});
} */