User:Dudemanfellabra/NRHPProgressHistory.js

/* The following code produces the data found at WikiProject National Register of Historic Places/Progress/History by looking back through old revisions of the WP:NRHPPROGRESS page. The data can then be used to create graphs

var StatesArray=[ ["Alabama","AL"], ["Alaska","AK"], ["Arizona","AZ"], ["Arkansas","AR"], ["California","CA"], ["Colorado","CO"], ["Connecticut","CT"], ["Delaware","DE"], ["District of Columbia","DC"], ["Florida","FL"], ["Georgia","GA"], ["Hawaii","HI"], ["Idaho","ID"], ["Illinois","IL"], ["Indiana","IN"], ["Iowa","IA"], ["Kansas","KS"], ["Kentucky","KY"], ["Louisiana","LA"], ["Maine","ME"], ["Maryland","MD"], ["Massachusetts","MA"], ["Michigan","MI"], ["Minnesota","MN"], ["Mississippi","MS"], ["Missouri","MO"], ["Montana","MT"], ["Nebraska","NE"], ["Nevada","NV"], ["New Hampshire","NH"], ["New Jersey","NJ"], ["New Mexico","NM"], ["New York","NY"], ["North Carolina","NC"], ["North Dakota","ND"], ["Ohio","OH"], ["Oklahoma","OK"], ["Oregon","OR"], ["Pennsylvania","PA"], ["Rhode Island","RI"], ["South Carolina","SC"], ["South Dakota","SD"], ["Tennessee","TN"], ["Texas","TX"], ["Utah","UT"], ["Vermont","VT"], ["Virginia","VA"], ["Washington","WA"], ["West Virginia","WV"], ["Wisconsin","WI"], ["Wyoming","WY"], ["Puerto Rico","PR"], ["Guam","GU"], ["Virgin Islands","VI"], ["Northern Mariana Islands","MP"], ["American Samoa","AS"], ["Federated States of Micronesia","FM"], ["Palau","PW"], ["Marshall Islands","MH"], ["Minor Outlying Islands","UM"], ];

function ProgressPageHistoryButton { if (mw.config.get('wgPageName')!="Wikipedia:WikiProject_National_Register_of_Historic_Places/Progress/History") return var button=document.createElement("input") button.setAttribute("type", "button"); button.setAttribute("value", "Get Progress Page History"); button.setAttribute("id", "historybutton"); button.setAttribute("onclick", "HistoryButtonClick"); var content=document.getElementById('mw-content-text')

content.parentNode.insertBefore(button, content) }

function HistoryButtonClick { var button=document.getElementById("historybutton") button.value="Working..." button.disabled=true

var ProgressDiv = document.createElement('div') ProgressDiv.setAttribute('id', 'ProgressDiv') ProgressDiv.setAttribute("style", "width:500px; border:1px solid black; padding:5px") button.parentNode.insertBefore(ProgressDiv, button) ProgressDiv.innerHTML = "Querying old edits" GetProgressPageHistory }

function GetProgressPageHistory { var ProgressDiv = document.getElementById("ProgressDiv")

var Updates = []; var wikitext = '' ProgressDiv.innerHTML+="."

var RevsWithMapsSection = JSON.parse(       $.ajax({ dataType: "json", url: mw.util.wikiScript('api'), data: { format: 'json', rawcontinue: 'true', action: 'query', prop: 'revisions', rvprop: 'timestamp|comment|content', rvlimit: 'max', rvendid: '568713090', rvsection: '2', titles: 'Wikipedia:WikiProject National Register of Historic Places/Progress' },           async:false })       .responseText    ); for (var r in RevsWithMapsSection.query.pages["38959189"].revisions) { if (RevsWithMapsSection.query.pages["38959189"].revisions[r].comment.indexOf("Updating county data as of ")>-1) { Updates[Updates.length] = [RevsWithMapsSection.query.pages["38959189"].revisions[r].timestamp,RevsWithMapsSection.query.pages["38959189"].revisions[r]["*"]] }   }    if (RevsWithMapsSection["query-continue"]) { var rvcontinue = RevsWithMapsSection["query-continue"].revisions.rvcontinue while (true) { ProgressDiv.innerHTML+="." var RevsWithMapsSection = JSON.parse(               $.ajax({ dataType: "json", url: mw.util.wikiScript('api'), data: { format: 'json', action: 'query', prop: 'revisions', rvprop: 'timestamp|comment|content', rvlimit: 'max', rvcontinue: rvcontinue, rawcontinue: 'true', rvendid: '568713090', rvsection: '2', titles: 'Wikipedia:WikiProject National Register of Historic Places/Progress' },                   async:false })               .responseText            ); for (var r in RevsWithMapsSection.query.pages["38959189"].revisions) { if (RevsWithMapsSection.query.pages["38959189"].revisions[r].comment.indexOf("Updating county data as of ")>-1) { Updates[Updates.length] = [RevsWithMapsSection.query.pages["38959189"].revisions[r].timestamp,RevsWithMapsSection.query.pages["38959189"].revisions[r]["*"]] }           }            if (RevsWithMapsSection["query-continue"]) { rvcontinue = RevsWithMapsSection["query-continue"].revisions.rvcontinue } else { break; }       }    }    ProgressDiv.innerHTML+="." var RevsWithoutMapsSection = JSON.parse(       $.ajax({ dataType: "json", url: mw.util.wikiScript('api'), data: { format: 'json', action: 'query', rawcontinue: 'true', prop: 'revisions', rvprop: 'timestamp|comment|content', rvlimit: 'max', rvstartid: '568219687', rvendid: '554210647', rvsection: '1', titles: 'Wikipedia:WikiProject National Register of Historic Places/Progress' },           async:false })       .responseText    ); for (var r in RevsWithoutMapsSection.query.pages["38959189"].revisions) { if (RevsWithoutMapsSection.query.pages["38959189"].revisions[r].comment.indexOf("Updating county data as of ")>-1) { Updates[Updates.length] = [RevsWithoutMapsSection.query.pages["38959189"].revisions[r].timestamp,RevsWithoutMapsSection.query.pages["38959189"].revisions[r]["*"]] }   }    if (RevsWithoutMapsSection["query-continue"]) { var rvcontinue = RevsWithoutMapsSection["query-continue"].revisions.rvcontinue while (true) { ProgressDiv.innerHTML+="." var RevsWithoutMapsSection = JSON.parse(               $.ajax({ dataType: "json", url: mw.util.wikiScript('api'), data: { format: 'json', rawcontinue: 'true', action: 'query', prop: 'revisions', rvprop: 'timestamp|comment|content', rvlimit: 'max', rvstartid: '568219687', rvendid: '554210647', rvcontinue: rvcontinue, rvsection: '1', titles: 'Wikipedia:WikiProject National Register of Historic Places/Progress' },                   async:false })               .responseText            ); for (var r in RevsWithoutMapsSection.query.pages["38959189"].revisions) { if (RevsWithoutMapsSection.query.pages["38959189"].revisions[r].comment.indexOf("Updating county data as of ")>-1) { Updates[Updates.length] = [RevsWithoutMapsSection.query.pages["38959189"].revisions[r].timestamp,RevsWithoutMapsSection.query.pages["38959189"].revisions[r]["*"]] }           }            if (RevsWithoutMapsSection["query-continue"]) { rvcontinue = RevsWithoutMapsSection["query-continue"].revisions.rvcontinue } else { break; }       }    }    ProgressDiv.innerHTML+="Done! Compiling data..." for (var i=0; i<Updates.length; i++) { if (Updates[i][0]=="2013-05-23T07:37:05Z"||Updates[i][0]=="2013-05-23T07:32:15Z"||Updates[i][0]=="2013-10-14T01:15:21Z"||Updates[i][0]=="2013-05-29T07:14:43Z") {Updates.splice(i,1); i--; continue}  // get rid of error/test updates var thisrevtext=Updates[i][1] Updates[i][1]=[]; Updates[i][1][0]=thisrevtext.match(/Total:(.|\n)*?\|}/g)[0].replace(/\n/g,"").replace(/!/g,"|") for (var j=0; j<StatesArray.length; j++) { var regex=new RegExp("\\|[ ]*?(\\[\\[)?.*?"+StatesArray[j][0]+"(\\]\\])?[ ]*?\\n(.|\\n)*?\\|--", "g") Updates[i][1][Updates[i][1].length]=thisrevtext.match(regex)[0] regex=new RegExp("\\|[ ]*?(\\[\\[)?.*?"+StatesArray[j][0]+"(\\]\\])?[ ]*?\\n", "g") Updates[i][1][Updates[i][1].length-1]=Updates[i][1][Updates[i][1].length-1].replace(regex,"").replace(/\n/g,"")   // drop state name }       var d=new Date(Updates[i][0]); var timestampstr=d.getUTCFullYear.toString var month=parseFloat(d.getUTCMonth+1).toString if (month.length<2) month="0"+month timestampstr+=month var day=d.getUTCDate.toString if (day.length<2) day="0"+day timestampstr+=day Updates[i][0]=timestampstr }

wikitext+='\n# 1 Date           2 Total             3 Illustrated       4 %Illustrated      5 Articled          6 %Articled         7 Stubs             8 NRIS-only         9 Start+            10 %Start+          11 Unassessed       12 Untagged         13 Net_Quality      ' var currentColumn=14 for (var i=0; i<StatesArray.length; i++) { wikitext+=currentColumn+' '+StatesArray[i][1]+'_Total       ' if (currentColumn<100) wikitext+=' ' currentColumn++ wikitext+=currentColumn+' '+StatesArray[i][1]+'_Illustrated ' if (currentColumn<100) wikitext+=' ' currentColumn++ wikitext+=currentColumn+' '+StatesArray[i][1]+'_%Illustrated ' if (currentColumn<100) wikitext+=' ' currentColumn++ wikitext+=currentColumn+' '+StatesArray[i][1]+'_Articled    ' if (currentColumn<100) wikitext+=' ' currentColumn++ wikitext+=currentColumn+' '+StatesArray[i][1]+'_%Articled   ' if (currentColumn<100) wikitext+=' ' currentColumn++ wikitext+=currentColumn+' '+StatesArray[i][1]+'_Stubs       ' if (currentColumn<100) wikitext+=' ' currentColumn++ wikitext+=currentColumn+' '+StatesArray[i][1]+'_NRIS-only   ' if (currentColumn<100) wikitext+=' ' currentColumn++ wikitext+=currentColumn+' '+StatesArray[i][1]+'_Start+      ' if (currentColumn<100) wikitext+=' ' currentColumn++ wikitext+=currentColumn+' '+StatesArray[i][1]+'_%Start+     ' if (currentColumn<100) wikitext+=' ' currentColumn++ wikitext+=currentColumn+' '+StatesArray[i][1]+'_Unassessed  ' if (currentColumn<100) wikitext+=' ' currentColumn++ wikitext+=currentColumn+' '+StatesArray[i][1]+'_Untagged    ' if (currentColumn<100) wikitext+=' ' currentColumn++ wikitext+=currentColumn+' '+StatesArray[i][1]+'_Net_Quality ' if (currentColumn<100) wikitext+=' ' currentColumn++ }   wikitext+='\n' for (var i=0; i<Updates.length; i++) { wikitext+=Updates[i][0]+"           " for (var j=0; j<Updates[i][1].length; j++) { // Total wikitext+=Updates[i][1][j].split("|")[1].replace(/,/g,"").trim for (var k=0; k<20-Updates[i][1][j].split("|")[1].replace(/,/g,"").trim.length; k++) {wikitext+=" "}

// Illustrated wikitext+=Updates[i][1][j].split("|")[2].replace(/,/g,"").trim for (var k=0; k<20-Updates[i][1][j].split("|")[2].replace(/,/g,"").trim.length; k++) {wikitext+=" "}

// %Illustrated wikitext+=Updates[i][1][j].split("|")[3].replace(/%/g,"").trim for (var k=0; k<20-Updates[i][1][j].split("|")[3].replace(/%/g,"").trim.length; k++) {wikitext+=" "}

// Articled wikitext+=Updates[i][1][j].split("|")[4].replace(/,/g,"").trim for (var k=0; k<20-Updates[i][1][j].split("|")[4].replace(/,/g,"").trim.length; k++) {wikitext+=" "}

// %Articled wikitext+=Updates[i][1][j].split("|")[5].replace(/%/g,"").trim for (var k=0; k<20-Updates[i][1][j].split("|")[5].replace(/%/g,"").trim.length; k++) {wikitext+=" "}

// Stubs if (parseFloat(Updates[i][0])>=20130901) { wikitext+=Updates[i][1][j].split("|")[6].replace(/,/g,"").trim if (Updates[i][1][j].split("|")[6].replace(/,/g,"").trim.length==0) { wikitext+="-" } else { wikitext+=" " }               for (var k=0; k<19-Updates[i][1][j].split("|")[6].replace(/,/g,"").trim.length; k++) {wikitext+=" "} } else { wikitext+="-                  " }

// NRIS-only if (parseFloat(Updates[i][0])>20131120) { if (parseFloat(Updates[i][0])==20131121) { wikitext+="-                  " } else { wikitext+=Updates[i][1][j].split("|")[7].replace(/,/g,"").trim if (Updates[i][1][j].split("|")[7].replace(/,/g,"").trim.length==0) { wikitext+="-" } else { wikitext+=" " }                   for (var k=0; k<19-Updates[i][1][j].split("|")[7].replace(/,/g,"").trim.length; k++) {wikitext+=" "} }           } else { wikitext+="-                  " }

// Start+ if (parseFloat(Updates[i][0])>=20130901) { if (parseFloat(Updates[i][0])>20131120) { wikitext+=Updates[i][1][j].split("|")[8].replace(/,/g,"").trim if (Updates[i][1][j].split("|")[8].replace(/,/g,"").trim.length==0) { wikitext+="-" } else { wikitext+=" " }                   for (var k=0; k<19-Updates[i][1][j].split("|")[8].replace(/,/g,"").trim.length; k++) {wikitext+=" "} } else { wikitext+=Updates[i][1][j].split("|")[7].replace(/,/g,"").trim if (Updates[i][1][j].split("|")[7].replace(/,/g,"").trim.length==0) { wikitext+="-" } else { wikitext+=" " }                   for (var k=0; k<19-Updates[i][1][j].split("|")[7].replace(/,/g,"").trim.length; k++) {wikitext+=" "} }           } else { wikitext+="-                  " }

// %Start+ if (parseFloat(Updates[i][0])>=20130901) { if (parseFloat(Updates[i][0])>20131120) { wikitext+=Updates[i][1][j].split("|")[9].replace(/%/g,"").trim if (Updates[i][1][j].split("|")[9].replace(/%/g,"").trim.length==0) { wikitext+="-" } else { wikitext+=" " }                   for (var k=0; k<19-Updates[i][1][j].split("|")[9].replace(/%/g,"").trim.length; k++) {wikitext+=" "} } else { wikitext+=Updates[i][1][j].split("|")[8].replace(/%/g,"").trim if (Updates[i][1][j].split("|")[8].replace(/%/g,"").trim.length==0) { wikitext+="-" } else { wikitext+=" " }                   for (var k=0; k<19-Updates[i][1][j].split("|")[8].replace(/%/g,"").trim.length; k++) {wikitext+=" "} }           } else { wikitext+="-                  " }

// Unassessed if (parseFloat(Updates[i][0])>=20130901) { if (parseFloat(Updates[i][0])>20131120) { wikitext+=Updates[i][1][j].split("|")[10].replace(/,/g,"").trim if (Updates[i][1][j].split("|")[10].replace(/,/g,"").trim.length==0) { wikitext+="-" } else { wikitext+=" " }                   for (var k=0; k<19-Updates[i][1][j].split("|")[10].replace(/,/g,"").trim.length; k++) {wikitext+=" "} } else { wikitext+=Updates[i][1][j].split("|")[9].replace(/,/g,"").trim if (Updates[i][1][j].split("|")[9].replace(/,/g,"").trim.length==0) { wikitext+="-" } else { wikitext+=" " }                   for (var k=0; k<19-Updates[i][1][j].split("|")[9].replace(/,/g,"").trim.length; k++) {wikitext+=" "} }           } else { wikitext+="-                  " }

// Untagged if (parseFloat(Updates[i][0])>=20130901) { if (parseFloat(Updates[i][0])>20131120) { wikitext+=Updates[i][1][j].split("|")[11].replace(/,/g,"").trim if (Updates[i][1][j].split("|")[11].replace(/,/g,"").trim.length==0) { wikitext+="-" } else { wikitext+=" " }                   for (var k=0; k<19-Updates[i][1][j].split("|")[11].replace(/,/g,"").trim.length; k++) {wikitext+=" "} } else { wikitext+=Updates[i][1][j].split("|")[10].replace(/,/g,"").trim if (Updates[i][1][j].split("|")[10].replace(/,/g,"").trim.length==0) { wikitext+="-" } else { wikitext+=" " }                   for (var k=0; k<19-Updates[i][1][j].split("|")[10].replace(/,/g,"").trim.length; k++) {wikitext+=" "} }           } else { wikitext+="-                  " }

// Net Quality if (parseFloat(Updates[i][0])>20131121) { wikitext+=Updates[i][1][j].split("|")[12].replace(/%/g,"").trim if (Updates[i][1][j].split("|")[12].replace(/%/g,"").trim.length==0) { wikitext+="-" } else { wikitext+=" " }               for (var k=0; k<19-Updates[i][1][j].split("|")[12].replace(/%/g,"").trim.length; k++) {wikitext+=" "} } else { wikitext+="-                  " }

}       wikitext+="\n" }   wikitext+=' \n\n'

ProgressDiv.innerHTML+="Done! Querying FA/GA stats" var FA_Updates = []; var GA_Updates = []; ProgressDiv.innerHTML+="." var FA_Revs = JSON.parse(       $.ajax({ dataType: "json", url: mw.util.wikiScript('api'), data: { format: 'json', rawcontinue: 'true', action: 'query', prop: 'revisions', rvprop: 'timestamp|user|content', rvlimit: 'max', rvuser: 'JL-Bot', titles: 'Wikipedia:WikiProject National Register of Historic Places/Recognized content' },           async:false })       .responseText    ); for (var r in FA_Revs.query.pages["32792745"].revisions) { if (FA_Revs.query.pages["32792745"].revisions[r].timestamp,FA_Revs.query.pages["32792745"].revisions[r]["timestamp"]!="2015-05-10T17:12:52Z") { FA_Updates[FA_Updates.length] = [FA_Revs.query.pages["32792745"].revisions[r].timestamp,FA_Revs.query.pages["32792745"].revisions[r]["*"]] }   }    if (FA_Revs["query-continue"]) { var rvcontinue = FA_Revs["query-continue"].revisions.rvcontinue while (true) { ProgressDiv.innerHTML+="." var FA_Revs = JSON.parse(               $.ajax({ dataType: "json", url: mw.util.wikiScript('api'), data: { format: 'json', rawcontinue: 'true', action: 'query', prop: 'revisions', rvprop: 'timestamp|user|content', rvlimit: 'max', rvcontinue: rvcontinue, rvuser: 'JL-Bot', titles: 'Wikipedia:WikiProject National Register of Historic Places/Recognized content' },                   async:false })               .responseText            ); for (var r in FA_Revs.query.pages["32792745"].revisions) { if (FA_Revs.query.pages["32792745"].revisions[r].timestamp,FA_Revs.query.pages["32792745"].revisions[r]["timestamp"]!="2015-05-10T17:12:52Z") { FA_Updates[FA_Updates.length] = [FA_Revs.query.pages["32792745"].revisions[r].timestamp,FA_Revs.query.pages["32792745"].revisions[r]["*"]] }           }            if (FA_Revs["query-continue"]) { rvcontinue = FA_Revs["query-continue"].revisions.rvcontinue } else { break; }       }    }    ProgressDiv.innerHTML+="." var GA_Revs = JSON.parse(       $.ajax({ dataType: "json", url: mw.util.wikiScript('api'), data: { format: 'json', rawcontinue: 'true', action: 'query', prop: 'revisions', rvprop: 'timestamp|user|content', rvlimit: 'max', rvuser: 'JL-Bot', titles: 'Wikipedia:WikiProject National Register of Historic Places/GA' },           async:false })       .responseText    ); for (var r in GA_Revs.query.pages["32766443"].revisions) { if (GA_Revs.query.pages["32766443"].revisions[r].timestamp,GA_Revs.query.pages["32766443"].revisions[r]["timestamp"]!="2015-05-10T17:12:45Z") { GA_Updates[GA_Updates.length] = [GA_Revs.query.pages["32766443"].revisions[r].timestamp,GA_Revs.query.pages["32766443"].revisions[r]["*"]] }   }    if (GA_Revs["query-continue"]) { var rvcontinue = GA_Revs["query-continue"].revisions.rvcontinue while (true) { ProgressDiv.innerHTML+="." var GA_Revs = JSON.parse(               $.ajax({ dataType: "json", url: mw.util.wikiScript('api'), data: { format: 'json', rawcontinue: 'true', action: 'query', prop: 'revisions', rvprop: 'timestamp|user|content', rvlimit: 'max', rvcontinue: rvcontinue, rvuser: 'JL-Bot', titles: 'Wikipedia:WikiProject National Register of Historic Places/GA' },                   async:false })               .responseText            ); for (var r in GA_Revs.query.pages["32766443"].revisions) { if (GA_Revs.query.pages["32766443"].revisions[r].timestamp,GA_Revs.query.pages["32766443"].revisions[r]["timestamp"]!="2015-05-10T17:12:45Z") { GA_Updates[GA_Updates.length] = [GA_Revs.query.pages["32766443"].revisions[r].timestamp,GA_Revs.query.pages["32766443"].revisions[r]["*"]] }           }            if (GA_Revs["query-continue"]) { rvcontinue = GA_Revs["query-continue"].revisions.rvcontinue } else { break; }       }    }    for (var i=0; i<FA_Updates.length; i++) { if (FA_Updates[i][0]=="2014-06-28T18:12:43Z") {FA_Updates.splice(i,1); i--; continue}  // get rid of error/test updates var thisrevtext=FA_Updates[i][1] var str="=== Featured articles===" var FASectionBegin = thisrevtext.indexOf(str) thisrevtext=thisrevtext.substr(FASectionBegin,thisrevtext.indexOf("===",FASectionBegin+str.length)-FASectionBegin) FA_Updates[i][1]=thisrevtext.match(/\[\[.*?\]\]/g).length

var d=new Date(FA_Updates[i][0]); var timestampstr=d.getUTCFullYear.toString var month=parseFloat(d.getUTCMonth+1).toString if (month.length<2) month="0"+month timestampstr+=month var day=d.getUTCDate.toString if (day.length<2) day="0"+day timestampstr+=day FA_Updates[i][0]=timestampstr }   for (var i=0; i<GA_Updates.length; i++) { if (GA_Updates[i][0]=="2014-06-28T18:12:26Z") {GA_Updates.splice(i,1); i--; continue}  // get rid of error/test updates var thisrevtext=GA_Updates[i][1] GA_Updates[i][1]=thisrevtext.match(/\[\[.*?\]\]/g).length

var d=new Date(GA_Updates[i][0]); var timestampstr=d.getUTCFullYear.toString var month=parseFloat(d.getUTCMonth+1).toString if (month.length<2) month="0"+month timestampstr+=month var day=d.getUTCDate.toString if (day.length<2) day="0"+day timestampstr+=day GA_Updates[i][0]=timestampstr }

wikitext+='\n# 1 Date   2 FA_Count  3 Date      4 GA_Count  \n' for (var i=0; i<FA_Updates.length; i++) { wikitext+=FA_Updates[i][0]+"   "+FA_Updates[i][1] for (var k=0; k<12-FA_Updates[i][1].toString.length; k++) {wikitext+=" "} if (i<GA_Updates.length) wikitext+=GA_Updates[i][0]+"   "+GA_Updates[i][1] wikitext+="\n" }   wikitext+=' \n\n'

ProgressDiv.innerHTML+="Done! The results will now pop up in a new tab for copying." setTimeout(DumpData(wikitext), 5000); }

function DumpData(wikitext) { var popup = open(""); var div = popup.document.createElement("div"); div.innerHTML=wikitext popup.document.body.appendChild(div); }

$(ProgressPageHistoryButton)