Utilizador:Dixtosa/catwatch.js

Origem: Wikcionário, o dicionário livre.
Nota: Após salvar, você terá de limpar a cache do seu navegador para ver as alterações:
  • Internet Explorer: Mantenha pressionada a tecla Ctrl e aperte F5; ou mantenha pressionada a tecla Ctrl e clique no botão "Recarregar" (Reload)
  • Firefox e SeaMonkey: Mantenha pressionada a tecla Shift ⇧ e clique no botão "Recarregar" (Reload ou Atualizar) ou mantenha pressionada a tecla Ctrl e aperte F5; ou mantenha pressionada as teclas Ctrl, Shift ⇧ e R (Command ⌘, Shift ⌥ e R em Macintosh)
  • Safari e Konqueror: Clique no botão "Recarregar" (Reload)
  • Opera: É necessário limpar manualmente a cache no menu "Ferramentas"→"Preferências"→"Avançadas"→"Histórico" e clicar no botão "Esvaziar Já"
  • Chrome: É necessário limpar manualmente a cache no botão "Ferramentas"→"Limpar dados de navegação", selecione "Esvaziar o cache" e clicar no botão "Limpar dados de navegação"
/* Category watch ([[User:ais523/catwatch.js]]); adds entries on the watchlist if a page is
added to a category (and is still in the category when the watchlist is checked). The entry
will only appear if there is another page on the watchlist edited that day (if the addition
was the only change on that day, it's neglected). The recategorisation of a page in a watched
category will also trigger the watching, even if it's a different category that's added or
removed (unless the watched category is removed); removals from the watched category can't
be detected.

A previous version of this script had a limit on the maximum size of a category that could be
watched; this limit no longer exists.

Thanks to [[User:TheDJ]] for helping me make this compatible with more browsers and preference
settings, and to Roan Kattouw for fixing [[bugzilla:11275]] and making this cheap on the servers.

Note that some users have had problems installing this in Internet Explorer; if the second cachea
bypass (after changing the category watchlist) doesn't work, deleting all your temporary
Internet files seems to.
*/

//<source lang="javascript">

var cwwpajax;
var KEYWORD = "<span style = 'color:red;'>[CATWATCH]</span>";
// From [[WP:US]] mainpage (wpajax renamed to cwwpajax)
cwwpajax={
		download:function(bundle) {
				// mandatory: bundle.url
				// mandatory: bundle.async
				// 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() // Firefox, Safari, Opera, IE7
				: window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") // IE6
				: false;

				if (x) {
						x.onreadystatechange=function() {
								x.readyState==4 && cwwpajax.downloadComplete(x,bundle);
						};
						x.open("GET",bundle.url,bundle.async);
						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));
		}
};

// Example:
// function dlComplete(xmlreq, data) {
//      alert(data.message + xmlreq.responseText);
// }
//  cwwpajax.download({url:'http://en.wikipedia.org/w/index.php?title=Thresher&action=raw',
//                   onSuccess: dlComplete, message: "Here's what we got:\n\n" });

// End of [[WP:US]] quote

function cwOntoWatchlist(xmlreq, data)
{
var a=xmlreq.responseText;
var c=data.catname;
var i;
var diag="";
if(a.indexOf("<categorymembers/>")!=-1) return; //cat is empty, nothing to do here
if(a.indexOf('title="')==-1) return; // this error happens sometimes, just do nothing here
var latesttime=0;
var latestpage="";
var temp, temp2;
latestpage=a.split('title="')[1].split('" timestamp=')[0];

latesttime=a.split('timestamp="')[1].split('"')[0];//VERY sloppy
//ATTENTION this has to be changed! xD
console.log(latesttime);
latesttime = new Date(latesttime);
latesttime.setHours(latesttime.getHours());
latesttime = latesttime.toISOString();
console.log(latesttime);

a=document.getElementsByTagName("h4"); //get dates in the watchlist
var monthname=[];
monthname['01']="January";
monthname['02']="February";
monthname['03']="March";
monthname['04']="April";
monthname['05']="May";
monthname['06']="June";
monthname['07']="July";
monthname['08']="August";
monthname['09']="September";
monthname['10']="October";
monthname['11']="November";
monthname['12']="December";
latesttime=new String(latesttime);

var mn1, mn2, mn3, mn4;

// Allow for different date styles:
// January 29, 2001
mn1=""+monthname[latesttime.substr(5,2)]+" "+new Number(latesttime.substr(8,2))+
	", "+latesttime.substr(0,4);
// 29 January 2001
mn2=""+new Number(latesttime.substr(8,2))+" "+monthname[latesttime.substr(5,2)]+
	" "+latesttime.substr(0,4);
// 2001 January 29
mn3=""+latesttime.substr(0,4)+" "+monthname[latesttime.substr(5,2)]+
	" "+new Number(latesttime.substr(8,2));
// 2001-01-29
mn4=""+latesttime.substr(0,4)+"-"+latesttime.substr(5,2)+"-"+latesttime.substr(8,2);

i=a.length;
while(i--)
{
	if(a[i].innerHTML==mn1||a[i].innerHTML==mn2||a[i].innerHTML==mn3||a[i].innerHTML==mn4)
	{
	diag+=a[i].innerHTML+":";
	temp=a[i].nextSibling.firstChild;
	if(temp === null) temp=a[i].nextSibling.nextSibling.firstChild;
	while(temp !== null)
	{
		diag += temp.tagname + "!";
		if(temp.tagName)
			if(temp.tagName.toLowerCase() == "li" && temp.innerHTML.substr(0, KEYWORD.length) != KEYWORD)
			{
			temp2=temp.innerHTML.match(/<span class="mw-changeslist-date">([0-9][0-9]):([0-9][0-9])(:[0-9][0-9])?<\/span>/i);
			temp2=new Number(temp2[1])*100+new Number(temp2[2]);
			diag+=temp2+",";
			if(temp2<new Number(latesttime.substr(11,2)+latesttime.substr(14,2))) {temp2=temp; break;}
			}
		temp2=temp; temp=temp.nextSibling;
		if (temp === null) break;
	}
	temp=document.createElement("li");
	if (temp2 === null) return;
	if(a[i].nextSibling.firstChild!==null) // IE-like whitespace handling
		a[i].nextSibling.insertBefore(temp,temp2);
	else // Firefox-like whitespace handling
		a[i].nextSibling.nextSibling.insertBefore(temp,temp2);

	temp.innerHTML = KEYWORD + " (diff | hist) . . <a "+
					"href='"+mw.config.get('wgScriptPath')+"/index.php?title=Categoria:"+
					encodeURI(c)+
					"'>Categoria:"+c+"</a>; "+latesttime.substr(11,2)+":"+latesttime.substr(14,2)+
					" . . (+ <a "+
					"href='"+mw.config.get('wgScriptPath')+'/index.php?title='+
					encodeURI(latestpage)+"'>"+latestpage+"</a> "+
					"(<a href='"+mw.config.get('wgScriptPath')+"/index.php?title="+encodeURI(latestpage)+
					"&diff=last'>last</a>))";
	return;
	}
}
}

var WatchedCategories;

//An example of a query to check a category would be

//http://en.wikipedia.org/w/api.php?action=query&list=categorymembers&cmcategory=Wikipedia%20protected%20edit%20requests&cmlimit=1&cmprop=title|timestamp&cmsort=timestamp&cmdir=desc&format=xml
$(function(){
var scriptPath = mw.config.get('wgScriptPath');
//DHTMLloadscript( 'http://en.wikipedia.org/w/index.php?title=User:'+wgUserName
//  +'/WatchedCategories.js&action=raw&ctype=text/javascript');
if(mw.config.get('wgPageName') == "Especial:Páginas_vigiadas")
{
	// load the script using AJAX, because DHTML fails in Firefox and document.write fails in Safari
	var sru=scriptPath+'/index.php?title=User:'+mw.config.get('wgUserName')+'/WatchedCategories.js&action=raw&ctype=text/javascript';
	var sr=cwwpajax.download({url:sru,async:false});
	eval(sr.responseText);
	if(WatchedCategories===undefined)
	{
		if(confirm("You don't have a category watchlist yet. Do you want to create one?\n\n"+
				"(Please provide the following debug information when reporting a problem if "+
				"this message comes up when you already have a category watchlist: "+
				(sr.responseText.length<50 ? "responseText='"+sr.responseText+"'" :
				"responseText.length="+sr.responseText.length)+", statusText='"+sr.statusText
				+"'.)"))
		location.href=scriptPath+'/index.php?title=User:'+wgUserName+
		'/WatchedCategories.js&action=edit&preload=User:Ais523/WatchedCategoriesTemplate.js';
	}
	else
	{
	var i;
	for(i=0; i<WatchedCategories.length; i++)
	{
		var a=WatchedCategories[i];
		cwwpajax.download({url:scriptPath+'/api.php?action=query&list=categorymembers&'
						+'cmtitle=Categoria:'+encodeURI(a)+'&cmlimit=1&cmprop=title'
						+'|timestamp&cmsort=timestamp&cmdir=desc&format=xml',
						onSuccess:cwOntoWatchlist,
						catname:a, async:true});
	}
	}
}
});