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> */