MediaWiki:Gadget-CatWatch.js
Questa pagina definisce alcuni parametri di aspetto e comportamento generale di tutte le pagine. Per personalizzarli vedi Aiuto:Stile utente.
Nota: dopo aver salvato è necessario pulire la cache del proprio browser per vedere i cambiamenti (per le pagine globali è comunque necessario attendere qualche minuto). Per Mozilla / Firefox / Safari: fare clic su Ricarica tenendo premuto il tasto delle maiuscole, oppure premere Ctrl-F5 o Ctrl-R (Command-R su Mac); per Chrome: premere Ctrl-Shift-R (Command-Shift-R su un Mac); per Konqueror: premere il pulsante Ricarica o il tasto F5; per Opera può essere necessario svuotare completamente la cache dal menù Strumenti → Preferenze; per Internet Explorer: mantenere premuto il tasto Ctrl mentre si preme il pulsante Aggiorna o premere Ctrl-F5.
/**
* Gadget-CatWatch.js
* Quando si visita [[Speciale:OsservatiSpeciali]] questo gadget vi aggiunge anche ogni voce
* a cui è stata inserita una delle categorie monitorate (non la rimozione).
*
* Il funzionamento si basa sull'utilizzo di [[mw:API:Categorymembers]]:
* quando l'utente visita [[Speciale:OsservatiSpeciali]] viene scaricata la lista di tutte le 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.
*
* Questa è una riscrittura da zero a partire dalla versione inizialmente scritta e ideata da [[:en:User:Ais523]]:
* http://it.wikipedia.org/w/index.php?title=Wikipedia:Monobook.js/Catwatch.js&oldid=52893797
*
* @author [[Utente:Rotpunkt]]
*/
(function (mw, $) {
'use strict';
// Massimo numero di pagine monitorate per categoria (max 500)
var maxPagesInCategory = 100;
// Configurazione utente
var userConfig = 'Utente:' + mw.config.get('wgUserName') + '/CategorieOsservate.js'
// Modello di configurazione
var configModel = 'Utente:Rotpunkt/Gadgets/Gadget-CatWatch.js/CategorieOsservateTemplate.js';
// Messaggio di aiuto per la prima attivazione
var msgHelp = '[Gadget-CatWatch] Non hai ancora una lista di categorie da controllare. Vuoi crearne una?';
// Ritorna la variabile CategorieOsservate nel CategorieOsservate.js dell'utente
function getUserConfig(categoryHandler) {
$.ajax({
url: mw.config.get('wgScript'),
data: {
title: userConfig,
action: 'raw',
ctype: 'text/javascript'
},
cache: false,
})
.done(function(data) {
try {
eval(data);
} catch(e) {
alert('[Gadget-CatWatch] Errore in ' + userConfig);
return;
}
if (typeof CategorieOsservate !== 'undefined') {
if (CategorieOsservate.length > 0)
categoryHandler(CategorieOsservate);
} else if (confirm(msgHelp))
document.___location = mw.config.get('wgScript') +
'?action=edit&title='+ userConfig +
'&preload=' + configModel;
});
}
// Ritorna la lista delle pagine in una categoria (in formato JSON)
function getCategoryPages(name, pageHandler) {
$.ajax({
url: mw.util.wikiScript('api'),
data: {
action: 'query',
list: 'categorymembers',
cmtitle: 'Categoria:' + name,
cmlimit: maxPagesInCategory,
cmprop: 'title|timestamp',
cmsort: 'timestamp',
cmdir: 'desc',
format: 'json'
}
})
.done(function (data) {
pageHandler(data.query.categorymembers);
});
}
// Parsifica un timestamp in date (1 gen 2001) e time (01:23)
function parseTimestamp(timestamp) {
var date, hours, minutes, months;
date = new Date(timestamp);
hours = date.getHours();
minutes = date.getMinutes();
months = [
'gen', 'feb', 'mar', 'apr', 'mag', 'giu',
'lug', 'aug', 'set', 'ott', 'nov', 'dec'
];
return {
date: date.getDate() + ' ' + months[date.getMonth()] + ' ' +
date.getFullYear(),
time: (hours < 10 ? '0' + hours : hours) + ':' +
(minutes < 10 ? '0' + minutes : minutes)
}
}
// Crea un nuovo elemento di OsservatiSpeciali
function createWatchlistEl(title, time, category) {
var url, urlcat, cron, cat, page, last, span;
url = mw.config.get('wgScript') + '?title=' + title;
urlcat = mw.config.get('wgArticlePath').replace('$1', 'Categoria:' + category);
cron = $('<a>').attr('href', url + '&action=history').text('cron');
cat = $('<a>').attr('href', urlcat).text('Categoria:' + category);
page = $('<a>').attr('href', mw.config.get('wgArticlePath').replace('$1', title)).text(title);
last = $('<a>').attr('href', url + '&diff=last').text('last');
span = $('<span>').css('font-weight', 'bold')
.append('(diff) (', ')');
//.append('(diff) (', cron, ') . . ', cat, '; ', time,
// ' . . (+ ', page, ' (', last, '))');
return $('<li>').append(span);
}
// Parsifica l'elenco di pagine di OsservatiSpeciali
function parseWatchlistDOM() {
var ret = {};
// ogni giorno è un <ul class='special'>
$('ul.special').each(function () {
// la data è nell'<h4> precedente l'ul.special
var date = $(this).prev().text();
ret[date] = [];
// la pagina di ogni giorno è un <li>
$(this).find('li').each(function () {
ret[date].push({
time: $(this).find('span.mw-changeslist-date').text(),
el: $(this)
});
});
});
return ret;
}
// Aggiunge una pagina ad OsservatiSpeciali, se quel giorno è visualizzato
function watchlistAdd(watchlist, page, category) {
var ts = parseTimestamp(page.timestamp);
$.each(watchlist[ts.date], function(i, entry) {
if (entry.time < ts.time) {
var el = createWatchlistEl(page.title, ts.time, category);
entry.el.before(el);
// aggiorna l'array
watchlist[ts.date].splice(i, 0, el);
return false;
}
});
}
$(document).ready(function () {
// Se la pagina corrente è Speciale:OsservatiSpeciali
if (mw.config.get('wgPageName') == 'Speciale:OsservatiSpeciali') {
// scarica la lista delle categorie da monitorare.
getUserConfig(function (categories) {
// Parsifica OsservatiSpeciali.
var watchlist = parseWatchlistDOM();
// Per ogni categoria da monitorare
$.each(categories, function (i, category) {
// scarica la lista delle pagine in quella categoria.
getCategoryPages(category, function (categorymembers) {
// Per ogni pagina nella categoria monitorata
$.each(categorymembers, function (i, page) {
// aggiunge la pagina a OsservatiSpeciali.
watchlistAdd(watchlist, page, category);
});
});
});
});
}
});
}(mediaWiki, jQuery));