MediaWiki:Gadget-CatWatch.js: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m spazi
Maintenance: Remove use of internal wgMonthNamesShort data. phab:T219340
 
(2 versioni intermedie di 2 utenti non mostrate)
Riga 5:
*
* Il funzionamento si basa sull'utilizzo di [[mw:API:Categorymembers]]:
* quando l'utente visita [[Speciale:OsservatiSpeciali]] vienelo scaricatascript ottiene la lista di tutte ledelle pagine
* che si trovano in quel momento nelle categorie monitorate. Ogni pagina, se la data di categorizzazione
* è presente in OsservatiSpeciali, viene allora aggiunta a quelle già presenti in OsservatiSpeciali.
*
* RiscrittoRiscrittura da zero a partire dadi:
* http://it.wikipedia.org/w/index.php?title=Wikipedia:Monobook.js/Catwatch.js&oldid=52893797
* che a sua volta lo importava da:
* http://en.wikipedia.org/w/index.php?title=User:Ais523/catwatch.js&oldid=216824057
*
* @author [[https://it:User.wikipedia.org/wiki/Utente:Rotpunkt]]
*/
/*jshint unused:global falsemediaWiki, evil: truejQuery */
/*global mediaWiki, jQuery */
 
( function ( mw, $ ) {
Line 24 ⟶ 23:
var i18n = {
en : {
errorEval: 'Error evaluating',
errorGet: 'Error retrieving',
msgConfig: 'Category watchlist not found. Do you want to create a new one?',
monthNames: [ "", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ],
monthNames: 'wgMonthNames',
category: 'Category'
},
it : {
errorEval: 'Errore in',
errorGet: 'Errore nel leggere',
msgConfig: 'Non hai ancora una lista di categorie da controllare. Vuoi crearne una?',
monthNames: ["","gen","feb","mar","apr","mag","giu","lug","ago","set","ott","nov","dic"],
monthNames: 'wgMonthNamesShort',
category: 'Categoria'
}
},;
// Massimo numero di pagine monitorate per categoria (max configurabile 500)
var maxPagesInCategory = 100,;
// Configurazione utente
var userConfig = 'User:' + mw.config.get( 'wgUserName' ) + '/CategorieOsservate.js',;
// Modello di configurazione
var configModel = 'MediaWiki:Gadget-CatWatch.js/CategorieOsservateTemplate.js';
 
/**
* Restituisce il messaggio con un certo identificativo, in una delle lingue supportate.
*
* @param {string} key - L'identificativo del messaggio
* @return {string} Il messaggio nella lingua configurata
*/
function msg( key ) {
var msgs = i18n[ mw.config.get( 'wgUserLanguage' ) ] || i18n.en;
return msgs[ key ];
}
 
/**
// Ritorna la variabile CategorieOsservate nel CategorieOsservate.js dell'utente
* Ottiene la variabile CategorieOsservate nel CategorieOsservate.js dell'utente.
*
* @param {function} categoryHandler - La funzione da richiamare con il risultato
*/
function getUserConfig( categoryHandler ) {
$.ajax( {
Line 63 ⟶ 70:
} )
.done( function ( data ) {
try {
eval( data );
} catch ( e ) {
alert( '[CatWatch] ' + msg( 'errorEval' ) + ' ' + userConfig );
return;
}
if ( window.CategorieOsservate !== undefined ) {
if ( window.CategorieOsservate.length > 0 ) {
Line 87 ⟶ 88:
}
 
/**
// Ritorna la lista delle pagine in una categoria (in formato JSON)
* Ottiene la lista di pagine in una categoria.
*
* @param {string} name - Nome della categoria
* @param {string} end - Data di fine
* @param {function} pageHandler - La funzione da richiamare con il risultato
*/
function getCategoryPages( name, end, pageHandler ) {
$new mw.ajaxApi().get( {
action: 'query',
url: mw.util.wikiScript( 'api' ),
list: 'categorymembers',
data: {
actioncmtitle: 'queryCategory:' + name,
cmlimit: maxPagesInCategory,
list: 'categorymembers',
cmtitlecmprop: 'Category:title|timestamp' + name,
cmsort: 'timestamp',
cmlimit: maxPagesInCategory,
cmpropcmdir: 'title|timestampdesc',
cmsortcmend: 'timestamp'end,
cmdirformat: 'descjson',
} ).done( function ( data ) {
cmend: end,
pageHandler( data.query.categorymembers );
format: 'json'
}, );
}
dataType: 'json'
 
} )
/**
.done( function ( data ) {
* Funzione di utilità per parseWatchlistDOM, crea un timestamp
pageHandler( data.query.categorymembers );
* a partire da una data nel formato di OsservatiSpeciali, es. 1 gen 2012.
*
* @param {string} text - Data nel formato di OsservatiSpeciali
* @return {string} Il timestamp risultante
*/
function makeTimestamp( text ) {
var months, month, date = text.split( ' ' );
months = msg( 'monthNames' );
month = months.indexOf( date[ 1 ] );
return month !== -1 ? ( date[ 2 ] + '-' + padleft0( month ) + '-' + padleft0( parseInt( date[ 0 ], 10 ) ) + 'T00:00:00Z' ) : null;
}
 
/**
* Parsifica l'elenco di pagine di OsservatiSpeciali in un object con
* - chiavi: le date presenti nella pagina
* - valori: un object contenente l'ora e l'elemento jQuery per quella riga
*
* @return {object} Object che contiene le pagine in OS, suddivise per data e ora
*/
function parseWatchlistDOM() {
var date, ret = {};
// ogni giorno è un <h4>
$( 'h4' ).each( function () {
date = $( this ).text();
ret[ date ] = [];
// la pagina di ogni giorno è un <li> in un <ul class='special'>
$( this ).next( 'ul.special' ).find( 'li' ).each( function () {
ret[date].push( {
time: $( this ).find( 'span.mw-changeslist-date' ).text(),
el: $( this )
} );
} );
// retrocompatibilità con il vecchio CatWatch: con la vista raggruppata
// visualizzava le pagine del CatWatch al fondo del giorno
if ( ret[ date ].length === 0 ) {
ret[ date ].push( {
time: '23:59',
el: $( this ).next( 'div' ).find( 'table:last-child()' )
} );
}
} );
ret.oldestDate = date ? makeTimestamp( date ) : null;
 
return ret;
}
 
/**
* Formatta un numero con uno zero iniziale se minore di 10.
*
* @param {string} num - Il numero da formattare
* @return {string} La stringa risultante
*/
function padleft0( num ) {
return ( num < 10 ? '0' : '' ) + num;
}
 
/**
// Parsifica un timestamp in date (1 gen 2001) e time (01:23)
* Funzione di utilità per watchlistAdd, parsifica un timestamp in date (1 gen 2001) e time (01:23).
*
* @param {string} timestamp - Timestamp da parsificare
* @return {object} Oggetto con date e time parsificati separatamente
*/
function parseTimestamp( timestamp ) {
var date, hours, minutes, months;
Line 120 ⟶ 181:
hours = date.getHours();
minutes = date.getMinutes();
months = mw.config.get( msg( 'monthNames' ) );
return {
date: date.getDate() + ' ' + months[ date.getMonth() + 1 ] + ' ' +
date.getFullYear(),
time: padleft0( hours ) + ':' + padleft0( minutes )
Line 128 ⟶ 189:
}
 
/**
function makeTimestamp( text ) {
* Funzione di utilità per watchlistAdd, crea un nuovo elemento di OsservatiSpeciali.
var months, month, date = text.split( ' ' );
*
months = mw.config.get( msg( 'monthNames' ) );
* @param {string} title - Nome della pagina
month = months.indexOf( date[1] );
* @param {string} time - Ora di categorizzazione
return month !== -1 ? ( date[2] + '-' + padleft0( month ) + '-' + padleft0( parseInt( date[0], 10 ) ) + 'T00:00:00Z' ) : null;
* @param {string} category - Nome categoria
}
* @return {jQuery} L'elemento jQuery da aggiungere alla pagina
 
*/
// Crea un nuovo elemento di OsservatiSpeciali
function createWatchlistEl( title, time, category ) {
var url, urlcat, $cron, $cat, $page, $last;
Line 151 ⟶ 212:
}
 
/**
// Parsifica l'elenco di pagine di OsservatiSpeciali
* Aggiunge una pagina ad OsservatiSpeciali, se quel giorno è visualizzato.
function parseWatchlistDOM() {
*
var date, ret = {};
* @param {Object} watchlist - Gli OsservatiSpeciali come parsificati da parseWatchlistDOM
// ogni giorno è un <h4>
* @param {string} page - La pagina da aggiungere agli OS
$( 'h4' ).each( function () {
* @param {string} category - La categoria in cui quella pagina è stata categorizzata
date = $( this ).text();
*/
ret[date] = [];
// la pagina di ogni giorno è un <li> in un <ul class='special'>
$( this ).next( 'ul.special' ).find( 'li' ).each( function () {
ret[date].push( {
time: $( this ).find( 'span.mw-changeslist-date' ).text(),
el: $( this )
} );
} );
// retrocompatibilità con il vecchio CatWatch: con la vista raggruppata
// visualizzava le pagine del CatWatch al fondo del giorno
if ( ret[date].length === 0 ) {
ret[date].push( {
time: '23:59',
el: $( this ).next( 'div' ).find( 'table:last-child()' )
} );
}
} );
ret.oldestDate = date ? makeTimestamp( date ) : null;
 
return ret;
}
 
// Aggiunge una pagina ad OsservatiSpeciali, se quel giorno è visualizzato
function watchlistAdd( watchlist, page, category ) {
var ts, el, daypages, prepended = false;
 
ts = parseTimestamp( page.timestamp );
daypages = watchlist[ ts.date ];
if ( daypages ) {
el = createWatchlistEl( page.title, ts.time, category );
Line 197 ⟶ 236:
} );
if ( !prepended ) {
daypages[ daypages.length - 1 ].el.after( el );
daypages.push( { time: ts.time, el: el } );
}
Line 206 ⟶ 245:
// Se la pagina corrente è Speciale:OsservatiSpeciali
if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Watchlist' ) {
mw.loader.using( [ 'mediawiki.api', 'mediawiki.util' ] )
// scarica la lista delle categorie da monitorare.
getUserConfig .done( function ( categories ) {
// ottiene la lista delle categorie da monitorare.
// Parsifica OsservatiSpeciali.
getUserConfig( function ( categories ) {
var watchlist = parseWatchlistDOM();
// Parsifica OsservatiSpeciali.
// Per ogni categoria da monitorare
var watchlist = parseWatchlistDOM();
$.each( categories, function ( i, category ) {
// Per ogni categoria da monitorare
// scarica la lista delle pagine in quella categoria.
getCategoryPages $.each( category, watchlist.oldestDatecategories, function ( categorymembersi, category ) {
// Perottiene ognila paginalista nelladelle categoriapagine monitoratain quella categoria.
$.each getCategoryPages( categorymemberscategory, watchlist.oldestDate, function ( i, pagecategorymembers ) {
// aggiungePer laogni pagina anella OsservatiSpeciali.categoria monitorata
watchlistAdd $.each( watchlistcategorymembers, pagefunction ( i, categorypage ); {
// aggiunge la pagina a OsservatiSpeciali.
watchlistAdd( watchlist, page, category );
} );
} );
} );
} );
} )
.fail( function () {
console.error( 'Impossibile avviare l\'accessorio CatWatch.' );
} );
} );
}
} );