Utente:Elcairo/Catwatch.js
Da Wikipedia, l'enciclopedia libera.
Per un aiuto sull'uso di questa pagina vedi Aiuto:Preferenze.
Nota: dopo aver salvato, devi pulire la cache del tuo browser per vedere i cambiamenti: Mozilla: clicca su reload (oppure ctrl-r), IE / Opera: ctrl-f5, Safari: cmd-r, Konqueror ctrl-r.
/*<noinclude> Grazie a questo tool e' possibile monitorare una lista di Categorie.<br/> Aggiunge elementi alla watchlist se una pagina viene aggiunta ad una categoria monitorata (ed e' ancora presente al momento del controllo). Questo evento apparira' solo se un'altra pagina della watchlist e' stata modificata quel giorno (se l'aggiunta e' l'unica cosa successa non apparira').<br/> La ricategorizzazione di una pagina appartenente ad una categoria osservata verra' segnalata anche se la modifica riguardava un'altra categoria (a meno che quella osservata venga cancellata).<br/> I cancellamenti dalla categoria controllata non verranno visualizzati.<br/> Le categorie contenenti piu' di 100 pagine non vengono gestite per problemi di sovraccarico dei server e ne sarete avvisati tramite popup.<br/> Se cercate di monitorare una categoria inesistente o vuota verrete avvisati tramite popup per poter correggere errori di battitura.<br/> L'ora delle modifiche si riferisce a quella dei server, potrebbe essere differente da quella locale.<br/> Per ogni pagina aggiunta verranno mostrati i seguenti link: *Alla relativa categoria *Alla pagina aggiunta *All'ultima modifica della pagina *Alla cronologia della pagina Per installare questo tool dovete aggiungere questa riga in fondo al vostro "monobook.js": '''<nowiki>{{subst:Utente:Elcairo/Catwatch.js}}</nowiki>''' Dopo aver adeguatamente purgato la cache andate sugli [[Speciale:Watchlist|Osservati Speciali]]. La prima volta apparira' un avviso che vi avvertira' della non esistenza della lista e vi aiutera' a crearne una (una vostra sottopagina utente). In questa pagina, oltre alla creazione della lista di categorie, se vorrete potrete scegliere di essere avvisati in caso di errore (categorie troppo grosse, vuote o inensistenti) o sopprimere gli avvisi. Un'altra dose di purga ed il gioco e' fatto. Ogni volta che modificherete la lista dovrete purgare la cache. Alcuni esempi di utilizzo li trovate qui: <gallery> Immagine:Catwatch-ListaCategorie.jpg|Risultato del lavoro Immagine:Catwatch-CategoriaGrande.jpg|La categoria e' troppo grande Immagine:Catwatch-CategoriaInesistente.jpg|La categoria e' vuota o non esiste Immagine:Catwatch-NoCategoria.jpg|Non scrivere "Categoria:" nella lista </gallery> Per questo tool i ringraziamenti vanno ad [[:en:User:ais523|ais523]] che per primo ha avuto l'idea, a [[Utente:Canderous|Canderous]], che con il suo lavoro sul fantastico [[Progetto:Guerre Stellari]] (pubblicita' occulta) non mi ha mai fatto mancare il materiale per i test, ed infine a [[Utente:Jalo|Jalo]] dal quale ho preso spunto. Anche per questa utility, se volete protestare per malfunzionamenti vari, potete farlo direttamente [[Discussioni utente:Elcairo|a casa mia]]. </noinclude><pre><nowiki>*/ //=== inizio: CATEGORY WATCH === var cwwpajax; // From [[WP:US]] mainpage (wpajax renamed to cwwpajax) cwwpajax={ download:function(bundle) { // mandatory: bundle.url // optional: bundle.onSuccess (xmlhttprequest, bundle) // optional: bundle.onFailure (xmlhttprequest, bundle) // optional: bundle.otherStuff OK too, passed to onSuccess and onFailure var x = window.XMLHttpRequest ? new XMLHttpRequest() : window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : false; if (x) { x.onreadystatechange=function() { x.readyState==4 && cwwpajax.downloadComplete(x,bundle); }; x.open("GET",bundle.url,true); x.send(null); } return x; }, downloadComplete:function(x,bundle) { x.status==200 && ( bundle.onSuccess && bundle.onSuccess(x,bundle) || true ) || ( bundle.onFailure && bundle.onFailure(x,bundle) || alert(x.statusText)); } }; //Aggiunge le catwatch alla watchlist //xmlreq=risultato della query (es:http://it.wikipedia.org/w/query.php?what=category&cptitle=Guerre%20Stellari&cplimit=100&cpextended&format=xml) //data=nome della categoria function cwOntoWatchlist(xmlreq, data) { var a=xmlreq.responseText; var c=data.catname; var i; if(a.indexOf("<error>")!=-1) //cat e' vuota, niente da fare qui { var inoltre; if (c.indexOf("Categoria:")!=-1) inoltre="Ti ricordo che non va inserita la parte \"Categoria:\""; else inoltre=""; if (showWarning.indexOf("disabilita")==-1) alert("La categoria \""+c+"\" sembra vuota.\nControlla se il nome e' scritto giusto.\n"+inoltre); return; } if(a.indexOf("<category next=")!=-1) //cat ha piu' di 100 elementi, i risultati verranno eliminati { if (showWarning.indexOf("disabilita")==-1) alert("La categoria \""+c+"\" ha piu' di 100 elementi e non puo' essere monitorata.\n"+ "Considera la possibilita' di dividerla in sottocategorie"); return; } a=a.split("<timestamp>"); var latesttime=0; var latestpage=""; var listaPagine=new Array(); var listaTime=new Array(); var temp, temp2; var counter=0; for(i in a) { temp=a[i].indexOf("</timestamp>"); if(temp!=-1) { temp=new Number(a[i].substr(0,temp)); if(temp>latesttime) { listaTime[counter]=temp; a[i]=a[i].substr(a[i].indexOf("<title>")+7); listaPagine[counter]=a[i].substr(0,a[i].indexOf("</title>")); counter++; } } } var dates=document.getElementsByTagName("h4"); //recupera le date dalla pagina della watchlist var monthname=new Array(); monthname['01']="gen"; monthname['02']="feb"; monthname['03']="mar"; monthname['04']="apr"; monthname['05']="mag"; monthname['06']="giu"; monthname['07']="lug"; monthname['08']="ago"; monthname['09']="set"; monthname['10']="ott"; monthname['11']="nov"; monthname['12']="dic"; i=dates.length; var totcycle=listaPagine.length; // numero delle pagine della Categoria corrente while(i--) // Per ogni giorno della lista { for (var loopTimes=0;loopTimes<totcycle;loopTimes++) // Per ogni pagina della lista { latestpage=listaPagine[loopTimes]; latesttime=listaTime[loopTimes]; latesttime=new String(latesttime); // es: temp=2006 dic 25 temp=""+new Number(latesttime.substr(6,2))+" "+monthname[latesttime.substr(4,2)]+" "+latesttime.substr(0,4); // se la data che stiamo esaminando corrisponde alla data della pagina if(dates[i].firstChild.nodeValue==temp) { temp=dates[i].nextSibling.firstChild; // Questo while dovrebbe inserire la modifica in ordine cronologico // tra le altre modifiche. Funzionava solo nella versione inglese e l'ho // lasciata qui perche', qualche anima pia, potrebbe in futuro correggerla while(temp!=null) { if(temp.tagName!=null) if(temp.tagName.toLowerCase()=="li") { temp2=temp.innerHTML.match(/; ([0-9][0-9]):([0-9][0-9]) \. \./); temp2=new Number(temp2[1])*100+new Number(temp2[2]); if(temp2<new Number(latesttime.substr(8,4))) {temp2=temp; break;} } temp2=temp; temp=temp.nextSibling; if(temp==null) break; } // l'elemento che andra' inserito temp3=document.createElement("li"); // se l'ordinamento aveva funzionato (ovvero mai) if (temp2!=null) { dates[i].nextSibling.insertBefore(temp3,temp2); } else { dates[i].appendChild(temp3); } // riempi l'item con i dati necessari temp3.innerHTML="<font size=-1>Modifiche in <a href='http://it.wikipedia.org/wiki/Categoria:"+encodeURI(c)+ "'>Categoria:"+c+"</a>; "+latesttime.substr(8,2)+":"+latesttime.substr(10,2)+" . . (+ "+ "<a href='http://it.wikipedia.org/wiki/"+encodeURI(latestpage)+"'>"+latestpage+"</a> "+ "(<a href='http://it.wikipedia.org/w/index.php?title="+encodeURI(latestpage)+ "&diff=last'>diff</a>) (<a href='http://it.wikipedia.org/w/index.php?title="+ encodeURI(latestpage)+"&action=history'>cron</a>))</font>"; } } } } var CategorieOsservate; //evita errori se ancora non esiste una cat-watchlist var showWarning; //evita errori se ancora non esiste una cat-watchlist //Un esempio di query per il controllo di una categoria potrebbe essere //http://it.wikipedia.org/w/query.php?what=category&cptitle=Guerre%20Stellari&cplimit=100&cpextended&format=xml addOnloadHook(function(){ // se siamo nella watchlist if(wgPageName=="Speciale:Watchlist") { if(CategorieOsservate==undefined) // se non e' mai stata creata la lista personale delle Categorie { if(confirm("Ancora non hai una lista di categorie da controllare. Vuoi crearne una?")) location.href='http://it.wikipedia.org/w/index.php?title=Utente:'+wgUserName+ '/CategorieOsservate.js&action=edit&preload=Utente:Jalo/CategorieOsservateTemplate.js'; } else // la lista gia' esiste { var i; for(i in CategorieOsservate) // Per ogni cateoria lancia il controllo { var a=CategorieOsservate[i]; cwwpajax.download({url:'http://it.wikipedia.org/w/query.php?what=category&cptitle='+encodeURI(a)+ '&cplimit=100&cpextended&format=xml', onSuccess:cwOntoWatchlist, catname:a}); } } } }); // aggiungi la watchlist delle categorie dell'utente document.write('<script type="text/javascript" src="http://it.wikipedia.org' + '/w/index.php?title=Utente:'+wgUserName+'/CategorieOsservate.js' + '&action=raw&ctype=text/javascript&dontcountme=s"></script>'); //=== fine: CATEGORY WATCH === /* </nowiki></pre> */