Utente:LoStrangolatore/Tools/Apri pagine in sequenza/Codice

Da Wikisource.
Jump to navigation Jump to search

///////////////////////////////////// TOOL "APRI PAGINE IN SEQUENZA" ///////////////////////////////////// // Racchiude tutte le funzioni del tool, così non possono esserci conflitti di nomi Tool_ApriPagineInSequenza = {};

// Apre le pagine specificate del testo specificato. In particolare, ognuna delle pagine // è Pagina:titolo.djvu/i dove i è compreso fra primaPagina e ultimaPagina incluse. Tool_ApriPagineInSequenza.apriPagine = function(testo, primaPagina, ultimaPagina) {

    for(var i = primaPagina; i <= ultimaPagina; i++) {
       var pagina = "Pagina:" + testo + ".djvu/" + i;
       Tool_ApriPagineInSequenza.apriSchedaDelBrowser("http://it.wikisource.org/w/index.php?title=" + pagina + "&action=edit");
   }

};

// Apre lo URL specificato in una nuova scheda del browser. Tool_ApriPagineInSequenza.apriSchedaDelBrowser = function(url) {

   window.open(url); // corretto?

}

// Cerca di estrarre il nome della pagina corrente: priva del namespace, dell'estensione, di sottopagine ecc. // Es. Da "Pagina:Piccolo Mondo Moderno (Fogazzaro).djvu/81" cerca di estrarre "Piccolo Mondo Moderno (Fogazzaro)" Tool_ApriPagineInSequenza.estraiNomePagina = function() {

   var nsPrincipale = 0, nsPagina = 108, nsIndice = 110;
   var nomePagina = wgPageName; // copio perché dopo uso funzioni con side-effect
   
   switch(wgNamespaceNumber) {
   case nsPrincipale:         return nomePagina;
   case nsPrincipale+1:       return nomePagina.split(":")[1];
   case nsPagina: case nsPagina+1:
       return nomePagina.replace(/.*\s*[Pp]agina:/, "").replace(/.djvu\/\d+/, "");
   case nsIndice: case nsIndice+1:
       return nomePagina.replace(/.*\s*[Ii]ndice:/, "").replace(/.djvu/, "");
   default:
       return nomePagina.split(":")[1];
   }

}


// Cerca di dedurre il nome del testo cui l'utente ha intenzione di accedere. // Nel caso non riesca a dedurre un buon nome, restituisce "". Tool_ApriPagineInSequenza.deduciPossibileNomeTesto = function() {

   return Tool_ApriPagineInSequenza.estraiNomePagina().replace(/_/g, " ");

}

// Esegue il tool. Tool_ApriPagineInSequenza.esegui = function() {

   // Messaggi utente.
   var messaggio1 =
       "Inserisci il nome del testo.\n\n" + "ESEMPIO:\nSe vuoi accedere alle pagine di:\n" +
       "   Testo:Piccolo Mondo Moderno (Fogazzaro).djvu\n" +
       "inserisci:\n" +
       "Piccolo Mondo Moderno (Fogazzaro)";
   var messaggio2 = "Inserisci il numero della prima e dell'ultima pagina, separate da uno spazio.\n\n" +
                    "ESEMPIO:\nPer aprire le seguenti pagine:\n"+
   "   Pagina:Piccolo Mondo Moderno (Fogazzaro).djvu/20\n" +
   "   Pagina:Piccolo Mondo Moderno (Fogazzaro).djvu/21\n" +
   "   Pagina:Piccolo Mondo Moderno (Fogazzaro).djvu/22\n" +
   "qui sotto dovrai scrivere:\n20 22";
   
   // Ottengo input. Termino il tool se l'utente preme "Annulla" o se inserisce un input errato.
   var testo = prompt(messaggio1, Tool_ApriPagineInSequenza.deduciPossibileNomeTesto());
       if (testo == null) return; // tasto "Annulla"
   var pagine = prompt(messaggio2, "");
       if (pagine == null) return; // tasto "Annulla"
       if (!pagine.match(/\d+\s\d+/)) {
           alert("Impossibile proseguire: devono essere inseriti due numeri separati da uno spazio.");
           return;
       }
   pagine = pagine.split(" ");
   var primaPagina = pagine[0], ultimaPagina = pagine[1];
   // Eseguo, usando l'input raccolto.
   Tool_ApriPagineInSequenza.apriPagine(testo, primaPagina, ultimaPagina);

}

///////////////////////////////////// FINE TOOL "APRI PAGINE IN SEQUENZA" /////////////////////////////////////