User:Dudemanfellabra/Sandbox.js
var NRISEditors=[] // ["name",[total,[title1,state1],[title2,state2],...]]
var NRISPages=[]
var TotalTested=0
function NRIStest() {
if (mw.config.get('wgPageName')!="User:NationalRegisterBot/NRISOnly/All") return;
var button=document.createElement("input")
button.setAttribute("type", "button");
button.setAttribute("value", "Who created these?");
button.setAttribute("id", "testbutton");
button.setAttribute("onclick", "TestQueryEditors()");
var thediv=document.getElementById('NRISOnly-div')
if (thediv!=null) thediv.parentNode.insertBefore(button, thediv)
var ProgressDiv = document.createElement("div")
ProgressDiv.setAttribute("id", "ProgressDiv")
ProgressDiv.setAttribute("style", "width:100px; border:1px solid black; padding:5px; background:#ffffff")
button.parentNode.insertBefore(ProgressDiv, button)
}
function TestQueryEditors() {
var button=document.getElementById("testbutton")
button.disabled=true;
var content=document.getElementById("NRISOnly-div")
var list=content.getElementsByClassName("refbegin")
for (var j=0; j var pages=list[j].getElementsByTagName("li") for (var i=0; i NRISPages.push(pages[i].firstChild.title) } } TestQueryNextEditor(0) } function TestQueryNextEditor(current) { if (current==NRISPages.length) return; $.ajax({ dataType: "json", url: mw.util.wikiScript('api'), data: { format: 'json', action: 'query', prop: 'revisions', rvprop: 'user|timestamp', rvlimit: '1', rvdir: 'newer', titles: NRISPages[current], indexpageids: true }, error: function(ArticlejsonObject,status,errorThrown) {ArticlejsonObject.errorThrown=errorThrown}, complete: function(ArticlejsonObject,status) { TestQueryNextEditorComplete(ArticlejsonObject,status,current) } }); setTimeout(function(){ TestQueryNextEditor(current+1) }, 10); return; } function TestQueryNextEditorComplete(ArticlejsonObject,status,current) { if (status!="success") { setTimeout(function(){ // try again after delay if rate limit reached TestQueryNextEditor(current) }, 250); return; } var output=JSON.parse(ArticlejsonObject.responseText) if (typeof output.query=="undefined") {alert(current+"\n"+NRISPages[current])} for (var page in output.query.pages) { var user = output.query.pages[page].revisions[0]['user']; var timestamp = output.query.pages[page].revisions[0]['timestamp']; } timestamp = timestamp.replace("T"," – ").replace("Z"," UTC") // query to determine state $.ajax({ dataType: "json", url: mw.util.wikiScript('api'), data: { format: 'json', action: 'query', prop: 'linkshere', lhprop: 'title', lhnamespace: 0, titles: NRISPages[current] }, error: function(ArticlejsonObject,status,errorThrown) {ArticlejsonObject.errorThrown=errorThrown}, complete: function(ArticlejsonObject,status) { TestQueryStateFetched(ArticlejsonObject,status,current,user,timestamp) } }); } function TestQueryStateFetched(ArticlejsonObject,status,current,user,timestamp) { if (status!="success") { setTimeout(function(){ // try again after delay if rate limit reached TestQueryNextEditor(current) }, 250); return; } TotalTested++ var ProgressDiv=document.getElementById("ProgressDiv") ProgressDiv.innerHTML=TotalTested+" of "+NRISPages.length var output=JSON.parse(ArticlejsonObject.responseText) if (typeof output.query=="undefined") {alert(current+"\n"+NRISPages[current])} for (var page in output.query.pages) { var linkshere=output.query.pages[page].linkshere var state="" for (var i=0; i if (linkshere[i].title.indexOf("National Register of Historic Places listings")!=-1) { state=TestQueryGetState(linkshere[i].title) } if (state!="") break; } if (state=="") state="!Unknown" } if (NRISEditors.length==0) { NRISEditors[NRISEditors.length]=[user,[1,[NRISPages[current],state]]] } else { var match=false for (var i=0; i if (NRISEditors[i][0]==user) { match=true NRISEditors[i][1][0]++ NRISEditors[i][1][NRISEditors[i][1].length]=[""+NRISPages[current]+"",state] } } if (!match) NRISEditors[NRISEditors.length]=[user,[1,[""+NRISPages[current]+"",state]]] } if (TotalTested==NRISPages.length) TestEditorComplete() } function TestQueryGetState(title) { var temp=title.split(", ") var state=temp[temp.length-1] if (state=="Philadelphia") state="Pennsylvania" if (temp[0]==state||state.indexOf(':')!=-1) { if (title.indexOf("Chicago")!=-1) state="Illinois" else if (title.indexOf("St. Louis")!=-1) state="Missouri" else if (title.indexOf("Kansas City")!=-1) state="Missouri" else if (title.indexOf("Baltimore")!=-1) state="Maryland" else if (title.indexOf("Manhattan")!=-1) state="New York" else if (title.indexOf("Philadelphia")!=-1) state="Pennsylvania" else if (title.indexOf("Zion")!=-1) state="Utah" else state="" } return state } function TestEditorComplete() { NRISEditors.sort(function(a,b){if (a[1][0] > b[1][0]) return -1; if (a[1][0] < b[1][0]) return 1; return 0;}) // sort large to small var resultsStr="Results\n----------\n" for (var i=0; i resultsStr+="#"+NRISEditors[i][0]+": "+NRISEditors[i][1][0]+"\n" var ThisUsersArticles = NRISEditors[i][1].slice(1) ThisUsersArticles.sort(function(a,b){if (a[1] < b[1]) return -1; if (a[1] > b[1]) return 1; return 0;}) // sort by state ThisUsersArticles.unshift(NRISEditors[i][1][0]) NRISEditors[i][1]=ThisUsersArticles } var articlesStr="Articles by each editor\n----------\n" for (var i=0; i articlesStr+=NRISEditors[i][0]+" ("+NRISEditors[i][1][0]+"):\n" var oldstate=NRISEditors[i][1][1][1] var newstate="" articlesStr+="==="+oldstate+"===\n" for (var j=1; j newstate=NRISEditors[i][1][j][1] if (newstate!=oldstate) {articlesStr+="==="+newstate+"===\n"; oldstate=newstate} articlesStr+="#"+NRISEditors[i][1][j][0]+"\n" } articlesStr+="\n" } var popup = open(""); var resultspre=popup.document.createElement("pre") resultspre.innerHTML=resultsStr var articlespre=popup.document.createElement("pre") articlespre.innerHTML=articlesStr var pre = popup.document.createElement("pre"); pre.innerHTML=JSON.stringify(NRISEditors,null,4) popup.document.body.appendChild(resultspre); popup.document.body.appendChild(articlespre); popup.document.body.appendChild(pre); } $(window).load(NRIStest);