Utente:Codicorumus/autoFillDatePages.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.
/* <nowiki> */
/* jshint
      esversion : 6
    , browser   : true
    , undef     : true
    , unused    : true
    , eqeqeq    : true
    , laxcomma  : true
    , laxbreak  : true
 */
/* globals
    mw : false
 */

/*
 *   compila automaticamente le pagine
 *   -- delle categorie data
 *        -- degli articoli
 *        -- e del Bar
 *   -- dell'archivio articoli
 *
 *   non verifica l'URL
 *   perché il caricamento
 *   è demandato ad un altro script
 *   ...
 *   inutile caricare questo su ogni pagina
 *
 */

mw.libs.autoFillDatePages = {
    init : function ( replace ) {

        if (
            ! replace
            && this.util.getContent().trim() !== ''
        )
        return;

        var
            pageName = mw.config.get( 'wgPageName' )
            , parsedTitle
        ;

        for ( let key in this.pages ) {

            let page = this.pages[ key ];

            parsedTitle = page.regex.exec( pageName );
            if ( ! parsedTitle )
                continue;

            page.util = this.util;

            this.util
            .setContent(
                page.getText( parsedTitle )
            )
            .setSummary( page.summary )
            ;

            if (
                mw.user.options.get( 'gadget-autoFillDatePages-autosave' )
                &&
                ! replace
            )
            this.util.save();

            return;

        }

        delete mw.libs.autoFillDatePages;

        return;

    }
    //
    , pages : {
        categoriaGiorno : {
            // Categoria:3 maggio 2010
            regex : /^Categoria:(\d\d?)_(\w+)_(\d\d\d\d)$/
            , summary : 'creazione categoria giorno'
            , getText : function ( found ) {

                var giorno = found[1];
                var mese = found[2];
                var meseNum = this.util.meseConvertiStringaNumero( mese , 'm' );
                var anno = found[3];

                var dataCorr = new Date( anno , meseNum , giorno , 12 );
                var dataPrec = this.util.altraData( dataCorr , - 1 , 'giorno' );
                var dataSucc = this.util.altraData( dataCorr , + 1 , 'giorno' );

                //{{categoriadata|1|1 maggio 2010|3 maggio 2010|maggio 2010}}
                var template = '{{categoriadata|'
                    + giorno + '|'
                    + dataPrec + '|'
                    + dataSucc + '|'
                    + mese + ' ' + anno + '}}';

                return template;

            }
        }
        , categoriaMese : {
            // Categoria:maggio 2010
            regex : /^Categoria:(\w+)_(\d\d\d\d)$/
            , summary : 'creazione categoria mese'
            , getText : function ( found ) {

                var mese = found[1].toLowerCase();
                var meseNum = this.util.meseConvertiStringaNumero( mese , 'm' );
                var anno = found[2];

                var dataCorr = new Date( anno , meseNum , 15 );
                var dataPrec = this.util.altraData( dataCorr , - 30 , 'mese' );
                var dataSucc = this.util.altraData( dataCorr , + 30 , 'mese' );

                //{{categoriamese|marzo|febbraio 2010|aprile 2010|2010}}
                var template = '{{categoriamese|'
                    + mese + '|'
                    + dataPrec + '|'
                    + dataSucc + '|'
                    + anno + '}}';

                return template;

            }
        }
        , categoriaAnno : {
            // Categoria:2010
            regex : /^Categoria:(\d\d\d\d)$/
            , summary : 'creazione categoria anno'
            , getText : function ( found ) {

                var anno = found[1];

                var dataCorr = new Date( anno , 5 , 30 );
                var dataPrec = this.util.altraData( dataCorr , - 365 , 'anno' );
                var dataSucc = this.util.altraData( dataCorr , + 365 , 'anno' );

                //{{categoriaanno|2010|2009|2011}}
                var template = '{{categoriaanno|'
                    + anno + '|'
                    + dataPrec + '|'
                    + dataSucc + '}}';

                return template;

            }
        }
        , archivioGiorno : {
            // Wikinotizie:2010/maggio/31
            regex : /^Wikinotizie:(\d\d\d\d)\/([a-z]+)\/(\d\d?)$/
            , summary : 'creazione pagina archivio giorno'
            , getText : function ( found ) {

                var anno = found[1];
                var mese = found[2];
                var giorno = found[3];

                /*
                 <DynamicPageList>
                 category=31 maggio 2010
                 ...
                 </DynamicPageList>
                 */
                var template = '<DynamicPageList>\n'
                    + 'category=' + giorno + ' ' + mese + ' ' + anno + '\n'
                    + 'category=Pubblicati\n'
                    + 'notcategory=Richieste di cancellazione\n'
                    + 'notcategory=Articoli da sistemare\n'
                    + 'notcategory=Articoli discussi\n'
                    + 'notcategory=Articoli da migliorare\n'
                    + 'suppresserrors=true\n'
                    + '</DynamicPageList>\n';

                return template;

            }
        }
        , archivioMese : {
            // Wikinotizie:2010/maggio
            regex : /^Wikinotizie:(\d\d\d\d)\/([a-z]+)$/
            , summary : 'creazione pagina archivio mese'
            , getText : function ( found ) {

                var anno = found[1];
                var mese = found[2];
                var meseNum = this.util.meseConvertiStringaNumero( mese , 'm' );

                var dataCorr = new Date( anno , meseNum , 15 , 12 );
                var dataSucc = new Date( dataCorr.getTime() + 30 * 86400000 );
                var primoMeseSucc = new Date( dataSucc.getFullYear() , dataSucc.getMonth() , 1 );
                var ultimoDelMese = ( new Date( primoMeseSucc.getTime() - 86400000 ) ).getDate();

                /*
                 {{Archivio}}

                 == [[Wikinotizie:2010/maggio/1|1 maggio]] ==
                 {{Wikinotizie:2010/maggio/1}}

                 == [[Wikinotizie:2010/maggio/2|2 maggio]] ==
                 {{Wikinotizie:2010/maggio/2}}

                 ...

                 {{Archivio mese interwiki|anno=2010|mese=maggio|mnn=5|mn=5}}
                 */
                var template = '{{Archivio}}\n\n';
                for ( let i = 1; i <= ultimoDelMese; i ++ ) {
                    template += '== [[Wikinotizie:' + anno + '/' + mese + '/' + i + '|' + i + ' ' + mese + ']] ==\n'
                        + '{{Wikinotizie:' + anno + '/' + mese + '/' + i + '}}\n\n';
                }
                template += '{{Archivio mese interwiki'
                    + '|anno=' + anno
                    + '|mese=' + mese
                    + '|mnn=' + ( '0' + ( 1 + meseNum ) ).substr( - 2 , 2 )
                    + '|mn=' + ( 1 + meseNum )
                    + '}}';

                return template;

            }
        }
        , archivioAnno : {
            // Wikinotizie:2010
            regex : /^Wikinotizie:(\d\d\d\d)$/
            , summary : 'creazione pagina archivio anno'
            , getText : function ( found ) {

                var anno = found[1];

                /*
                 Archivio delle notizie per mese dell'anno 2010.

                 * [[Wikinotizie:2010/febbraio|Febbraio]]
                 ...
                 * [[Wikinotizie:2010/dicembre|Dicembre]]
                 */
                var template = "Archivio delle notizie per mese dell'anno " + anno + ".\n";
                for ( let meseNum = 0; meseNum < 12; meseNum ++ ) {
                    template += '* [[Wikinotizie:'
                        + anno + '/'
                        + this.util.meseConvertiStringaNumero( meseNum , 'mese' )
                        + '|' + this.util.meseConvertiStringaNumero( meseNum , 'Mese' )
                        + ']]\n';
                }

                return template;

            }
        }
        , categoriaBarGiorno : {
            // Categoria:Wikinotizie Bar - 25 giugno 2010
            regex : /^Categoria:Wikinotizie_Bar_-_(\d\d?)_(\w+)_(\d\d\d\d)$/
            , summary : 'creazione categoria bar giorno'
            , getText : function ( found ) {

                var giorno = found[1];
                var giorno01 = ( '0' + giorno ).substr( - 2 , 2 );
                var mese = found[2];
                var anno = found[3];

                // [[Categoria:Wikinotizie Bar - giugno 2010]]
                var template = '[[Categoria:Wikinotizie Bar - '
                    + mese + ' ' + anno + '| ' + giorno01 + ']]';

                return template;

            }
        }
        , categoriaBarMese : {
            // Categoria:Wikinotizie Bar - giugno 2010
            regex : /^Categoria:Wikinotizie_Bar_-_(\w+)_(\d\d\d\d)$/
            , summary : 'creazione categoria bar mese'
            , getText : function ( found ) {

                var mese = found[1].toLowerCase();
                var meseNum = this.util.meseConvertiStringaNumero( mese , 'mm1' );
                var anno = found[2];

                // [[Categoria:Wikinotizie Bar|*2010 06]]
                var template = '[[Categoria:Wikinotizie Bar|*'
                    + anno + ' ' + meseNum + ']]';

                return template;

            }
        }
    }
    , util : {
        getContent : function () {

            return document.getElementById( 'wpTextbox1' ).value;

        }
        , setContent : function ( text ) {

            document.getElementById( 'wpTextbox1' ).value = text;

            return this;

        }
        , setSummary : function ( summary ) {

            document.getElementById( 'wpSummary' ).value = summary;

            return this;

        }
        , save : function () {

            document.getElementById( 'wpSave' ).click();

            return this;

        }
        , meseConvertiStringaNumero : function ( mese , formato ) {
            /*
             *  se stringa
             *     converte i nomi dei mesi in numeri (0-11)
             *     restituisce -1 se non trova corrispondenza
             *  se numero
             *     converte da numero a nome, secondo le preferenze del sito
             *  se né numero né stringa
             *     restituisce null
             *  però, se è indicato 'formato',
             *     forza la restituzione del tipo corrispondente
             */

            // elenchi mesi
            var itListaMesi = new Array( 'Gennaio' , 'Febbraio' , 'Marzo' , 'Aprile' , 'Maggio' , 'Giugno' , 'Luglio' , 'Agosto' , 'Settembre' , 'Ottobre' , 'Novembre' , 'Dicembre' );
            var enListaMesi = new Array( 'January' , 'February' , 'March' , 'April' , 'May' , 'June' , 'July' , 'August' , 'September' , 'October' , 'November' , 'December' );

            //lingua di default
            var linguaDefault = 'it';

            //lingua per output testuale
            var lingua = linguaDefault;

            // registra il tipo dell'input
            var inputNumerico;

            // registra l'ordinale del mese
            var numeroMese;

            // registra il nome del mese
            var stringaMese;

            function stringaNumero( stringa ) {

                if ( typeof stringa === 'string' ) {
                    stringa = stringa.toLowerCase();
                    for ( let i = 0; i < 12; i ++ ) {

                        let en = enListaMesi[i].toLowerCase();
                        let it = itListaMesi[i].toLowerCase();
                        if (
                               stringa === it
                            || stringa === en
                            || stringa === it.substr( 0 , 3 )
                            || stringa === en.substr( 0 , 3 )
                            )
                        {
                            if (
                                stringa === it
                                || (
                                       stringa === it.substr( 0 , 3 )
                                    && stringa !== en.substr( 0 , 3 )
                                    )
                                )
                                lingua = 'it';
                            else if (
                                stringa === en
                                || (
                                       stringa === en.substr( 0 , 3 )
                                    && stringa !== it.substr( 0 , 3 )
                                    )
                                )
                                lingua = 'en';
                            else
                                lingua = linguaDefault;

                            return i;  // uscita con restituzione numero mese
                        }

                    }
                }

                return null;  // uscita per fallimento conversione

            }
            function numeroStringa( numero ) {

                var numeroMese = parseInt( numero );
                if (
                    typeof numeroMese === 'number'
                    && numeroMese >= 0
                    && numeroMese < 12
                    )
                    switch ( lingua ) {
                        case 'it':
                            return itListaMesi[numeroMese];
                        case 'en':
                            return enListaMesi[numeroMese];
                        default:
                            return itListaMesi[numeroMese];
                    }

                return null;

            }
            function formatoMese( formatoRichiesto ) {

                switch ( formatoRichiesto ) {
                    // formati numerici
                    case 'm':
                        return numeroMese;
                    case 'mm':
                        return ( '0' + numeroMese ).substr( - 2 , 2 );
                    case 'm1':
                        return 1 + numeroMese;
                    case 'mm1':
                        return ( '0' + ( 1 + numeroMese ) ).substr( - 2 , 2 );
                        // formati testuali
                    case 'Mese':
                        return stringaMese;
                    case 'MESE':
                        return stringaMese.toUpperCase();
                    case 'mese':
                        return stringaMese.toLowerCase();
                    case 'Mes':
                        return stringaMese.substr( 0 , 3 );
                    case 'mes':
                        return stringaMese.substr( 0 , 3 ).toLowerCase();
                    case 'MES':
                        return stringaMese.substr( 0 , 3 ).toUpperCase();
                    default:
                        return null;
                }

            }

            // prima prova la conversione  stringa >> numero
            var prova = stringaNumero( mese );
            if ( prova !== null ) { // gennaio = 0, quindi if (prova) fallirebbe
                inputNumerico = false;
                numeroMese = prova;
            }
            else {
                // poi prova la conversione  numero >> stringa
                prova = numeroStringa( mese );
                if ( prova ) {
                    inputNumerico = true;
                    numeroMese = parseInt( mese );
                }
            }

            stringaMese = numeroStringa( numeroMese );

            // se è indicato un formato
            if ( typeof ( formato ) === 'string' )
                return formatoMese( formato );
            else {
                // se, invece, non è indicato un formato
                if ( inputNumerico )
                    return stringaMese;
                else
                    return numeroMese;
            }

            // uscita per conversione fallita
            return null;

        }
        , altraData : function ( dataCorr , difGiorni , tipo ) {

            // restituisce la stringa per la data precedente o successiva

            var altra = new Date( dataCorr.getTime() + difGiorni * 86400000 );

            switch ( tipo ) {
                case 'giorno':
                    return (
                        altra.getDate()
                        + ' ' + this.meseConvertiStringaNumero( altra.getMonth() , 'mese' )
                        + ' ' + altra.getFullYear()
                    );
                case 'mese':
                    return (
                        this.meseConvertiStringaNumero( altra.getMonth() , 'mese' )
                        + ' ' + altra.getFullYear()
                    );
                case 'anno':
                    return altra.getFullYear();
                default:
                    break;
            }

            return null;

        }
    }
};
mw.libs.autoFillDatePages.init();
/* </nowiki> */