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) }