Utilisateur:Maloq/DR.js
Apparence
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) ;
Firefox (sur GNU/Linux) / Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.if(mw.config.get('wgUserName') == 'Maloq')
{
if (mw.config.get('wgTitle') == "Maloq/DR" && mw.config.get('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
$(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)
}