Aller au contenu

Utilisateur:Maloq/LTOS.js

Une page de Wikipédia, l'encyclopédie libre.
Note : après avoir enregistré la page, vous devrez forcer le rechargement complet du cache de votre navigateur pour voir les changements.

Mozilla / Firefox / Konqueror / Safari : maintenez la touche Majuscule (Shift) en cliquant sur le bouton Actualiser (Reload) ou pressez Maj-Ctrl-R (Cmd-R sur Apple Mac) ;

Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.
//Link To Other nameSpace

if(mw.config.get('wgUserName') == 'Maloq') 
{
	if (mw.config.get('wgTitle') == "Maloq/LTOS" && mw.config.get('wgAction') == "view")
	{
		//constante pour les messages
		var LTOS_END = 0
		var LTOS_START = 1
		var LTOS_EMPTY_LIST = 2
		var LTOS_DOMPARSER_FAILURE = 3
		
		var LTOS_CANT_EXTRACT_PAGENAME_FROM_HREF = 4
		
		var LTOS_list

		
		$(LTOS_launch);
	}
}

function LTOS_launch()
{
	var req=new XMLHttpRequest()
	
	document.getElementById('contentSub').style.whiteSpace='nowrap'
	
	req.onreadystatechange = function()
	{
		if(req.readyState == 4)
			if(req.status==200)
				LTOS_solve(req.responseText)
	}
	
	req.open("GET","/w/index.php?title=Special:CrossNamespaceLinks&limit=5000&offset=0", true) 
	req.send(null)
}


function LTOS_getAnchorPage(Page)
{
	var a = document.createElement('a')
	
	a.textContent = Page
	a.href = "/w/index.php?title=" + encodeURIComponent(Page) 
	
	return a
}

function LTOS_getAnchorPageEdit(Page)
{
	var a = document.createElement('a')
	
	a.textContent = "edit"
	a.href = "/w/index.php?title=" + encodeURIComponent(Page)  & "&action=edit"
	
	return a
}

function LTOS_newMessage(type, args)
{
	var div = document.getElementById('contentSub')
	
	switch(type)
	{
		case (LTOS_DOMPARSER_FAILURE):
		{
			div.appendChild(document.createTextNode('erreur lors du parsing de la page source'))
			break
		}
		case (LTOS_EMPTY_LIST):
		{
			div.appendChild(document.createTextNode('liste de double redirection vide'))
			break
		}
		case (LTOS_START):
		{
			div.appendChild(document.createTextNode('Job commencé:' + LTOS_list.length + " à traiter"))
			break
		}
		case (LTOS_END):
		{
			div.appendChild(document.createTextNode('Job fini!'))
			break
		}
		
		case (LTOS_CANT_EXTRACT_PAGENAME_FROM_HREF):
		{
			div.appendChild(document.createTextNode(args.i + ": href bizzare: "))
			div.appendChild(LTOS_getAnchorPage(args.anchor.cloneNode(true)))
			break
		}

		case (LTOS_SUCCESS):
		{
			div.appendChild(document.createTextNode(args.i + ": "))
			div.appendChild(LTOS_getAnchorPage(args.target))
			div.appendChild(document.createTextNode(" a un lien vers "))
			div.appendChild(LTOS_getAnchorPage("User:" + args.user))
			div.appendChild(document.createTextNode(" "))
			div.appendChild(LTOS_getAnchorPageEdit(args.target))
			break
			
			
		}
		
		default:
			div.appendChild(document.createTextNode("Unknow message type: " + type))
	}
	
	div.appendChild(document.createElement('br'))
	
	return false
}
	
	

function LTOS_solve(htmlPage)
{
	var parser = new DOMParser();
	var doc = parser.parseFromString(htmlPage, "text/xml");
	var div
	
	if(!doc) return LTOS_newMessage(LTOS_DOMPARSER_FAILURE) 
	
	div = doc.getElementById("bodyContent")
	LTOS_list = div.getElementsByTagName("ol")
	
	if(LTOS_list.length == 0) return LTOS_newMessage(LTOS_EMPTY_LIST)
	
	LTOS_list = LTOS_list[0].getElementsByTagName("li")
	
	LTOS_newMessage(LTOS_START)
	
	LTOS_solveNumber(0)
}


function LTOS_getPageFromHref(href)
{
	var reg = new RegExp(/\/wiki\/(.*)/)
	var match = reg.exec(href)
	
	if(match) return decodeURIComponent(match[1]).replace(/_/g, " ")
	
	return false
}

function LTOS_preIsUserSpaceLink(textcontent)
{	
	return (textcontent.indexOf("Utilisateur")!=-1)
}


function LTOS_solveNumber(i)
{
	if(i>=LTOS_list.length) return LTOS_newMessage(LTOS_END)
	
	var anchors = LTOS_list[i].getElementsByTagName("a")
	var data = new Object()
	var nexti = i+1
	
	if(anchors)
	{
		data.anchor = anchors[0]
		
		data.target = LTOS_getPageFromHref(data.anchor.href)
		
		data.i = i
		
		if(data.target != false) 
		{
			if(LTOS_preIsUserSpaceLink(LTOS_list[i].textContent))
				LTOS_getPage(data)
		}
		else
		{
			LTOS_newMessage(LTOS_CANT_EXTRACT_PAGENAME_FROM_HREF, data)
			setTimeout("LTOS_solveNumber(" + nexti + ")", 0)
		}
	}
}

function LTOS_getPage(data)
{
	var req=new XMLHttpRequest()
		
	req.data=data
	
	req.onreadystatechange = function()
	{
		if(req.readyState == 4)
			if(req.status==200)
			{
				req.data.text = req.responseText
				LTOS_compareData(req.data)
			}
	}
	
	req.open("GET","/w/index.php?title=" + encodeURIComponent(data.target) + "&action=raw", true)
	
	req.send(null)
}

function LTOS_getUserLinkInWikiCode(wikiCode)
{
	var reg = new RegExp(/\[\[(User|Utilisateur|user|utilisateur):([^\]]*)\]\]/)
	var match = reg.exec(wikiCode)
	
	if(match) return match[2]
	
	return false
}


function LTOS_compareData(data)
{
	var nexti = data.i+1
	data.user = LTOS_getUserLinkInWikiCode(data.text)
	
	if(data.user) LTOS_newMessage(LTOS_SUCCESS, data)
	LTOS_solveNumber(nexti)
	
}