Utilisateur:Stef48/DR.js

Un article de Wikipédia, l'encyclopédie libre.

Note : Après avoir publié la page, vous devrez forcer son rechargement pour voir les changements : Mozilla / Konqueror / Firefox : Shift-Ctrl-R, Internet Explorer / Opera : Ctrl-F5, Safari : Cmd-R.

if(wgUserName == 'Stef48') 
{
	if (wgTitle == "Stef48/DR" && wgAction == "view")
	{
		//constante pour les messages
		var DR_END = 0
		var DR_START = 1
		var DR_EMPTY_LIST = 2
		var DR_DOMPARSER_FAILURE = 3
		var DR_USERPAGE = 4
		var DR_CANT_EXTRACT_PAGENAME_FROM_HREF = 5
		var DR_FAILURE_P1_NOT_REDIRECT = 6
		var DR_FAILURE_P2_NOT_REDIRECT = 7
		var DR_FAILURE_PI_DOESNT_POINT_P2 = 8
		var DR_SUCCESS = 9
		var DR_DONT_FIND_TWO_ANCHORS = 10
 
		var DR_list
 
 
		addLoadEvent(DR_launch)
	}
 
}
 
 
function DR_launch()
{
	var req=new XMLHttpRequest()
 
	document.getElementById('contentSub').style.whiteSpace='nowrap'
 
	req.onreadystatechange = function()
	{
		if(req.readyState == 4)
			if(req.status==200)
				DR_solve(req.responseText)
	}
 
	req.open("GET","/w/index.php?title=Special:DoubleRedirects&limit=5000&offset=0", true)
	req.send(null)
}
 
function DR_getAnchorPage(Page)
{
	var a = document.createElement('a')
 
	a.textContent = Page
	a.href = "/w/index.php?title=" + encodeURIComponent(Page) 
 
	return a
}
 
 
function DR_getAnchorPageDiff(Page)
{
	var a = document.createElement('a')
 
	a.textContent = "(diff)"
	a.href = "/w/index.php?title=" + encodeURIComponent(Page) + "&diff=cur&oldid=prev"
 
	return a
}
 
function DR_getAnchorPageNoRedirect(Page)
{
	var a = document.createElement('a')
 
	a.textContent = "(nr)"
	a.href = "/w/index.php?title=" + encodeURIComponent(Page) + "&redirect=no"
 
	return a
}
 
function DR_newMessage(type, args)
{
	var div = document.getElementById('contentSub')
 
	switch(type)
	{
		case (DR_DOMPARSER_FAILURE):
		{
			div.appendChild(document.createTextNode('erreur lors du parsing de la page de redirection'))
			break
		}
		case (DR_EMPTY_LIST):
		{
			div.appendChild(document.createTextNode('liste de double redirection vide'))
			break
		}
		case (DR_START):
		{
			div.appendChild(document.createTextNode('Job commencé:' + DR_list.length + " à traiter"))
			break
		}
		case (DR_END):
		{
			div.appendChild(document.createTextNode('Job fini!'))
			break
		}
		case (DR_USERPAGE):
		{
			div.appendChild(document.createTextNode(args.i + ": La page à modifier est une page utilisateur: "))
			div.appendChild(DR_getAnchorPage(args.target1))
			div.appendChild(DR_getAnchorPageNoRedirect(args.target1))
			break
		}
		case (DR_CANT_EXTRACT_PAGENAME_FROM_HREF):
		{
			div.appendChild(document.createTextNode(args.i + ": href bizzare: "))
			div.appendChild(DR_getAnchorPage(args.anchor1.cloneNode(true)))
			div.appendChild(document.createTextNode(" et "))
			div.appendChild(DR_getAnchorPageNoRedirect(args.anchor2.cloneNode(true)))
			break
		}
 
		case (DR_FAILURE_P1_NOT_REDIRECT):
		{
			div.appendChild(document.createTextNode(args.i + ": La page à modifier n'est pas une redirection: "))
			div.appendChild(DR_getAnchorPage(args.target1))
			div.appendChild(DR_getAnchorPageNoRedirect(args.target1))
			div.appendChild(document.createTextNode(" text:" + args.text1))
 
			break
		}
		case (DR_FAILURE_P2_NOT_REDIRECT):
		{
			div.appendChild(document.createTextNode(args.i + ": La page pointée n'est pas une redirection: "))
			div.appendChild(DR_getAnchorPage(args.target2))
			div.appendChild(DR_getAnchorPageNoRedirect(args.target2))
			div.appendChild(document.createTextNode(" text:" + args.text2))
			break
		}
 
		case (DR_FAILURE_PI_DOESNT_POINT_P2):
		{
			div.appendChild(document.createTextNode(args.i + ": La page à modifier "))
			div.appendChild(DR_getAnchorPage(args.target1))
			div.appendChild(DR_getAnchorPageNoRedirect(args.target1))
			div.appendChild(document.createTextNode(" pointe sur "))
			div.appendChild(DR_getAnchorPage(args.page1Target))
			div.appendChild(DR_getAnchorPageNoRedirect(args.page1Target))
			div.appendChild(document.createTextNode(" et non sur "))
			div.appendChild(DR_getAnchorPage(args.target2))
			div.appendChild(DR_getAnchorPageNoRedirect(args.target2))
			break
		}
 
		case (DR_DONT_FIND_TWO_ANCHORS):
		{
			div.appendChild(document.createTextNode(args.i + ": "))
			div.appendChild(document.createTextNode(" ligne non valide: "))
			div.innerHTML = div.innerHTML + args.initialLine.innerHTML
			break;
 
		}
 
		case (DR_SUCCESS):
		{
			div.appendChild(document.createTextNode(args.i + ": "))
			div.appendChild(DR_getAnchorPage(args.target1))
			div.appendChild(DR_getAnchorPageNoRedirect(args.target1))
			div.appendChild(document.createTextNode(" pointe vers "))
			div.appendChild(DR_getAnchorPage(args.target2))
			div.appendChild(DR_getAnchorPageNoRedirect(args.target2))
			div.appendChild(document.createTextNode(" qui pointe vers "))
			div.appendChild(DR_getAnchorPage(args.page2Target))
			div.appendChild(DR_getAnchorPageNoRedirect(args.page2Target))
 
			div.appendChild(document.createTextNode("corrigé:"))
			div.appendChild(DR_getAnchorPageDiff(args.target1))
			break
		}
 
		default:
			div.appendChild(document.createTextNode("Unknow message type: " + type))
	}
 
	div.appendChild(document.createElement('br'))
 
	return false
}
 
 
 
function DR_solve(htmlPage)
{
	var parser = new DOMParser();
	var doc = parser.parseFromString(htmlPage, "text/xml");
	var div
 
	if(!doc) return DR_newMessage(DR_DOMPARSER_FAILURE) 
 
	div = doc.getElementById("bodyContent")
	DR_list = div.getElementsByTagName("ol")
 
	if(DR_list.length == 0) return DR_newMessage(DR_EMPTY_LIST)
 
	DR_list = DR_list[0].getElementsByTagName("li")
 
	DR_newMessage(DR_START)
 
	DR_solveNumber(0)
}
 
function DR_getPageFromHref(href)
{
	var reg = new RegExp(/\/w\/index.php\?title=([^&]+)&redirect=no/)
	var match = reg.exec(href)
 
	if(match) return decodeURIComponent(match[1]).replace(/_/g, " ")
 
	return false
}
 
function DR_solveNumber(i)
{
	if(i>=DR_list.length) return DR_newMessage(DR_END)
 
	var anchors = DR_list[i].getElementsByTagName("a")
	var data = new Object()
	var nexti = i+1
 
	if(anchors)
	{
		data.initialLine = DR_list[i]
		data.anchor1 = anchors[0]
		data.anchor2 = anchors[2]
		data.i = i
 
		if(anchors[0] && anchors[2])
		{
			data.target1 = DR_getPageFromHref(data.anchor1.href)
			data.target2 = DR_getPageFromHref(data.anchor2.href)
 
 
			if(data.target1 != false && data.target2 != false) 
			{
				if(data.target1.indexOf("Utilisateur:") == -1) 
					DR_solveRedirection(data)
				else
				{
					DR_newMessage(DR_USERPAGE, data)
					setTimeout("DR_solveNumber(" + nexti + ")", 0)
				}
 
			}
			else
			{
				DR_newMessage(DR_CANT_EXTRACT_PAGENAME_FROM_HREF, data)
				setTimeout("DR_solveNumber(" + nexti + ")", 0)
			}
		}
		else
		{
			DR_newMessage(DR_DONT_FIND_TWO_ANCHORS, data)
			setTimeout("DR_solveNumber(" + nexti + ")", 0)
		}
	}
}
 
 
function DR_solveRedirection(data)
{
	var req1=new XMLHttpRequest()
	var req2=new XMLHttpRequest()
 
	data.text1 = false
	data.text2 = false
 
	req1.data=data
	req2.data=data
 
	req1.onreadystatechange = function()
	{
		if(req1.readyState == 4)
			if(req1.status==200)
			{
				req1.data.text1 = req1.responseText
				if(req1.data.text2 != false) DR_compareData(req1.data)
			}
	}
 
	req2.onreadystatechange = function()
	{
		if(req2.readyState == 4)
			if(req2.status==200)
			{
				req2.data.text2 = req2.responseText
				if(req2.data.text1 != false) DR_compareData(req2.data)
			}
	}
 
	req1.open("GET","/w/index.php?title=" + encodeURIComponent(data.target1) + "&action=raw", true)
	req2.open("GET","/w/index.php?title=" + encodeURIComponent(data.target2) + "&action=raw", true)
 
	req1.send(null)
	req2.send(null)
}
 
function DR_getPageFromRedirection(redir)
{
	var reg = new RegExp(/#(REDIRECT|Redirect|redirect)[ ]?\[\[([^\]]+)\]\]/)
	var match = reg.exec(redir)
 
	if(match) return decodeURIComponent(match[2]).replace(/_/g, " ")
 
	return false
}
 
function DR_compareData(data)
{
	var nexti = data.i+1
 
	data.page2Target = DR_getPageFromRedirection(data.text2)
	data.page1Target = DR_getPageFromRedirection(data.text1)
 
	if(data.page1Target == false)
	{
		setTimeout("DR_solveNumber(" + nexti + ")", 0)
		return DR_newMessage(DR_FAILURE_P1_NOT_REDIRECT, data) 
	}
 
	if(data.page2Target == false)
	{
		setTimeout("DR_solveNumber(" + nexti + ")", 0) 
		return DR_newMessage(DR_FAILURE_P2_NOT_REDIRECT, data)
	}
 
	if(data.page1Target != data.target2)
	{
		setTimeout("DR_solveNumber(" + nexti + ")", 0) 
		return DR_newMessage(DR_FAILURE_PI_DOESNT_POINT_P2, data) 
	}
 
	wpEditPage(data.target1, {}, DR_editFoo, DR_saveFoo, {_text : "[[" + data.page2Target + "]]" , DR_args:data})
 
}
 
function DR_editFoo(wpTextbox1, wpSummary, doc, data)
{
 
	wpTextbox1 =  "#REDIRECT " + data._text
	wpSummary = "Résolution de double redirection vers " + data._text
 
	return { wpTextbox1: wpTextbox1, wpSummary: wpSummary, data: data };
}
 
function DR_saveFoo(doc, data)
{
	var nexti = data.DR_args.i+1
 
	DR_newMessage(DR_SUCCESS, data.DR_args)
	setTimeout("DR_solveNumber(" + nexti + ")", 30000) 
}