Wikibooks:Elenchi generati offline/Libri non linkati nei ripiani: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m aggiorno |
aggiorno e correggo script |
||
Riga 4:
|query =
|alternative=
*Apri la console Javascript del browser.
*Crea un array con tutti i titoli dei libri (per es. dall'[[WB:Elenchi generati offline/Libri|apposito elenco gen. offline]]).
*Incolla questo codice nella console ed eseguilo:
<pre><nowiki>
codificaTitoli(); // modifica l'array titoli
libriLinkati = libriLinkatiNeiRipiani();
libriNonLinkati = $.grep( titoli, function(obj, index) { return !isTitoloInArray(obj, libriLinkati) } );
stampaArray( libriNonLinkati );
// @return Un array con i titoli dei libri linkati nei ripiani.
function libriLinkatiNeiRipiani() {
ripiani = elencaRipiani();
ripianiInFormatoHtml = scaricaRipianiInHtml(ripiani);
var libriLinkati = [];
for(i = 0; i < ripianiInFormatoHtml.length; i++) {
libriLinkati = libriLinkati.concat( libriLinkatiNellHtml(ripianiInFormatoHtml[i]) );
}
return libriLinkati;
}
// @return Un array con i nomi dei ripiani.
function elencaRipiani() {
console.log("Scarico elenco dei ripiani...")
json = apiSync({ action: 'query', format: 'json', list: 'allpages', apnamespace: 102, aplimit: 500 });
pagine = JSON.parse( json ).query.allpages;
elenco = [];
for(i = 0; i < pagine.length; i++) {
elenco.push(pagine[i].title);
}
// Workaround temporaneo: finché le vecchie sottopagine dei ripiani, che non hanno il DynamicPageList, non sono cancellate.
elenco = $.grep(elenco, function(obj) {return obj.indexOf('/') == -1;});
return elenco;
}
// @return Un array il cui elemento i-esimo è il contenuto in html del ripiano
// il cui titolo è ripiani[i].
function scaricaRipianiInHtml(ripiani) {
risultato = [];
for(i = 0; i < ripiani.length; i++) {
console.log("Scarico ripiano " + i + "/" + ripiani.length);
json = apiSync({ action: 'parse', format: 'json', page: ripiani[i] });
html = JSON.parse( json ).parse.text["*"];
risultato.push(html);
}
return risultato;
}
// @return Un array dei titoli dei libri linkati nel codice html specificato.
function libriLinkatiNellHtml(html) {
var libriLinkati = [];
// Il selettore jQuery che segue è un po' "strano", ma empiricamente pare che non funzioni se lo modifico
$(html).children("").children("li a").each(function() {
href = $(this).attr("href");
// Prendendo ciò che viene dopo "/wiki/", escludo automaticamente i link che non puntano a MediaWiki.
// Tuttavia, potrebbero esserci dei link che puntano a wiki diverse da it.wikibooks.
match = (/\/wiki\/(.*)$/).exec( href ); // null se non c'è corrispondenza. Altrimenti, [0] è il testo comprensivo di "/wiki/", [1] è il capturing group.
if (match != null) {
libriLinkati.push(match[1]);
}
});
return libriLinkati;
}
// Richiesta sincrona alle API di MediaWiki.
function apiSync(data) {
return $.ajax({
url:mw.util.wikiScript('api'),
data: data,
async:false
}) .responseText;
}
function codificaTitoli() {
for(i = 0; i < titoli.length; i++) {
titoli[i] = mw.util.wikiUrlencode(titoli[i]);
}
}
// @return true se il titolo è nell'array di titoli specificato, false altrimenti.
function isTitoloInArray(titolo, array) {
for(i = 0; i < array.length; i++) {
if (titolo == array[i] || mw.util.wikiUrlencode(titolo) == array[i])
return true;
}
return false;
}
function stampaArray(array) {
console.log( "Libri non linkati nei ripiani:" );
console.log( "# [[" + array.join("]]\n# [[") + "]]" );
console.log( "Fine elenco" );
}
</nowiki></pre>
|elenco=
# [[Accademie_teatrali_nel_mondo]]
# [[Aziende_di_Erogazione%2C_Azienda_dello_Stato_e_Enti_Locali]]
# [[Armi_tedesche_seconda_guerra_mondiale]]
# [[Bavaria_%28Nervesa_della_Battaglia%29]]
# [[
# [[
# [[Catalogo_Monete_Italiane_1946-2001]]
# [[Chimica_fisica]]
# [[Costruire_un_orario_scolastico]]
# [[Elementi_di_Euclide]]
# [[Elettronica_di_Potenza]]
# [[
# [[Elettrotecnica]]
# [[Esercitazioni_pratiche_di_Elettrotecnica]]
# [[
# [[F-104_Starfighter]]
# [[
# [[
# [[Fondamenti_di_automatica]]
# [[Geometria_per_le_medie_inferiori]]
# [[
# [[Geometria_per_scuola_elementare]]
# [[
# [[
# [[
# [[
# [[La_terra_per_nutrire_il_pianeta]]
# [[
# [[MariaDB]]
# [[Orto]]
# [[Numero_misto]]
# [[Osservare_il_cielo_da_40%C2%B0N]]
# [[
# [[
# [[Poesie_%28Palazzeschi%29]]
# [[Reazioni_di_chimica_organica]]
# [[
# [[
# [[Semplici_modelli_differenziali]]
# [[Storia_delle_miniere_di_sale_siciliane]]
# [[Teoria_delle_aperture_negli_scacchi]]
# [[Ungheria]]
# [[
# [[
}}
|